SQL语句(十三)多表查询

多表查询

1. 笛卡尔乘积

  • 简单格式

    SELECT * 或字段列表

    FROM 数据表列表

  • 实例

--1. 笛卡尔乘积 (五条件的连接--很多条件无意义)
Select *
from Student, SC

2. 等值连接

-- 查询选课的学生全部信息
SELECT *
From Student, SC
where Student.Sno = SC.Sno

3. 不等值连接

select numb, cnumb, score, grade
from score, grade
where score.score between grade.gstart and grade.gend

4. 使用INNER JOIN (内连接, 匹配项)

Select * 或字段列表

From 表1

INNER JOIN 表2 ON 连接规则1

INNER JOIN 表3 ON 连接规则2

...

[WHERE 条件]

[ORGER BY]

--7. 使用INNER JOIN
-- (1)
select *
from score
INNER JOIN stu1 on score.numb = stu1.numb

-- (2)
select *
from score, stu1, course
where score.numb = stu1.numb
and   score.cnumb = course.cnumb
and   stu1.name = '王宁'
order by course.cname, score.score

-- 用 INNER 改写(2)
select *
from score
INNER JOIN stu1 on score.numb = stu1.numb
INNER JOIN course ON score.cnumb = course.cnumb
where stu1.name = '王宁'   --将where里面条件放到了INNER里面  
ORDER BY course.cname, score.score

5. 外连接OUTER JOIN (能够查到不匹配项)

  • 按连接条件得到结果

  • 内连接

左外连接 LEFT OUTER JOIN

  • 查找左边表的不匹配项

    SELECT * | 字段列表

    FROM 表1

    LEFT OUTER JOIN 表2 ON 条件

    左表与表2没有对应项的话,左边表的记录显示出来

右外连接RIGHT OUTER JOIN

  • 查找右边表的不匹配项

    SELECT * | 字段列表

    FROM 表1

    RIGHT OUTER JOIN 表2 ON 条件

    左表与表2没有对应项的话,表2 的记录显示出来

--8. 外连接OUTER JOIN
-- 查询所有同学的学生信息 和 选课信息(选课的列出课程编号和成绩,
-- 没有选课的这两项为NULL)
select *
from stu1
--左外连接,左边表里的,也就是stu1这个表里头的不匹配项也显示出来
LEFT OUTER JOIN score on stu1.numb = score.numb

--或者是
select *
from score
--右外连接,右边表里的,也就是这个score表里头的不匹配项也显示出来
LEFT OUTER JOIN score on stu1.numb = score.numb

多表连接查询

  • 笛卡尔乘积

  • 等值连接

  • 不等值连接

  • 内连接、外连接

    SELECT *

    FROM 表1

    [INNER JOIN 表2 ON 条件 ] |

    [LEFT | RIGHT OUTER JOIN 表2 ON 条件 ]

    [WHERE 条件]

    [GROUP BY 字段列表]

    [HAVING 条件]

    [ORDER BY 条件]

原文地址:https://www.cnblogs.com/douzujun/p/6626510.html