二、连接查询 JOIN…IN
- 内连接查询:
- 内连接查询是最典型、最常用的连接查询,根据表中共同的列来进行匹配,特别是两个表存在主外键时通常会使用内连接查询。
-
外连接查询:
外连接查询是至少返回一个表中的所有记录,根据匹配条件有选择性的返回另一张表的记录,外连接可以是左外连接、右外连接。
- 内连接查询INNER JOIN…ON
-
内连接通常会使用 = 或者< >等比较运算符判断两列数据值是否相等。 内连接使用INNER JOIN…ON
关键字或where子句进行表之间的关联
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL2kTO1AzNyUTMyAzMwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
针对以上两个表格score分数表、student02学生表操作。
- 2 在where子句中指定连接条件
--查询学生姓名和成绩
SELECT Score.CourseID AS 课程, student02.SName AS 学生姓名, Score.Score AS 成绩
FROM student02,Score
where student02.SCode = Score.StudentID
--1.2用join...on子句
SELECT Score.CourseID AS 课程, student02.SName AS 学生姓名, Score.Score AS 成绩
FROM student02
INNER JOIN Score
ON student02.SCode = Score.StudentID
如:
- 内连接查询中的说明:
- 1)INNER JOIN 用来连接两个表
- 2)INNER 可以省略
- 3)ON来设置条件
- 4)AS 指定表的别名。
1.3 限定条件
--查询科目编号为1的及格学生的姓名和分数
SELECT Score.CourseID AS 课程, student02.SName AS 学生姓名, Score.Score AS 成绩
FROM student02 INNER JOIN
Score ON student02.SCode = Score.StudentID
WHERE (Score.CourseID = 1) AND (Score.Score >= 60)
如:
1. 4 连接三个表
- 准备课程表course
SQL Server ——连接查询
--查询学生姓名、分数,并且通过课程编号显示课程表中对应课程的名称。
--第一种形式:直接用where子句
SELECT student02.SName AS 学生姓名, Course.CName AS 课程名称, Score.Score AS 成绩
FROM student02,Score,course
where student02.SCode = Score.StudentID and Score.CourseID = Course.Id
--第二种inner join..ON
SELECT student02.SName AS 学生姓名, Course.CName AS 课程名称, Score.Score AS 成绩
FROM student02
INNER JOIN Score
ON student02.SCode = Score.StudentID
INNER JOIN Course
ON Score.CourseID = Course.Id
如:
-
外连接查询
内连接:从两个或两个以上表的组合中挑选出符合连接条件的数据。内连接查询中,参与连接的表的地位是平等的。
与内连接查询相对的方式称为外连接查询。在外连接查询中参与连接的表有主从之分,以主表的每行数据匹配从表的数据列。对不符合连接条件的列,将被****填上NULL空值后再返回到结果集中。
- 左外连接LEFT JOIN…ON或Left OUTER JOIN…ON
- 显示所有参加考试学生的考试分数,没有参加考试的学生也显示出来。 学生成绩表中增加科目的考试记录:
SQL Server ——连接查询
SELECT student02.SName, Score.CourseID, Score.Score
FROM student02
INNER JOIN Score
ON student02.SCode = Score.StudentID
如:
- 右外连接RIGHT JOIN…ON或Right OUTER JOIN…ON 新建书籍表booktitles和出版商表Bookpublishers
SQL Server ——连接查询 SQL Server ——连接查询
SELECT BookTitles.Title_id AS 书籍编号, BookTitles.Title AS 书名, BookPublishers.Pub_name AS 出版商 FROM BookTitles
RIGHT OUTER JOIN BookPublishers
ON BookTitles.Pub_id = BookPublishers.Pub_id
如:
将包括所有的出版商在表BookTitles中没有书名的出版商也会被列出。