【MySQL】多表查询

1.多表查询分类讲解

1.1等值连接vs非等值连接

等值连接:

SELECT student.name, class.name AS className

FROM student, class

WHERE student.class_id = class.class_id;

非等值连接:

SELECT a.name, a.salary, b.grade

FROM teacher a, grades b

WHERE a.salary BETWEEN b.lowest_sal AND b. highest_sal;

1.2自连接 vs 非自连接

  • 当table1和table2本质上是同一张表,只是用取别名的方式虚拟成两张表以代表不同的意义。然后两个表再进行内连接,外连接等查询。
  • 通过concat函数返回固定格式

SELECT CONCAT(worker.name ,' works for '

, manager.name)

FROM teacher worker, teacher manager

WHERE worker.manager_id = manager.id ;

1.3:内连接 vs 外连接

  • 内连接: 合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行
  • 外连接: 两个表在连接过程中除了返回满足连接条件的行以外**还返回左(或右)表中不满足条件的行 ,这种连接称为左(或右) 外连接。**没有匹配的行时, 结果表中相应的列为空(NULL)。
  • 如果是左外连接,则连接条件中左边的表也称为主表,右边的表称为从表。
  • 如果是右外连接,则连接条件中右边的表也称为主表,左边的表称为从表。

#左外连接

SELECT last_name,department_name

FROM employees ,departments

WHERE employees.department_id = departments.department_id(+);

#右外连接

SELECT last_name,department_name

FROM employees ,departments

WHERE employees.department_id(+) = departments.department_id;

  1. SQL99语法实现多表查询

3.1 基本语法

  • 使用JOIN...ON子句创建连接的语法结构:

SELECT table1.column, table2.column,table3.column

FROM table1

JOIN table2 ON table1 和 table2 的连接条件

JOIN table3 ON table2 和 table3 的连接条件

3.2内连接(INNER JOIN)的实现

SELECT 字段列表

FROM A表 INNER JOIN B表

ON 关联条件

WHERE 等其他子句;

3.3 外连接

3.3.1左外连接(LEFT OUTER JOIN)

SELECT 字段列表

FROM A表 LEFT JOIN B表

ON 关联条件

WHERE 等其他子句;

3.3.2右外连接(RIGHT OUTER JOIN)

SELECT 字段列表

FROM A表 RIGHT JOIN B表

ON 关联条件

WHERE 等其他子句;

3.3.3 满外连接(FULL OUTER JOIN)

  • 满外连接的结果 = 左右表匹配的数据 + 左表没有匹配到的数据 + 右表没有匹配到的数据。
  • SQL99是支持满外连接的。使用FULL JOIN 或 FULL OUTER JOIN来实现。
  • 需要注意的是,MySQL不支持FULL JOIN,但是可以用 LEFT JOIN UNION RIGHT join代替。

4.UNION的使用

  • 合并查询结果利用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。合并时,两个表对应的列数和数据类型必须相同,并且相互对应。各个SELECT语句之间使用UNION或UNIONALL关键字分隔。

语法格式:

SELECT column,... FROM table1

UNION [ALL]

SELECT column,... FROM table2

5.自然连接

SELECT a.name, b.name AS className

FROM student a join class b

on a.class_id = b.class_id;

相关推荐
UpYoung!6 小时前
【数据库工具】DBeaver——轻量化多功能数据库连接工具DBeaver Ultimate 24.0.0版详细下载安装指南
数据库·mysql·sqlserver·数据库开发·数据库管理·dbeaver·数据库工具
码界筑梦坊6 小时前
94-基于Python的商品物流数据可视化分析系统
开发语言·python·mysql·信息可视化·数据分析·毕业设计·fastapi
爱莉希雅&&&8 小时前
Ansible+Docker案例(含ansible配置安装docker)
linux·运维·mysql·nginx·docker·容器·ansible
SarL EMEN8 小时前
Linux(CentOS)安装 MySQL
linux·mysql·centos
银河系的一束光9 小时前
net start mysql 服务名无效。 请键入 NET HELPMSG 2185 以获得更多的帮助
数据库·mysql
untE EADO9 小时前
MySQL错误-this is incompatible with sql_mode=only_full_group_by完美解决方案
android·sql·mysql
西北奇妙的八角9 小时前
mysql大表结构变更导致主从延迟问题复盘
mysql
y = xⁿ9 小时前
MySQL学习日记:关于MVCC及一些八股总结
数据库·学习·mysql
BING_Algorithm9 小时前
JDBC核心教程
java·后端·mysql
ting945200010 小时前
MySQL 安全加固十大硬核操作
mysql