链接查询的学习

02
六月
2021

连接查询的学习

连接查询分为内连接查询和外连接查询
一、内连接查询
1.交叉查询(笛卡尔积)
交叉查询(Cross Join),又称“笛卡尔连接(Cartesian Join)”或“叉乘(Product)”它是所有类型的内连接的基础
2.内连接查询概要
内连接是应用程序中非常常见的连接操作,它一般都是默认的连接操作。内连接基于连接谓词,它将两张表(如A和B)的列组合在一起,产生新的结果表。具体过程是将A表的每一行和B表的每一行进行比较,并找出满足连接谓词的组合,当连接谓词被满足,A和B中匹配的行会按列组合(并排组合)成结果集中的一行。内连接分3种:交叉连接、相等连接和自然连接。

内连接语法语句如下

select fieldlist FROM table1 【INNERJOIN table2 ON
 table1.column1=table2.column2 【WHERE condition】

3.自然连接
自然连接(Natural Join)是一种特殊的内连接,它要求相连接的两张表的连接依据列心须是相同的字段(字段名相同,学段属性相同)。在自然连接中两张表的所有名称相同的列都将被比较,并且在结果集中把重复的列去掉,结果集中两张表中名称相同的列仅出现一次。而普通的内连接并不去掉重复的列。(部分数据库不支持自然连接,如 SOL Server 等。)

