一、表的基本连接
采用JOIN关键字建立连接
Select column
From join_table
Join_type join_table
On (join_condition)
注:
·join_table指出参与连接操作的表名。
·join_type 为连接类型,可分为四种:
自然连接join_type的形式为natural join;
内连接join_type的形式为inner join;
外连接又分为左外连接和右外连接。左外连接join_type的形式为left outer join或left join;右外连接join_type的形式为right outer join或right join;
交叉连接中join_type的形式为cross join。
On(join_condition)子句指出连接条件,由被连接表中的列和比较运算符、逻辑运算符等构成。
自连接
例:
Select distinct s1.sname,s1.dname,s1.cno,s1.mark
From student as s1,student as s2
Where s1.sno=s2.sno and s2.mark<60
Order by s1.sname
使用natural join进行查询
例:
Select sname,dname,cno,tname
From student natural join teacher
内连接
例:
Select sname,s.dname,s.cno,tname
From student as s inner join teacher as t on s.cno=t.cno and s.dname<>t.dname
Order by sname
左外连接
例:
Select s.sno,sname,s.cno,cname,ctest,mark
From student as s left out join course as c on s.cno=c.cno
Order by sname
注:在SQL Server中,可以在WHERE子句中使用“*=”符号实现左外连接。
例:
Select s.sno,sname,s.cno,cname,ctest,mark
From student as s,course as c
Where s.cno*=c.cno
Order by sname
注:在Oracle数据库系统中,只需将“*=”替换成“+=”可以得到相同的结果。
右外连接
例:
Select s.sno,sname,s.cno,cname,ctest,mark
From student as s right out join course as c on s.cno=c.cno
Order by sname
在SQL Server中,可以在WHERE子句中使用“=*”符号实现右外连接。
例:
Select s.sno,sname,s.cno,cname,ctest,mark
From student as s,course as c
Where s.cno=*c.cno
Order by sname
全外连接
Select s.sno,sname,s.cno,cname,ctest,mark
From student as s full out join course as c on s.cno=c.cno
Order by sname
交叉连接
Select * from table1,table2
Select * from table1 cross join table2
上面两个表达式完全是等价的,在使用CROSS JOIN关键字交叉连接表时,因为生成的是两个表的笛卡尔积,因而不能使用on关键字,只能在where子句中定义搜索条件。
二、集合查询
union运算符
Union并操作
intersect运算符
Intersect交操作
except运算符
Except差操作
注意:
·参加集合操作的各查询结果的列数必须相同,对应项的数据类型也必须相同。
·集合操作自动去除重复元组,使用集合运算符进行操作时,如果要保留重复元组的话,必须在集合运算符后使用all关键字。
union join连接表
使用union join进行多表连接,它并不对表中的数据进行任何匹配处理,而只是把来自一个源表中的行与另一个源表中的行联合起来,生成的结果表中包括第一个表中的所有行和列和另一个表中的所有行和列。缺少的属性值用NULL表示。SQL Server不支持union join。