表连接

关系型数据库为达到简单和易于管理的目的,被分解为较小的、更易管理的表。正是由于表被分解为较小的表,它们通过共有字段(主键和外键)形成相互关联的表,并且能够通过这些字段连接在一起。
一、连接查询概念
连接查询是把两个或多个表连接在一起来获取数据,是关系型数据库中最主要的查询。表的连接方式主要包括内连接、外连接和交叉连接等。通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点。
同时涉及多个表的查询称为连接查询;用来连接两个表的条件称为连接条件。
二、内连接(INNER JOIN)
1、内连接的概念
内连接是把两个表连接在一起,传回两个数据表相匹配的记录,即两者的交集。
2、内连接的两种写法:
使用 join
SELECT 列名 FROM A INNER JOIN B ON A.N=B.M;
不使用 join

SELECT 列名 FROM A, B WHERE A.N=B.M;

  3、自连接(SELF JOIN)
自连接是内连接的一种形式,在自连接中,连接的对象是数据表本身,常用于层次数据查询。
语法:使用 join
SELECT 列名 FROM T A INNER JOIN T B ON A.N=B.M;
不使用 join
SELECT 列名 FROM T A, T B WHERE A.N=B.M;
说明:自连接利用表别名在 SQL 语句中对表进行重命名,像处理两个表一样把表连接到自身。
 4、多表连接
例5:多表查询——三表连接:
SELECT S.SName AS 姓名, CS.CName AS 课程, C.Grade AS 成绩
FROM Students AS S
INNER JOIN Sc AS C ON (S.SCode = C.StudentID)
INNER JOIN Course AS CS ON (CS.CourseID = C.CourseID)

三、外连接(OUTER JOIN)
1、外连接概念:
与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行,没有配对的数据字段则填入NULL值。
外连接与普通连接的区别:
* 普通连接操作只输出满足连接条件的记录;
* 外连接操作以指定表为连接主体,将主体表中不满足连接条件的记录一并输出。
2、外连接有三种方法:
(1)左外连接
语法:SELECT 列名 FROM A LEFT OUTER JOIN B ON A.N=B.M;
说明:返回 LEFT OUTER JOIN 左侧表里选定字段的全部记录,及右侧表里相匹配记录,不符的部分返回NULL值。
2)右外连接
语法: SELECT 列名 FROM A RIGHT OUTER JOIN B ON A.N=B.M;
说明:返回 RIGHT OUTER JOIN 右侧表里选定字段的全部记录,及左侧表里相匹配记录,不符的部分返回NULL值。
3)全外连接
FULL JOIN 左右侧均为保留数据表。在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。
语法:SELECT 列名 FROM A FULL JOIN B ON A.N=B.M;
说明:返回 FULL JOIN 左表和右表里选定字段的全部记录,如果没有匹配,这些行同样会列出,不符的部分返回NULL值。
注意:MySQL 5.1以前不支持 FULL JOIN,只有左外连接和右外连接。
四、交叉连接(笛卡尔积)
笛卡尔积是交叉连接的结果。如果从两个或多个没有结合(执行 JOIN 操作)的表里获取数据,输出结果就是所有被选表里的全部记录。
语法: SELECT 列名 FROM A, B;
对于交叉连接,也就是笛卡尔积,要特别小心,它是多个表没有进行任何结合的结果,经常会产生大量不必要的数据。因此,在从多个表里获取数据时,一定要根据相关联的字段(通常是主键)把表进行结合。从多个表里获取数据时,强烈建议使用 where 子句。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值