数据库表与表连接的方式:内连接、外连接(左连接、右连接、全连接)、交叉连接。
一、内连接
内连接分为三种:
在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。
在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
SELECT *
FROM book,student
WHERE book.StudentId=student.StudentId相当于
SELECT *
FROM book INNER JOIN student
WHERE book.StudentId=student.StudentId以为inner join可以缺省,这是系统默认
查询的所有列为book表的列加上student表的列,即两张表拼接在一起。表的拼接位置取决于FROM book INNER JOIN student语句表达位置,第一个表在左边
二、外连接
返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。
1、左外连接
SELECT *
FROM book LEFT JOIN student
ON book.StudentId=student.StudentId
注意,判断条件是ON而不是WHERE,同样是两表拼接,左表显示全部列,右表未满足条件的列显示null
2、右外连接
SELECT *
FROM book RIGHT JOIN student
ON book.StudentId=student.StudentId
与左外连接类似,只不过这次是右表显示全部列,左表显示null;
3、全连接(MySQL中不支持 FULL OUTER JOIN)
select *
from [Book] as b full outer join
ON b.StudentId=s.StudentId
即以from [Book] full outer join[Student]中先以Book表进行左外连接,然后以Student表进行右外连接。
三、交叉连接
交叉连接不带WHERE子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。
SELECT *
FROM book CROSS JOIN student
ORDER BY book.BookId