一、引言
有时为了得到一张报表的完整数据,需要从两个或更多的表中获取结果,这时就用到了“连接查询”。
二、连接查询
连接查询的定义:
数据库中的表通过键将彼此联系起来,从而获取这些表中的数据
连接查询的语法:
ROM join_table join_type join_table[ON (join_condition)]
其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。join_type 指出连接类型。join_condition指连接条件。使用比较运算符(包括=、>、<、<>、>=、<=、!>和!<)进行表间的比较操作
三、连接类型
连接类型的分类:内连接、外连接、交叉连接
下面做数据准备:
create table Student ( id int not null, Studentname varchar(10), ClassId nvarchar(10) ) go insert into Student values (1,'michael',11), (2,'cumming',12), (3,'andy',13), (4,'pgone',15) go create table Class ( id int not null, name varchar(10) ) go insert into Class values (11,'一班'), (12,'二班'), (13,'三班'), (14,'四班') go
内连接:返回左右表中相互匹配的
select * from Student a inner join Class b on a.ClassId=b.id “等于” select * from Student a,Class b where a.ClassId=b.id
外连接:左连接(LEFT JOIN)或左外连接(LEFT OUTER JOIN)、右连接(RIGHT JOIN)或右外连接(RIGHT OUTER JOIN)、全连接(FULL JOIN)或全外连接(FULL OUTER JOIN)。我们就简单的叫:左连接、右连接和全连接。
左连接:返回左表中的行,如果左表中的行在右表中没有匹配行,则结果集中右表的行返回空值
select * from Student a left join Class b on a.ClassId=b.id
右连接:与左连接相对,返回右表中的行,如果右表中的行在左表中没有匹配行,则结果集中左表的行返回空值
select * from Student a right join Class b on a.ClassId=b.id
全连接:返回左右两表中的所有行,当某行在另一表中没有匹配行时,则另一表返回空值
select * from Student a full join Class b on a.ClassId=b.id
交叉连接:返回被连接两个表的笛卡尔积,返回的行数等于两个表行数的乘积(例如:student和class,返回4*4=16条记录)
select * from Student a cross join Class b
(注:cross join后加条件只能用where,不能用on)