博客
关于我
MySQL复习day03:DQL数据查询语言完结
阅读量:571 次
发布时间:2019-03-10

本文共 2418 字,大约阅读时间需要 8 分钟。

DQL数据查询语言完结

sql99 连接查询语法

select 查询列表

from 表1 别名
【连接类型】join 表2 别名
on 连接条件
【连接类型】join 表3 别名
on 连接条件
...
【where 筛选条件】
【group by 分组】
having 筛选条件
order by 排序列表
连接类型:
1.内连接:inner
2.外连接

  • 左外连接:left [outer]
  • 右外连接:right [outer]
  • 全外连接:full [outer]—mysql不支持
    交叉连接:cross

外连接

用于查询一个表中有的,而另一个表中没有的数据,结果相当于A和B的差集以及A和B的交集。

特点:

  1. 外连接的查询结果为主表中的所有记录。如果从表中有和其匹配的结果,则显示匹配项,没有则显示null.
  2. 外连接的查询结果= 内连接结果+主表中有而从表中没有的记录。
  3. 左外连接中,left左边的是主表 ; 右外连接中,right右边的是主表;左外和右外交换两个表的顺序可以实现同样的效果。

交叉连接

相当于笛卡尔乘积形式。

子查询

出现在其他语句中内部的select语句,称为子查询或内查询。

外部语句可以是insert, update,delete,select等,但是select作为外部语句较多。外面如果为select语句,则此语句称为外查询或主查询

  • select 后面:仅支持标量子查询(又称单行子查询)
  • from后面:支持表子查询
  • where或having后面:标量子查询,列子查询,行子查询
  • exists后面:表子查询

特点:

①子查询放在小括号内,括号内不用加分号;

②子查询一般放在条件的右侧;
③标量子查询,一般搭配单行操作符使用,常见的单行操作符有:>, < , >=, <=, <>
列子查询,一般搭配多行操作符使用,如in ,any/some, all
④子查询的执行次序优先于主查询

(一) 标量子查询

select *from family.zhutongwhere budget>(  #子查询语句	select budget	from family.zhutong	where name = 'frog' ) and   bonus is not null and variety>'a';

(二)列子查询

返回多行,常使用in / not in 操作符,偶尔使用any (some) 和 all。

select boys.rank,a.avgfrom boysinner join (	select round(avg(budget),2) as 'avg'	from zhutong	group by variety) as aon a.avg between boys.low and boys.high;或如下select boys.rank,a.avgfrom (	select round(avg(budget),2) as 'avg'	from zhutong	group by variety) as a #必须取别名inner join boyson a.avg between boys.low and boys.high;

(三)exists 后面

也称为相关子查询,返回值为bool类型,一般exists 都能够被in代替

#existsselect boys.* from boys where  not exists(     select zhutong.match_id      from family.zhutong     where boys.id = family.zhutong.match_id);#inselect boys.* from boys where boys.id not in(     select family.zhutong.match_id      from family.zhutong);

分页查询

  • 应用场景:当要显示的数据一页显示不全,需要分页提交SQL请求。
  • 语法:
    select 查询列表
    from 表
    【join type表2
    on 连接条件
    where 筛选条件
    group by 分组条件
    having 分组后筛选
    order by 排序字段 】
    limit offset, set
    offset 表示要显示条目的起始索引(默认从0开始),size 表示要显示的条目个数
    特点:
  1. limit 语句放在查询语句的最后
  2. 公式
要显示的页数 page,每页的条目数size  select 查询列表  from 表  limit (page-1)*size,size
SELECT     emp.*FROM    empORDER BY EMPNO DESCLIMIT 5; #倒数5项

联合查询

  • 关键字:union [all]
  • 作用:将多条查询语句的结果合并为一个查询结果(求并集),在同一个表时相当于or。如果要查询的结果来自于多个表,且多个表没有直接的连接关系,但是查询的信息一致时(列数一致)。
  • 特点:
    ①要求多条查询语句的查询列数一致;
    ②要求多条查询语句的查询每一列的类型和顺序最好一致。
    ③union默认去重,如果不想去重,则使用union all
select * from empwhere year(emp.HIREDATE) > 1980or emp.COMM is not null;#等价于select * from empwhere year(emp.HIREDATE) > 1980union select *  from emp where emp.COMM is not null;

执行顺序

在这里插入图片描述

DQL完结

MySQL学习列表

致谢

感谢诸君观看,如果感觉有用的话,点个赞吧!🎉


转载地址:http://ibcvz.baihongyu.com/

你可能感兴趣的文章
MySQL 大数据量快速插入方法和语句优化
查看>>
mysql 如何给SQL添加索引
查看>>
mysql 字段区分大小写
查看>>
mysql 字段合并问题(group_concat)
查看>>
mysql 字段类型类型
查看>>
MySQL 字符串截取函数,字段截取,字符串截取
查看>>
MySQL 存储引擎
查看>>
mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
查看>>
MySQL 存储过程参数:in、out、inout
查看>>
mysql 存储过程每隔一段时间执行一次
查看>>
mysql 存在update不存在insert
查看>>
Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
查看>>
Mysql 学习总结(87)—— Mysql 执行计划(Explain)再总结
查看>>
Mysql 学习总结(88)—— Mysql 官方为什么不推荐用雪花 id 和 uuid 做 MySQL 主键
查看>>
Mysql 学习总结(89)—— Mysql 库表容量统计
查看>>
mysql 实现主从复制/主从同步
查看>>
mysql 审核_审核MySQL数据库上的登录
查看>>
mysql 导入 sql 文件时 ERROR 1046 (3D000) no database selected 错误的解决
查看>>
mysql 导入导出大文件
查看>>
MySQL 导出数据
查看>>