连接(JOIN)
定义:将一个记录与另外一个或多个记录相匹配,从而生成一个新记录,这个记录是由两个记录合并列所产生的一个超集
语法:SELECT 结果列表 FROM 表1 join_type On 条件
连接(JOIN)
定义:表间连接
语法:JOIN
本质:排他
内连接(INNER JOIN)
定义:仅仅返回那些存在字段匹配的记录,可以说是一对一的关系
语法:INNER JOIN
本质:排他
案例:SELECT * FROM Orders INNER JOIN Persons ON Orders.Id_P = Persons.Id_P;(后面跟条件)
SELECT LastName+''+FirstName as 姓名 FROM Orders INNER JOIN Persons ON Orders.Id_P = Persons.Id_P;
SELECT cast(LastName+''+FirstName as varchar(20)) as 姓名 FROM Orders INNER JOIN Persons ON Orders.Id_P = Persons.Id_P;
注意:1.在返回值中尽量返回该返回的列,不能用* ,*会降低系统性能;当语句中使用别名后必须要同一,不能表名.和别名.一起使用
2.在查询结果中,显示格式在select 和 from 之间进行修改 例如: LastName+''+FirstName as 姓名 合成名字
3.CAST关键字将一个类型转换为另一个类型 cast(LastName+''+FirstName as varchar(20)) as 姓名
外连接(OUTER JOIN)
定义:一侧数据匹配另一侧,可以说是一对多
本质:包含
语法 OUTER JOIN
1.左连接(LEFT连接)
定义:右表匹配左表
语法 LEFT JOIN
2.右连接(RIGHT连接)
定义:左表匹配右表
语法 RIGHT JOIN
混合连接
例子:
SELECT v.VendorName,a.Address FROM Vendors v LEFT JOIN VendorAddress va on v.VendorID= va.VendorID LEFT JOIN Address a ON a.AddressID = va.AddressID;完全连接
定义:将两侧数据完全匹配,并返回所有的记录,不论记录在JOIN的那一侧的表中
本质:包含
语法:FULL JOIN
交叉连接(笛卡尔积)
定义:返回两侧记录的笛卡尔积(返回两个表的乘积)
本质:包含
语法:CROSS
例子:SELECT * FROM Vendors v CROSS JOIN Address a;
联合(UNION)
定义:UNION是一个特殊的运算符,用于使两个或两个以上的查询产生的一个结集。不是真正的连接是将一个结果及添加到另一个结果集的末尾。
语法:(UNIOM)
条件:1.所有联合的查询必须在SELECT 列表中有相同的列数。
2.返回的结果集的标题仅在第一个查询获得。
3.查询中的对应列的数据类型必须隐试一致。(就是隐试转换类型之间)
4.UNION与其他不同,UNION返回的选项为DISTINCT,而不是ALL。
例子:SELECT v.VendorID FROM Vendors v UNION ALL SELECT a.AddressID FROM Address a;
总结
总结