自然连接语法语句如下`

SELECT fieldlist FROM table1 NATURAL JOIN table2【WHERE condition】

二、多表连接查询
1.多表连接查询的方法
如果查询的信息来源于多张表,则可通过两两相连的方式建立多表查询。
2.多表连接查询应用
在日常数据查询应用实践中,需要获取的数据来源于3张表及以上, 此时需要通过多表连接进行查询。
3. 简单多表连接查询
如果在 FROM 子句中,直接列出所有要连接的表,然后在 WHERE 子句中指定连接条件,此为简单多表查询, 它与内连接功能相同。

使用两表连接查询语法格式如下:

SELECT fieldlist FROM  tablel,table2
 WHERE tablet.columnt=table2.column2 【and 其他条件】

使用三表连接查询语法格式如下:

SELECT  fieldlist FROM table1.table2,table3
 where tablel.column1=table2.column2_1 and 
  table2.column2_2=table3.column3  【and 其他条件】

三、外连接查询
1.外连接查询的概念
在内连接查询中,只有满足连接条件的记录才能出现在查询结果中。但在实际应用中,如果希望不满足连接条件的记录也在查询结果中出现,这时需要使用外连接查询。根据不同的外连接形式,外连接所生成的结果集中不仅包含符合条件的数据记录,还包含左表或右表或左右表中的数据记录。

外连接的语法语句如下:

SELECT 字段名称 FROM 表名1 LEFT|RIGHT|FULL[OUTER] 表名2
ON 表名1.字段名1=表名2.字段名2

2.左外连接(LEFT JOIN)
左外连接的结果集包括左表的所有记录和右表中满足连接条件的记录,结果集中那些不符合连接条件的来源于右表的列值为null。
3.右外连接 (RIGHT JOIN )
右外连接是左外连接的反向连接。右外连接的结果集包括右表的所有记录和左表中满足连接条件的记录,结果集中那些不符合连接条件的来源于左表的列值为null。

四、连接查询的综合应用
1.连接查询的分组统计
综合使用连接查询、聚合·函数和分组查询可以实现很多复杂的查询需求。

总结:
1.内连接
内连接是应用程序中非常常见的连接操作,它一般都是默认的连接操作。内连接基于连接谓词,它将两张表(如A和B)的列组合在一起,产生新的结果表。具体过程是将A表的每一行和B表的每一行进行比较,并找出满足连接谓词的组合,当连接谓词被满足,A和B中匹配的行会按列组合(并排组合)成结果集中的一行。
内连接分3种:交叉连接、相等连接和自然连接。

2.外连接
外连接不但返回符合连接和查询条件的数据行,还返回不符合条件的一些行。
外连接分三类:左外连接(left outer join)、
右外连接(right outer join)和
全外连接(full outer join)。
课后作业:

– 1. 获取所有非空调车的车牌号、型号和司机姓名、所属线路的线路号、起点站和终点站信息;
实现语句如下:

SELECT
	v.plateNO 车牌号,
	v.model 型号,
	d. NAME 司机姓名,
	l.lineNo 线路号,
	l.from_station 起点站,
	l.end_station 终点站
FROM
	line l,
	vehicle v,
	driver d
WHERE
	v.type = '非空调车'
AND l.lineID = v.lineID
AND d.driverID = v.driverID;

– 2. 获取公交二公司所有司机信息。要求输出司机姓名、身份证、性别和电话;
实现语句如下:

SELECT
	NAME 司机姓名,
	licenseNO 身份证,
	d.gender 性别,
	phone 电话
FROM
	vehicle v,
	driver d,
	line l
WHERE
	v.driverID = d.driverID
AND v.lineID = l.lineID
AND company = '公交二公司'
GROUP BY 
司机姓名;

– 3. 查询所有非空调车的车牌号、型号、线路号、起点站和终点站;
实现语句如下:

SELECT
	v.plateNO 车牌号,
	v.model 型号,
	l.lineNo 线路号,
	l.from_station 起点站,
	l.end_station 终点站
FROM
	line l,
	vehicle v
WHERE
	v.type = '非空调车'
AND l.lineID = v.lineID;

– 4. 显示所有线路及其所配车辆基本信息,并查询车辆所配司机相关信息,要求输出司机姓名、性别、电话、车牌号、型号、线路号、起点站和终点站;
实现语句如下:

SELECT
	d.NAME 司机姓名,
	licenseNO 身份证,
	d.gender 性别,
	phone 电话,
	v.plateNO 车牌号,
	v.model 型号,
	l.lineNo 线路号,
	l.from_station 起点站,
	l.end_station 终点站
FROM
	vehicle v,
	driver d,
	line l
WHERE
	v.driverID = d.driverID
AND v.lineID = l.lineID
GROUP BY 司机姓名;

– 5. 获取订单 ID 为 4 的订购明细信息,要求输出商品名、单价和件数。
实现语句如下:

SELECT
	g.goodsName 商品名,
	g.unitPrice 单价,
	o.quantity 件数
FROM
	ordersdetail o
JOIN goods g where o.ordersID = 4
GROUP BY 商品名;

– 6. 获取客户“王传华”所下订单详细信息,要求显示客户姓名、订单 ID、下单日期、商品名、单价和件数。
实现语句如下:

SELECT
	c.cName 客户姓名,
	o.ordersDate 下单日期,
	g.goodsName 商品名,
	g.unitPrice 单价,
	od.quantity 件数
FROM
	ordersdetail od,
	goods g,
	orders o,
	customer c
WHERE
	c.cName = '王传华'
AND c.customerID = o.customerID
AND o.ordersID = od.ordersID
AND od.goodsID = g.goodsID;

– 7. 使用左接获取所有客户的基本信息以及订购信息,要求输出客户姓名、电话、订单 ID 和下单时间。
实现语句如下:

SELECT
	c.cName 客户姓名,
	c.phone 电话,
	o.ordersID 订单ID,
	o.ordersDate 下单时间
FROM
	 customer c
LEFT JOIN orders o on c.customerID=o.customerID;

– 8. 使用右接获取所有客户的基本信息以及订购信息,要求输出客户姓名、电话、订单 ID 和下单时间。
实现语句如下:

SELECT
	c.cName 客户姓名,
	c.phone 电话,
	o.ordersID 订单ID,
	o.ordersDate 下单时间
FROM
	orders o
right JOIN customer c on c.customerID=o.customerID;
TAG

网友评论

共有访客发表了评论
请登录后再发布评论,和谐社会,请文明发言,谢谢合作! 立即登录 注册会员