sql查询语句

sql语句解释
SELECT ? FROM 表 group by 字段分组查询
以字段进行分组
?必须是分组后的单条数据
SELECT ? FROM 表 group by 字段 HAVING 条件对分完组后的数据进行过滤


如果selecti语句同时包含有group by ,having , limit order by
那么他们执行顺序是group by , having , order by,limit

sql语句解释
SELECT … LIMIT start,rows分页查询
表示从start + 1行开始取
取出rows行,start从0开始计算
SELECT ? FROM 表1,表2多表查询
SELECT ? FROM A表 A表别名1,A表 A表别名2自连接
SELECT 字段 FROM 表1 WHERE 字段1 = (SELECT 字段1 FROM 表2…)…单行子查询
注:(SELECT 字段2 FROM 表2) 返回结果只有1个
(字段1 等于返回结果为true)
SELECT 字段 FROM 表1 WHERE 字段1 IN (SELECT 字段1 FROM 表2…)…多行子查询
注:(SELECT 字段2 FROM 表2) 返回结果有多个
(字段1 等于返回结果中其中一个为true)
SELECT ? FROM 表1 WHERE 字段 > ALL(SELECT 字段 FROM 表2…)返回结果中最大值
SELECT ? FROM 表1 WHERE 字段 > ANY(SELECT 字段 FROM 表2…)返回结果中最小值
SELECT ? FROM 表1,(SELECT ? FROM 表2 …) 表别名子查询临时表
临时表一定要有别名
SELECT ? FROM 表1 WHERE (字段1,字段2,字段3…) = (SELECT 字段1,字段2,字段3… FROM 表2 …)多列子查询
查询返回多个列数据的子查询语句
返回结果只有一个
字段1,字段2,字段3全部符合为true

合并查询

sql语句解释
SELECT ? FROM 表 UNION ALL SELECT ? FROM 表合并查询(将两个查询结果合并)
UNION ALL不会去重
UNION去重

外连接

sql语句解释
SELECT ? FROM 表1 LEFT JOJN 表2 ON 条件(比如字段 = 字段)左连接(左侧表完全显示)
SELECT ? FROM 表1 RIGHT JOJN 表2 ON 条件(比如字段 = 字段)右连接(右侧表完全显示)

自增长

sql语句解释
字段名 整型 PRIMARY KEY AUTO_INCREMENT(创建表)创建自增长字段
INSERT INTO 表名 (字段1,字段2…) VALUES(null,‘值’)添加自增长字段数据(自增长字段添加时直接写null)
INSERT INTO 表名 (字段2…) VALUES(‘值’)添加自增长字段数据(自增长字段不指定添加)
INSERT INTO 表名 VALUES(null,‘值’)添加自增长字段数据(自增长字段添加时直接写null)
ALTER TABLE 表名 AUTO_INCREMENT = 开始值修改默认的自增长开始值

分组统计

在这里插入图片描述

单字段分组

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

group by 语句中的显示字段必须是在分完组后,可以显示的单条数据
在这里插入图片描述

select id from test group by `name`;

运行上面语句,表就会被分组成这样,但mysql是关系型数据库,是不能一个单元格重新多条数据的
在这里插入图片描述
而使用聚合函数就可以解决这个问题,聚合函数可以对每组中的数据进行计算,从而得到唯一的数据

select count(id) from test group by `name`;

多字段分组

select count(id),`name`,num from test group by `name`,num;

可以看到是将name 和 num当成一个整体,只有name 和 num 都相等才会分为同一组,并且聚合函数是在分组完进行操作(count统计每组的id数量)
在这里插入图片描述

where和having的区别

where:
where是一个约束声明,使用where来约束来自数据库的数据;
where是在结果返回之前起作用的;
where中不能使用聚合函数。

having:
having是一个过滤声明;
在查询返回结果集以后,对查询结果进行的过滤操作;
在having中可以使用聚合函数。

用的地方不一样

  • where可以用于select、update、delete和insert into values(select * from table where …)语句中。
  • having只能用于select语句中

执行的顺序不一样

  • where的搜索条件是在执行语句进行分组之前应用
  • having的搜索条件是在分组条件后执行的
  • 即如果where和having一起用时,where会先执行,having后执行

子句有区别

  • where子句中的条件表达式having都可以跟,而having子句中的有些表达式where不可以跟;
  • having子句可以用集合函数(sum、count、avg、max和min),而where子句不可以。

where和having的执行顺序

  • where 早于 group by 早于 having
  • where子句在分组前先筛选记录,也就是说作用在group by 子句和having子句前,而 having子句在分组后对组记录进行筛选

总结

  1. WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。
  2. GROUP BY 子句用来分组 WHERE 子句的输出。
  3. HAVING 子句用来从分组的结果中筛选行

分页查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分组增强

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据分组总结

在这里插入图片描述
在这里插入图片描述

多表查询

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

自连接

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

子查询

在这里插入图片描述
查找与SMITH一个单位的所有成员
单行子查询
在这里插入图片描述

多行子查询
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

all_any

all
返回结果中最大值
在这里插入图片描述
在这里插入图片描述
any
返回结果最小值
在这里插入图片描述
在这里插入图片描述

子查询临时表

在这里插入图片描述

在这里插入图片描述

多列子查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

子查询练习

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

合并查询

在这里插入图片描述
union all
在这里插入图片描述
在这里插入图片描述
union
在这里插入图片描述
在这里插入图片描述

外连接

在这里插入图片描述

左外连接

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

右外连接

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

on 和 where的区别

当我们使用关联操作时,关联两张表或多张表来返回记录时,数据库就会生成一张临时表,最后将这张临时表返回给用户。以LEFT JOIN为例:在使用LEFT JOIN时,ON和WHERE的过滤条件的区别如下:

ON条件是在生成临时表时使用的条件,它不管ON中的条件是否为真,都会返回左边表中的记录

select * from dept left join emp on dept.deptno = emp.deptno;

在这里插入图片描述
由于LEFT JOIN(以及RIGHT JOIN,FULL JOIN)的特殊性,不管ON条件是否为真,数据库都会返回左侧(或右侧、左右两侧)表中的全部记录。


WHERE条件是在临时表已经生成后,对临时表进行的过滤条件。如果WHERE条件不为真的记录就会被过滤掉。

select * from dept left join emp on dept.deptno = emp.deptno where dept.deptno = emp.deptno;

在这里插入图片描述
可以发现外连接的执行顺序是要比where高的,并且where语句可以把不符合条件的行全部过滤掉

自增长

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

自我复制

在这里插入图片描述
自我复制
在这里插入图片描述
在这里插入图片描述
删除重复数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

sql语句执行顺序

  1. from
  2. join
  3. on
  4. where
  5. group by(开始使用select中的别名,后面的语句中都可以使用)
  6. avg,sum…
  7. having
  8. select
  9. distinct
  10. order by
  11. limit
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值