DQL:数据查询语言
2020-12-28 21:39:41 0 举报
AI智能生成
DQL:数据查询语言,思维导图
作者其他创作
大纲/内容
连接查询
sql92
内连接
等值连接
注意事项
①多表等值连接的结果为多表的交集部分②n表连接,至少需要n-1个连接条件③多表的顺序没有要求④一般需要为表起别名⑤可以搭配前面介绍的所有字句使用,比如排序、分组、筛选
非等值连接
自连接
sql99
内连接(连接用inner表示)
语法
select 查询列表\tfrom 表1 别名\tinner join 表2 别名\ton 连接条件
①添加排序、分组、筛选②inner可以省略③筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读④inner join连接和sql92语法中的等值连接效果是一样的,都是查询多表的交集
外链接
左外连接(left)
右外连接(right)
全外连接(full)
(mysql不支持)
特点
1.左外连接的查询结果为主表中的所有记录\t如果从表中有和它匹配的,则显示匹配的值\t如果从表中没有和它匹配的,则显示null\t外连接查询结果=内连接结果+主表中有而从表中没有的记录2.左外连接,left join左边的是主表右外连接,right join右边的是主表3.左外和右外交换两个表的顺序,可以实现同样的效果
交叉连接(cross)
select 查询列表\tfrom 表1 别名cross join 表2 别名;
类似于笛卡尔乘积
select 查询列表\tfrom 表1 别名 [连接类型]\tjoin 表2 别名\ton 连接条件\t[where 筛选条件]\t[group by 分组]\t[having 筛选条件]\t[order by 排序列表]
sql99语法与sql92语法的比较
功能:sql99支持的较多可读性:sql99实现连接条件和筛选条件的分离,可读性较高
子查询
标量子查询(结果集只有一行一列)
select后面
举例
where后面或having后面
#③查询dept_id与1号员工相同,salary比2号员工多的员工信息SELECT *FROM employee1WHERE dept_id=(SELECT dept_idFROM employee1WHERE id=1) AND salary>(SELECT salaryFROM employee1WHERE id=2);
列子查询(结果集只有一行多列)
行子查询(结果集有一行多列)
表子查询(结果集一般为多行多列)
from后面
exists后面(相关子查询)
SELECT EXISTS(SELECT * FROM employee1 WHERE salary=10000);
语法:exists(完整的查询语句)结果:1或0
含义
出现在其他语句中的select语句,称为子查询或内查询外部的查询语句,称为主查询
①子查询放在小括号内②子查询一般放在条件的右侧③标量子查询,一般搭配着单行操作符使用当行操作符:> < <= >= <>
列子查询,一般搭配着多行操作符使用\tIN:等于列表中的任意一个\tANY/some:和子查询返回的某一个值比较\tALL:和子查询返回的所有值比较
④子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果
分页查询
①limit 语句放在查询语句的最后\t②公式:\t要显示的页数page,每页的条目数size\t\tselect 查询列表\tfrom 表\tlimit(page-1)*size size;
注意
offset代表的是起始的条目索引,默认从0开始\tsize代表的是显示的条目数
联合查询
查询语句1union查询语句2union...
应用场景:
要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致时
1.要求多条查询语句的查询列数是一致的!2.要求多条查询语句的查询的每一列的类型和顺序最好一致3.union关键字默认去重,如果使用union all可以包含重复项
union 联合 合并:将多条查询语句的结果合并成一个结果
DQL:数据查询语言
基础查询
查询单个字段
查询多个字段
查询所有字段
查询常量
查询函数
常见函数
字符函数
length:获取参数值的字节个数
concat:拼接字符串
upper():该函数是将字符全部变大写、lower
substr、substring:取子串、注意:索引从1开始
instr:返回子串第一次出现的索引,如果找不到返回0
trim:消除字符串两边的空格
lpad:用指定的字符实现左填充指定的长度
rpad:用指定的字符实现右填充指定的长度
replace:替换
数学函数
round:四舍五入
ceil:向上取整
floor:向下取整,返回<=该参数的最大整数
truncate:截断
mod:取余
流程控制函数
if函数:if else的效果
case函数的使用一:switch case 的效果
case函数的使用二:类似于 多重if
分组函数
max 最大值
min 最小值
count 计算个数
sum 求和
avg 平均值
查询表达式
条件查询
按条件表达式筛选
按逻辑表达式筛选
逻辑运算符:作用连接条件表达式,&&、||、!,and or not
模糊查询
like(一般和统配符搭配使用)
通配符
%:任意多个字符
_:任意单个字符
between and
in
is null | is not null
=或<>不能用于判断null值
is null或is not null可以判断null值
排序查询
升序查询
asc:代表的是从小到大排序,升序
降序查询
desc:代表的是从大到小排序。降序
语法表示
select 查询列表\tfrom 表\t[where 筛选条件]\torder by 排序列表[asc|desc]
order by的使用
order by字句中可以支持单个字段、多个字段、表达式、函数、别名
order by字句一般是放在查询语句的最后面,limit字句除外
分组查询
简单的分组查询
添加筛选条件的分组查询
分组前筛选\t原始表\t\t\t group by子句的前面\t\t\t where
添加复杂的筛选条件
分组后筛选\t分组后的结果集\t group by子句的后面\t\t having
分组函数做条件肯定是放在having子句中
能用分组前筛选的,就优先考虑使用分组前筛选
group by子句支持单个字段分组,多个字段分组(多个字段之间用逗号隔开没有顺序要求),表达式或函数(用的较少)
0 条评论
回复 删除
下一页