MySQL的多表数据记录查询笔记

关系数据操作

合并查询数据记录

在MySQL中通过关键字UNION来实现并操作,即可以通过其将多个SELECT语句的查询结果合并在一起组成新的关系。

两张表,表1 和表2
在这里插入图片描述

在这里插入图片描述

带有关键字UNION的合并操作

关键字UNION会把查询结果集直接合并在一起,同时将会去掉重复数据记录

select name,sex from employee UNION select name,sex from employee_1 

在这里插入图片描述
查询出来7条数据,经过了去重

带有关键字UNION ALL的合并操作

关键字UNION ALL会把查询结果集直接合并在一起。

select name,sex from employee UNION ALL select name,sex from employee_1 

在这里插入图片描述

内连接查询

在MySQL中内连接数据查询通过SQL语句INNER JOIN...ON来实现。

select field1 field2 ...fieldn from join_tablename1 inner join
	join_tablename2 [inner join join_tablenamen] on join_condition
自连接

内连接查询中存在一种特殊的等值连接 - 自连接,所谓自连接就是指表与其自身进行连接。

雇员表

  • empno 雇员ID
  • ename 雇员姓名
  • job 雇员职位
  • mgr 雇员上级领导ID
  • sal 雇员薪资
  • deptno 雇员部门
    在这里插入图片描述
    现在就是需要查询出雇员的上级领导是谁
select e.empno,e.ename,e.job,e.sal,l.ename as mgrname from employee e inner join employee l on e.mgr
 = l.empno

在这里插入图片描述

等值连接

内连接查询中的等值连接,就是在关键字ON后的匹配条件中通过关系运算符(=)来实现等值条件。

一张部门表

  • deptno 部门ID
  • deptname 部门名称

在这里插入图片描述

查询每个雇员的姓名、部门

select  e.ename,e.job,e.sal,d.deptname from employee e inner join dept d on e.deptno
 = d.deptno

在这里插入图片描述
上述连接也可以使用ANSI连接语法形式

select  e.ename,e.job,e.sal,d.deptname from employee e , dept d where e.deptno
 = d.deptno
不等连接

内连接查询中的不等连接,就是在关键字ON后的匹配条件中通过除了等于关系运算符来实现不等条件外,可以使用的关系运算符包括“>”、“>=”、“<”、“<=”和“!=”等运算符号。

外连接查询

在MySQL中,外连接查询会返回所操作表中至少一个表的所有数据记录。

select field1 field2 ...fieldn from jon_tablename1 left | right | full [outer] join join_tablename2 
on join_condition
左外连接

外连接查询中的左外连接,就是指新关系中执行匹配条件时,以关键字left join左边的表未参考表。

上述等值连接中,只有三条数据,但是如果我改成左外连接

select e.empno,e.ename,e.job,e.sal,l.ename as mgrname from employee e left join employee l on e.mgr
 = l.empno

在这里插入图片描述
这边没有匹配上也能全部显示出来。

右外连接

外连接查询中的右外连接,就是值新关系中执行匹配条件时,以关键字right join右边的表未参考表。但是跟左外连接是一个意思,换个位置的事情。

左外连接:

  • 左外连接以左表为基准,返回左表中的所有记录,并将符合联接条件的右表记录合并。
  • 如果左表中的记录在右表中没有匹配的记录,则右表中的列值将被设置为NULL。
    左外连接可以通过使用LEFT JOIN关键字来执行。

右外连接:

  • 右外连接以右表为基准,返回右表中的所有记录,并将符合联接条件的左表记录合并。
  • 如果右表中的记录在左表中没有匹配的记录,则左表中的列值将被设置为NULL。
    右外连接可以通过使用RIGHT JOIN关键字来执行。

总之,左外连接和右外连接的区别在于联接的基准表不同。左外连接返回左表的所有记录,而右外连接返回右表

全外连接

它将两个表中的所有记录都进行匹配,并返回包含两个表中所有记录的结果集。当两个表中的主键不匹配时,返回的结果集中会包含NULL值。

FULL JOIN的语法通常如下:

SELECT * FROM table1 FULL JOIN table2 ON table1.column = table2.column;

这将返回一个包含table1和table2中所有记录的结果集,无论是否存在匹配项。如果没有匹配项,返回的结果集中对应的列值为NULL。FULL JOIN可以用来查找两个表中的所有数据,并比较它们之间的关系。

但是我发现我的MySQL 5.7.14版本竟然不能使用。

那可以考虑这么使用

SELECT * FROM Table1 A LEFT JOIN Table2 B ON A.id=B.id
UNION
SELECT * FROM Table1 A RIGHT JOIN Table2 B ON A.id=B.id
SELECT * FROM employee A LEFT JOIN dept B ON A.deptno=B.deptno
UNION
SELECT * FROM employee A RIGHT JOIN dept B ON A.deptno=B.deptno

在这里插入图片描述

相关推荐

  1. MySQL笔记6查询

    2024-01-16 15:12:04       109 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-16 15:12:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-16 15:12:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-16 15:12:04       82 阅读
  4. Python语言-面向对象

    2024-01-16 15:12:04       91 阅读

热门阅读

  1. 【数据库原理】(29)数据库设计-需求分析阶段

    2024-01-16 15:12:04       57 阅读
  2. Golang 通道输入输出学习(同刚上手的小新手)

    2024-01-16 15:12:04       60 阅读
  3. 33、病隙随笔——浅聊脑机接口BCI

    2024-01-16 15:12:04       51 阅读
  4. 指针及其用法

    2024-01-16 15:12:04       53 阅读
  5. ffmpeg 实用命令 -- 截取视频

    2024-01-16 15:12:04       43 阅读
  6. Pandas实战100例 | 案例 31: 转换为分类数据

    2024-01-16 15:12:04       55 阅读
  7. 【工作周志】240108-240114

    2024-01-16 15:12:04       56 阅读
  8. 【笔记】Helm-3 主题-4 库类型Chart

    2024-01-16 15:12:04       46 阅读
  9. 用python批量合并word文件并统一调整图片大小

    2024-01-16 15:12:04       64 阅读
  10. MATLAB十六进制与十进制互相转换

    2024-01-16 15:12:04       62 阅读
  11. simulink之parameter

    2024-01-16 15:12:04       51 阅读