问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

详解SQL多表查询:连接类型与子查询实战

创作时间:
作者:
@小白创作中心

详解SQL多表查询:连接类型与子查询实战

引用
CSDN
1.
https://blog.csdn.net/Lyhdreamer/article/details/136338455

在SQL中,多表查询是指在一个查询语句中同时处理两个或多个表的数据。分为连接查询和子查询。

一、连接查询

通过连接运算符可以实现多个表查询。分为内连接、外连接、交叉连接。

连接运算是由一个笛卡尔积运算和一个选取运算构成的。首先用笛卡尔积完成对两个数据集合的乘运算,然后对生成的结果集合进行选取运算。

示例表如下:

  • student表
  • score表

1. 内连接

把两个表中数据对应的数据查询出来,内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值,即查询两张表的交集。内连接分以下三种:

(1)等值连接

在连接条件中使用等于号“=”运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

SELECT * FROM student INNER JOIN score ON student.id = score.id;

(2)自然连接

在连接条件中使用等于“=”运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。

自然连接仅适用于那些具有相同名称和数据类型的列。如果两个表中的列名称或数据类型不匹配,自然连接将无法执行。

-- NATURAL JOIN无ON语句
SELECT * FROM student NATURAL JOIN score;

(3)不等值连接

在连接条件使用除等于运算符以外的其它比较运算符比较被连接列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。

2. 外连接

以某个表为基础把对应数据查询出来,返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个表(全外连接)中的所有行。

(1)左外连接

SELECT * FROM student LEFT OUTER JOIN score ON student.id = score.id;

(2)右外连接

SELECT * FROM student RIGHT OUTER JOIN score ON student.id = score.id;

(3)全外连接

SELECT * FROM student FULL OUTER JOIN score ON student.id = score.id;

3. 交叉连接

交叉连接不带ON语句,返回被连接的两个表所有行的笛卡尔积。

-- CROSS JOIN无ON语句
SELECT * FROM student CROSS JOIN score;

二、子查询

SQL语句中嵌套SELECT语句,称为嵌套语句,又称子查询,根据子查询结果不同分为以下四种:

子查询外部的语句可以是INSERT/UPDATE/DELETE/SELECT的任何一个。

分类
描述
常用操作符
标量子查询
子查询结果为单个值
=、<>、>、>=、<、<=
列子查询
子查询的结果为一列
IN、NOT IN、ANY、SOME、ALL
行子查询
子查询的结果为一行
=、<>、IN、NOT IN
表子查询
子查询的结果为多行多列
IN
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号