请选择 进入手机版 | 继续访问电脑版

[MySql] MySQL中毗连 查询和子查询的题目

[复制链接]
查看224 | 回复44 | 2021-9-12 21:29:46 | 显示全部楼层 |阅读模式
目次

多表毗连 的基本语法

多表毗连 ,就是将几张表拼接为一张表,然后举行 查询

  1. select 字段1, 字段2, ...
  2. from 表1 {inner|lift|right} join 表2
  3. on 连接条件;
复制代码

有如下两张表:部门表和员工表

MySQL中毗连
查询和子查询的题目

MySQL中毗连
查询和子查询的题目

交叉毗连 和笛卡尔积征象

交叉毗连

交叉毗连 ,又名无条件内毗连 /笛卡尔毗连

第一张表种的每一项会和另一张表的每一项依次组合

  1. select * from employee,department;
复制代码

MySQL中毗连
查询和子查询的题目

上述结果 肯定不是我们想晓得的,左表中每一个人都有4个部门,细致 观察这4条记录,恰好 是左表每一条记录和右表逐一 匹配后的结果 。

笛卡尔积征象

MySQL中毗连
查询和子查询的题目

笛卡尔积征象 产生的缘故起因 :两张表没有有效 的毗连 条件。既然你没有毗连 条件,本表中的第一行肯定是能和别的 表中的全部 行举行 逐一 匹配,同理,本表中的第二行肯定是能和别的 表中的全部 行举行 逐一 匹配,以此类推,本表中的末了 一行m也可以和别的 表中的全部 行举行 逐一 匹配。若别的 一张表有n行,那么末了 表现 的行数,肯定就是m*n行了。

假如 不想产生笛卡尔积征象 ,就必要 添加有效 的表毗连 条件。拿上述例子来说,左表dep_id只有和右表id相当 时,才代表他们的部门。

内毗连

内毗连 (INNER JOIN)是找几张表的交集,即根据条件筛选出来精确 的结果 。

  1. select emp.id,emp.name,emp.age,emp.dep_id,emp.gender,dep.id,dep.name
  2. from employee as emp INNER JOIN department as dep
  3. on emp.dep_id=dep.id;
复制代码

MySQL中毗连
查询和子查询的题目

由于部门表中没有

  1. id=5
复制代码
的部门,以是 员工表
  1. dep_id=5
复制代码
的这条记录没有返回;而由于
  1. 行政部
复制代码
没有员工,以是 这条记录也没返回。

外毗连

左外毗连

左毗连 (left join)是以左表为准,假如 右表中没有合适的记录,用

  1. NULL
复制代码
补全;其本质是在内毗连 的基础上增长 左表有效 果 而右表没有的记录(内毗连 时,这种环境 的记录会忽略)。

  1. select emp.id,emp.name,emp.age,emp.dep_id,emp.gender,dep.id,dep.name
  2. from employee as emp left join department as dep
  3. on emp.dep_id=dep.id;
复制代码

MySQL中毗连
查询和子查询的题目

右外毗连

跟左毗连 恰好 相反,右毗连 (right join)是以右表为准,假如 左表中某些字段没有合适的结果 ,用

  1. NULL
复制代码
补全;其本质是在内毗连 的基础上增长 右表有效 果 而左表没有的记录(内毗连 时,这种环境 的记录会忽略)。

  1. select emp.id,emp.name,emp.age,emp.dep_id,emp.gender,dep.id,dep.name
  2. from employee as emp right join department as dep
  3. on emp.dep_id=dep.id;
复制代码

MySQL中毗连
查询和子查询的题目

全外毗连

全外毗连 ,在内毗连 的基础上,展示左右表的全部 的记录,而左右表中缺省记录以

  1. NULL
复制代码
补全。

MySQL中并没有全外毗连 的

  1. FULL JOIN
复制代码
语法,而是借助
  1. UNION/UNION ALL
复制代码
语句实现。

  1. UNION
复制代码
  1. UNION ALL
复制代码
的区别,
  1. UNION
复制代码
具有去重功能。

  1. select emp.id,emp.name,emp.age,emp.dep_id,emp.gender,dep.id,dep.name
  2. from employee as emp left join department as dep
  3. on emp.dep_id=dep.id
  4. unionselect emp.id,emp.name,emp.age,emp.dep_id,emp.gender,dep.id,dep.name
  5. from employee as emp right join department as dep
  6. on emp.dep_id=dep.id;
复制代码

MySQL中毗连
查询和子查询的题目

子查询

  • 子查询是将一个查询语句嵌套再另一个查询语句中的查询方式:
  • 子查询的内层查询结果 ,可以作为外层查询语句提供查询条件。
  • 子查询中可以包含
    1. IN
    复制代码
    1. NOT IN
    复制代码
    1. AND
    复制代码
    1. ALL
    复制代码
    1. EXISTS
    复制代码
    1. NOT EXISTS
    复制代码
    等关键字。

子查询中还可以包含比较运算符,如

  1. =
复制代码
  1. !=
复制代码
  1. >
复制代码
  1. <
复制代码
等。

  1. -- 查询平均年龄在20以上的部门名称
  2. select name
  3. from department
  4. where id in (
  5. select dep_id
  6. from employee
  7. group by dep_id
  8. having avg(age) > 20);
  9. -- 查询财务部员工姓名
  10. select name
  11. from employee
  12. where dep_id in (
  13. select id
  14. from department
  15. where name='财务部');
  16. -- 查询所有大于平均年龄的员工的年龄和姓名
  17. select name,age
  18. from employee
  19. where age > (
  20. select avg(age) from employee);
复制代码

MySQL中毗连
查询和子查询的题目

到此这篇关于MySQL中毗连 查询和子查询的标题 的文章就先容 到这了,更多相干 MySQL毗连 查询和子查询内容请搜索 脚本之家从前 的文章或继续欣赏 下面的相干 文章渴望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 悲新座客 | 2021-9-16 22:47:01 | 显示全部楼层
有内涵!
回复

使用道具 举报

avatar 扮猪吃老虎2017 | 2021-9-19 06:46:30 | 显示全部楼层
吹牛的人越来越多了!
回复

使用道具 举报

avatar 想做的都做了吗 | 2021-9-26 09:18:07 | 显示全部楼层
好东西,学习学习!
回复

使用道具 举报

avatar 小小的鼻祖 | 2021-10-3 17:41:02 | 显示全部楼层
admin楼主的帖子越来越有深度了!
回复

使用道具 举报

avatar 人生如梦总人q | 2021-10-13 10:14:06 | 显示全部楼层
楼上的说的很多!
回复

使用道具 举报

avatar 伤心骑士口 | 2021-10-16 00:42:30 | 显示全部楼层
青春不在了,青春痘还在!
回复

使用道具 举报

avatar 123457439 | 2021-10-17 03:43:43 | 显示全部楼层
林子大了,什么鸟都有了啊!
回复

使用道具 举报

以后就跟admin楼主混了!
回复

使用道具 举报

avatar 彭832 | 6 天前 | 显示全部楼层
管它三七二十一!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则