DQL
DQL语言
语法(圈内数字表示执行顺序表示):
select 查询列表 ⑦
from 表1 别名 ①
连接类型 join 表2 ②
on 连接条件 ③
where 筛选 ④
group by 分组列表 ⑤
having 筛选 ⑥
order by排序列表 ⑧
limit 起始条目索引,条目数; ⑨
分组查询:
select 分组函数,分组的字段 from 表【where 分组前筛选条件】group by 分组的字段 having 分组后的筛选 【order by 排序列表】
where条件针对原始表,having条件针对分组后的表。
连接查询:
SQL92::
1.等值连接: select 查询列表 from 表1 as 别名,表2 as 别名 where 表1.key=表2.key 【and 筛选条件】【group by 分组字段】 【having 分组后筛选】
2.非等值连接: select 查询列表 from 表1 别名,表2 别名 where 非等值的连接条件【and 筛选条件】【group by 分组字段】【having 分组后的筛选】【order by 排序字段】
3.自连接: select 查询列表 from 表 别名1,表 别名2 where 等值的连接条件【and 筛选条件】【group by 分组字段】【having 分组后的筛选】【order by 排序字段】
SQL99:
1.内连接:select 查询列表 from 表1 别名【inner】 join 表2 别名 on 连接条件 where 筛选条件【group by 分组列表】【having 分组后的筛选】【order by 排序列表】【limit 子句】;
特点:
①表的顺序可以调换
②内连接的结果=多表的交集
③n表连接至少需要n-1个连接条件
2.外连接:select 查询列表 from 表1 别名 left|right|full【outer】 join 表2 别名 on 连接条件【where 筛选条件】【group by 分组列表】【having 分组后的筛选】【order by 排序列表】【limit 子句】
特点:
①查询的结果=主表中所有的行,如果从表和它匹配的将显示匹配行,如果从表没有匹配的则显示null
②left join 左边的就是主表,right join 右边的就是主表,full join 两边都是主表
③一般用于查询除了交集部分的剩余的不匹配的行
3.交叉连接:select 查询列表 from 表1 别名 cross join 表2 别名
特点:
类似于笛卡尔乘积
子查询
嵌套在其他语句内部的select语句称为子查询或内查询,外面的语句可以是insert、update、delete、select等,一般select作为外面语句较多外面如果为select语句,则此语句称为外查询或主查询;
1、按结果集的行列
标量子查询(单行子查询):结果集为一行一列
列子查询(多行子查询):结果集为多行一列
行子查询:结果集为一行多列
表子查询:结果集为多行多列
语法:
select后面:
仅仅支持标量子查询
from后面:
表子查询
where或having后面:
标量子查询
列子查询
行子查询
exists后面:
标量子查询
列子查询
行子查询
表子查询
分页查询:
select 查询列表
from 表
limit 【offset,】size;
注意:
offset代表的是起始的条目索引,默认从0开始
size代表的是显示的条目数
联合查询:
合并、联合,将多次查询结果合并成一个结果
语法:
查询语句1
union 【all】
查询语句2
union 【all】
...
特点
1、要求多条查询语句的查询列数必须一致
2、要求多条查询语句的查询的各列类型、顺序最好一致
3、union 去重,union all包含重复项
条件查询:
语法:
select 查询列表
from 表名
where 筛选条件
简单条件运算符 : > < = <> != >= <= <=>安全等于
逻辑运算符: && and , || or , ! not
模糊查询:
like:一般搭配通配符使用,可以判断字符型或数值型
通配符:%任意多个字符,_任意单个字符
between and
in
is null /is not null:用于判断null值