MySQL高级查询——连接查询实例详解(内外自然连接)
2017-08-16 16:13
656 查看
前言
我们使用SQL查询不能只使用很简单、最基础的SELECT语句查询。如果想从多个表查询比较复杂的信息,就会使用高级查询实现。常见的高级查询包括多表连接查询、内连接查询、外连接查询与组合查询等,今天我们先来学习最常用、面试也很容易被问到的连接查询。
我们今天以一个简单的学生信息表(学生ID、学生姓名、学生性别)与一个学生成绩表(学生ID、学生成绩、成绩等级)作演示:
student_info表:
student_score表:
说明一下:( 解释名词 )
1. 内连接(自然连接):只有两个表相互匹配的行才能在结果集中出现;
2. 外连接:包括
(1) 左外连接(左边的表不加限制);
[b](2) 右外连接(右边的表不加限制);[/b]
[b][b]
(3) 全外连接(左外右外两表都不加限制).
[/b][/b]
一、内连接(INNER JOIN)
1、等值连接
概述:指使用等号"="比较两个表的连接列的值,相当于两表执行笛卡尔后,取两表连结列值相等的记录。
语法:
[sql] view
plain copy
SELECT 列
FROM 表1 INNER JOIN 表2
ON 表1.列 = 表2.列
示例:
[sql] view
plain copy
SELECT A.*, B.*
FROM student_info A inner join student_score B
ON A.student_id = B.student_id
结果:
2、非等值连接
概述:指使用大于号">"或小于号"<"比较两个表的连接列的值,相当于两表执行笛卡尔后,取一个表大于或小于另一个表的连结列值的记录。
语法:
[sql] view
plain copy
SELECT 列
FROM 表1 INNER JOIN 表2
ON 表1.列 <> 表2.列
示例:
[sql] view
plain copy
SELECT A.*, B.*
FROM student_info A inner join student_score B
ON A.student_id > B.student_id
结果:
二、外连接
1、左外连接(LEFT OUTER JOIN)
概述:指将左表的所有记录与右表符合条件的记录,返回的结果除内连接的结果,还有左表不符合条件的记录,并在右表相应列中填NULL。
示例:
[sql] view
plain copy
SELECT A.*, B.*
FROM student_info A left join student_score B
ON A.student_id = B.student_id
说明1:左外连接是以左边的表 student_info
A 为主表,student_score 为从表。在查询结果中全部展示主表的信息。
结果:
2、右外连接(RIGHT OUTER JOIN)
概述:与左外连接相反,指将右表的所有记录与左表符合条件的记录,返回的结果除内连接的结果,还有右表不符合条件的记录,并在左表相应列中填NULL。
示例:
[sql] view
plain copy
SELECT A.*, B.*
FROM student_info A right join student_score B
ON A.student_id = B.student_id
说明2:右外连接是以右边的表 student_score
B为主表,[b]student_info A为从表。在查询结果中全部展示主表的信息。[/b]
结果:
3、全外连接(FULL JOIN)——MySQL不支持
概述:指将左表所有记录与右表所有记录进行连接,返回的结果除内连接的结果,还有左表与右表不符合条件的记录,并在左表与右表相应列中填NULL。
[sql] view
plain copy
SELECT A.*, B.*
FROM student_info Afull join student_score B
ON A.student_id = B.student_id
(此语句针对一般数据库)
三、自然连接(NATURAL JOIN)
概述:指自动将表中相同名称的列进行记录匹配。
示例:
[sql] view
plain copy
SELECT A.*, B.*
FROM student_info A natural join student_score B
结果:
四、自连接
概述:指用表的别名实现表自身的连接。
示例:
[sql] view
plain copy
SELECT B.*
FROM student_score A, student_score B
WHERE A.student_id = B.student_id
AND B.student_score > 80
结果:
我们使用SQL查询不能只使用很简单、最基础的SELECT语句查询。如果想从多个表查询比较复杂的信息,就会使用高级查询实现。常见的高级查询包括多表连接查询、内连接查询、外连接查询与组合查询等,今天我们先来学习最常用、面试也很容易被问到的连接查询。
我们今天以一个简单的学生信息表(学生ID、学生姓名、学生性别)与一个学生成绩表(学生ID、学生成绩、成绩等级)作演示:
student_info表:
student_score表:
说明一下:( 解释名词 )
1. 内连接(自然连接):只有两个表相互匹配的行才能在结果集中出现;
2. 外连接:包括
(1) 左外连接(左边的表不加限制);
[b](2) 右外连接(右边的表不加限制);[/b]
[b][b]
(3) 全外连接(左外右外两表都不加限制).
[/b][/b]
一、内连接(INNER JOIN)
1、等值连接
概述:指使用等号"="比较两个表的连接列的值,相当于两表执行笛卡尔后,取两表连结列值相等的记录。
语法:
[sql] view
plain copy
SELECT 列
FROM 表1 INNER JOIN 表2
ON 表1.列 = 表2.列
示例:
[sql] view
plain copy
SELECT A.*, B.*
FROM student_info A inner join student_score B
ON A.student_id = B.student_id
结果:
2、非等值连接
概述:指使用大于号">"或小于号"<"比较两个表的连接列的值,相当于两表执行笛卡尔后,取一个表大于或小于另一个表的连结列值的记录。
语法:
[sql] view
plain copy
SELECT 列
FROM 表1 INNER JOIN 表2
ON 表1.列 <> 表2.列
示例:
[sql] view
plain copy
SELECT A.*, B.*
FROM student_info A inner join student_score B
ON A.student_id > B.student_id
结果:
二、外连接
1、左外连接(LEFT OUTER JOIN)
概述:指将左表的所有记录与右表符合条件的记录,返回的结果除内连接的结果,还有左表不符合条件的记录,并在右表相应列中填NULL。
示例:
[sql] view
plain copy
SELECT A.*, B.*
FROM student_info A left join student_score B
ON A.student_id = B.student_id
说明1:左外连接是以左边的表 student_info
A 为主表,student_score 为从表。在查询结果中全部展示主表的信息。
结果:
2、右外连接(RIGHT OUTER JOIN)
概述:与左外连接相反,指将右表的所有记录与左表符合条件的记录,返回的结果除内连接的结果,还有右表不符合条件的记录,并在左表相应列中填NULL。
示例:
[sql] view
plain copy
SELECT A.*, B.*
FROM student_info A right join student_score B
ON A.student_id = B.student_id
说明2:右外连接是以右边的表 student_score
B为主表,[b]student_info A为从表。在查询结果中全部展示主表的信息。[/b]
结果:
3、全外连接(FULL JOIN)——MySQL不支持
概述:指将左表所有记录与右表所有记录进行连接,返回的结果除内连接的结果,还有左表与右表不符合条件的记录,并在左表与右表相应列中填NULL。
[sql] view
plain copy
SELECT A.*, B.*
FROM student_info Afull join student_score B
ON A.student_id = B.student_id
(此语句针对一般数据库)
三、自然连接(NATURAL JOIN)
概述:指自动将表中相同名称的列进行记录匹配。
示例:
[sql] view
plain copy
SELECT A.*, B.*
FROM student_info A natural join student_score B
结果:
四、自连接
概述:指用表的别名实现表自身的连接。
示例:
[sql] view
plain copy
SELECT B.*
FROM student_score A, student_score B
WHERE A.student_id = B.student_id
AND B.student_score > 80
结果:
相关文章推荐
- MySQL高级查询——连接查询实例详解
- MySQL高级查询——连接查询实例详解
- MySQL高级查询——连接查询实例详解
- MySQL高级查询——连接(join)查询实例详解
- MySQL高级查询——连接查询实例详解
- mysql,SQL标准,多表查询中内连接,外连接,自然连接等详解之查询结果集的笛卡尔积的演化
- MySQL高级查询---连接查询实例
- MySQL连接查询实例详解
- mysql中的内连接,外连接实例详解
- Linux 下C语言连接mysql实例详解
- MySql连接查询实例
- MySQL使用集合函数进行查询操作实例详解
- mysql 查询 表连接详解
- MySQL数据高级查询之连接查询、联合查询、子查询
- MySQL数据高级查询之连接查询、联合查询、子查询
- group_concat函数使用实例,mysql查询结果自动以,连接成字符串
- mysql中的内连接,外连接,全连接,交叉连接实例详解
- mysql中的内连接,外连接实例详解
- 详解MySQL中的分组查询与连接查询语句
- MySQL基础(三)多表查询(各种join连接详解)