知识点一
交叉链接(笛卡尔积)
交叉连接(Cross Join),又称“笛卡尔连接(Cartesin Join)"或“叉乘(Product)" .它是所有类型的内连接的基础。
SQL语句如下:
select*from line CROSS JOIN vehicle 等价于: select *from lien vehicle
知识点2
内链接查询概要
内连接是应用程序中非常常见的连接操作,它-般都是默认的连接类型。内连接基于连接谓词,它将两张表(如A和B)的列组合在一起, 产生新的结果表。内连接查询会将A表的每- -行和B表的每- 行进行比较,并找出满足连接谓词的组合。当连接谓词被满足,A和B中匹配的行会按列组合(并排组合)成结果集中的一行。
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分3种:交叉连接、相等连接和自然连接。
SQL语句如下:
SELECT fieldlist FROM table1 [INNER] JOIN table2 ON table1 .column1= table2.column2
[where condition]
示例
使用内链接获取车辆型号含有‘DD’字样的车辆信息和司机信息
SQL语句如下:
select * from vehicle join driver on vehicle.driverID=driver.driverID where moderl like '%DD%'
知识点3
自然链接
自然连接(Natural Join)是一种特殊的内连接,它要求相连接的两张表的连接依据列必须是相同的字段(字段名相同,字段属性相同)。在自然连接中两张表的所有名称相同的列都将被比较,并且在结果集中把重复的列去掉,结果集中两张表中名称相同的列仅出现一次。而普通的内连接并不去掉重复的列。(部分数据库不支持自然连接,如SQL Server等。)自然连接的语法如下:
SELECT fieldlist FROM table1 NATURAL JOIN table2
[where condition]
示例
使用自然链接获取客户“王传华”所有下单日期信息,要求显示客户姓名和下单日期。
select cName 姓名, ordersDate 下单日期 from customer natural join orders where cName='王传华'
知识点4
多表链接查询
如果查询的信息来自多张表,则可以通过两两相连的方式建立多表链接查询。
语法:
SELECT fieldlist
FROM table1 JOIN table2
ON table1 .column1 =table2.column2_1 JOIN table3 on table2.column2_2= table3.column3
[where condition]
获取所有非空调车的车牌号、型号和司机姓名、所属线路的线路号、起点站和终点站信息
select name '司机姓名',plateNo '车牌号',model 型号,lineNo '线路号',from_station 起点站,end_ station 终点站 from vehicle v join driver d on V.driverID=d.driverID
join line l on v.linelD=l.lineID
where type=' 非空调车;
简单多表链接查询
两表:
SELECT feldlist FROM table1, table2
WHERE table1.column1 =table2.column2 [and 其他条件]
三表:
SELECT feldlist
FROM table1,table2,table3
where table1.column1=table2.column2_1 and table2.column2 2=able3.column3 [and 其他条件]
示例:
(1)获取订单ID为4的订购明细信息,要求输出商品名、单价和件数。
(2)获取客户“王传华”所下订单详细信息,要求显示客户姓名、订单ID、下单日期、商品名、单价和件数。
select goodsName '商品名',unitPrice '单价',quantity '件数'
from orders o, ordersdetail 0d,goods g
where o.ordersID=od.ordersID and od.goodsID=g.goodsID and o.ordersID=4
select o.ordersID '订单ID', ordersDate '下单日期',goodsName '商品名',unitPrice '单价',quantity '件数'
from customer c join orders o on c.customerID=o.customerID join ordersdetail od
on o.ordersID=od.ordersID join goodsID=g.goodsID
where cName='王传华'