update
改哪张表?需要改哪几列的值?分别改为什么值?在哪些生效?
update 表明 set 列1 = 新值1, 列2 = 新值2 where expr
delete
删除哪张表的数据?哪些行?
删除指定行?
delete from 表明 where expr
删除所有行(慎用)
delete from 表明
select
查哪张表的数据? 选择哪些列?哪些行?
select 列1, 列2..,列n from 表明 where expr
-
select 比较运算符
-
select 逻辑运算符
-
模糊查询like
-
统计函数
select max(列名) from 表名 where expr
select min(列名) from 表名 where expr
select sum(列名) from 表名 where expr
select avg(列名) from 表名 where expr
select count(*) from 表名 where expr
分组函数
查询每种商品类型的平均价格
select id, avg(price) from goods group by cat_id;
-
筛选
where 筛选条件产生结果集 having 是对结果集进一步的筛选(放在where后面) 查询超市贵于商店200元的商品 select good_name, (market_price-shop_price) as a from goods where 1 having a > 200;
-
查询所有人平均分查出来
select name, avg(core) as a from result group by name;
-
把挂科两名以上的筛选出来
select name,subject,score, score < 60 from result group;
-
求出挂科数与平均分
select name,sum(score<60) as a, avg(score) as b from result group by name;
-
两门以上的不及格平均成绩
select name,sum(score<60) as a, avg(score) as b from result group by name;
-
排序
按价格排序select * from from goods order by price desc;
先按商品分类排序,分类一样则按价格倒序排序
select * from from goods order by cat_id asc, price desc;
分页limit
查询价格最高的三名商品(参数1偏移量;参数2取得条数数)
select * from goods order by price desc limit 0, 3;在这里插入代码片
子查询书写顺序:where, group by, having, order by, limit
where子查询内层的查询的结果,作为外层的条件
查询最大商品
select * from goods where goods_id=(select max(goods_id) from goods);
每组id最大的商品
select good_id, goods_name from where goods_id in (select max(goods_id) from goods group by cat_id);
from子查询 先定义一个子查询为一个临时表,在对临时表进行查询。
每组id最大的商品
select goods_id, goods_name from (
select * from goods where 1 order by cat_id asc, goods_id desc
) tmp group by cat_id;
exists子查询 查询子查询存在的,存在取出,无不存在
查询栏目表,查询cat_id对应的goods的cat_id是否存在,如存在外层就要,不存在不要
select * from category where exist(
from * from goods where goods.cat_id = category.cat_id
)
关联查询
inner join 内连接
select xxxx from table1 inner join table1.xx = table2.xx
left jion 左连接
select xxxx from table1 left join table1.xx = table2.xx
以左表为主,查询右边相关数据,查不到的为null
l jion 左连接
select xxxx from table1 left join table1.xx = table2.xx
以左表为主,查询右边相关数据,查不到的为null
select m.*, t.name from m inner join t on m.hid=t.tid
union 查询把2条或者多条SQL的查询结果,合并成1个结果集
sql1 N行
sql2 M行
sql1 union sql2, N + M
union 语句满足条件:各语句取出的列数相同,
列名未必要一致,列名会使用第一条sql的列名为准
注意:使用union时,完全相等的行会合并,合并是比较耗时的
一般不让union进行合并, 使用union all 可以避免合并