JOIN(内连接:INNER JOIN,INNER可省略):将多个表水平连接,如果一个表比另一个表多一行数据,那么多出的那行数据不会显示;
SELECT *FROM Student s --给别名
JOIN City c --给别名
ON s.FromCityId=c.Id --连接条件
外连接:
左外连接(LEFT):左边所有行保留,右边没有对应的值时,以Null填充;
右外连接(RIGHT):右边所有行保留,左边没有对应的值时,以Null填充;
全连接(FULL):左右两边都保留,没有值的地方以NULL填充;
SELECT*FROM Student s
LEFT JOIN City c --可更改为右外连接和全外连接
ON s.FromCityId=c.Id --连接条件
联表的删/改:FROM...JOIN..ON
DELETE Student SET Score+=5 --保留划线的代码,就是来自北京的同学,成绩加5分
FROM Student s JOIN Address a ON s.FromCityId=a.Id
WHERE s.FromProvince=N'北京'
UNION:将多个查询结果纵向连接,只要查询结果的数量,顺序相同,且每列的数据类型兼容;
SELECT [Name],N'科目',Score FROM Student --添加一个列(N'科目'),以对齐Exam
UNION --没有添加ALL,会清除重复行
SELECT [UserName],Subject,Score FROM Exam
ORDER BY [Name] --列名以第一个查询子句为准
ORDER BY UserName --非第一个查询子句会报错