mysql 复习笔记

sql

最近工作需要查活动的数据,之前学的sql语句有不少忘记了,工作需要复习一下sql
学习资料来源是慕课网的《与MySQl零接触》课程,安利一下,该课程通俗易懂,比较系统,还有练习的资料。

函数

  • 参数
  • 返回值

自定义函数 UDF

无参函数eg:

CREATE FUNCTION f1() RETURNS VARCHAR(30) RETURN DATE_FORMAT(NOW(), '%Y年%m月%d日 %H点:%i分:%s秒');

有参函数eg:

CREATE FUNCTION f2(num1 int, num2 int)
RETURNS float(10,2)
RETURN (num1+num2)/2;

修改语句结束符

DELIMITER //

函数体

  • 合法sql语句构成
  • 可以是简单的select insert语句
  • 复合结构用BEGIN…END
  • 复合结构可以包含声明、循环、控制结构

删除函数

DROP FUNCTION f1;

子查询 于连接

子查询:select中的select

子查询嵌套内容,必须出现在圆括号内

比较运算符 > = < !+ <>

select goods_id,goods_name,goods_price from tb_goods where 
goods_price >= (select round(avg(goods_price),2) from tb_goods);

关联的 any some| all

使用 [not] in 子查询

查找是否在某个集合中

[not] exists 子查询

insert ... select 将查到的数据写入表

多表更新

-- 表连接
table_reference
连接类型{[INNER|CROD] JOIN | {LEFT|RIGHT}[OUTer] JOIN}
table_reference
on 条件

update table_references set col_name1={expr1|DEFAULT}
[,col_name2={expr2|DEFAULT}]
[where where_condition]

多表更新一步到位

create ... select

create table tdb_goods_brands
(brand_id smallint unsigned primary key auto_increment,
brand_name varchar(40))
select brand_name from tdb_goods group by brand_name;

连接

自身连接

select p.type_id, p.type_name, count(s.type_name) as child_count from tdb_goods_types p left join tdb_goods_types s on s.parent_id=p.type_id group by p.type_id;

多表删除

-- 单表模拟多表删除重复数据
delete t1 from tdb_goods as t1 left join (select goods_id,goods_name from tdb_goods group by goods_name having count(goods_name)>=2) as t2 on t1.goods_name=t2.goods_name where t1.goods_id>t2.goods_id;

你可能感兴趣的:(MySQL)