一,单表查询:
语法: select 字段1,字段2... from 表名 where 条件 group by field having 筛选 order by field limit 限制条数
关键字优先级:
from
where
group by
having
select
distinct
order by
limit
(1).找到表:from
(2).拿着where指定的约束条件,去文件/表中取出一条条记录
(3).将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组
(4).将分组的结果进行having过滤
(5).执行select
(6).去重
(7).将结果按条件排序:order by
(8).限制结果的显示条数
where约束:
1.比较运算符:>、<、>=、<=、<>、!= 2.between 80 and 100 :值在80到100之间 3.in(80,90,100)值是10或20或30 4.like 'xiaomagepattern': pattern可以是%或者_。%小时任意多字符,_表示一个字符 5.逻辑运算符:在多个条件直接可以使用逻辑运算符 and or not
group by 分组
#1、首先明确一点:分组发生在where之后,即分组是基于where之后得到的记录而进行的
#2、分组指的是:将所有记录按照某个相同字段进行归类,比如针对员工信息表的职位分组,或者按照性别进行分组等
#3、为何要分组呢?
取每个部门的最高工资
取每个部门的员工数
取男人数和女人数
小窍门:‘每’这个字后面的字段,就是我们分组的依据
#4、大前提: 可以按照任意字段分组,但是分组完毕后,比如group by post,只能查看post字段,如果想查看组内信息,需要借助于聚合函数
聚合函数
max()求最大值
min()求最小值
avg()求平均值
sum() 求和
count() 求总个数 一般使用count(1)
having 过滤
#!!!执行优先级从高到低:where > group by > having
#1. Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。
#2. Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数
order by 查询排序
asc 升序
desc 降序
limit 限制查询的记录数
第一个参数起始位置,第二个参数显示的个数
二,多表查询
外链接语法:select 字段列表 from 表1 inner|left|right join 表2 on 表1.字段 = 表2.字段;
(1)先看第一种情况交叉连接:不适用任何匹配条件。生成笛卡尔积
(2)内连接:只连接匹配的行
(3)外链接之左连接:优先显示左表全部记录
(4) 外链接之右连接:优先显示右表全部记录
(5) 全外连接:显示左右两个表全部记录(了解)
子查询:
(1)带in关键字的子查询
(2)带比较运算符的子查询
#比较运算符:=、!=、>、>=、<、<=、<>
(3)带EXISTS关键字的子查询
#EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录。而是返回一个真假值。True或False #当返回True时,外层查询语句 将进行查询;当返回值为False时,外层查询语句不进行查询
浙公网安备 33010602011771号