2021-06-01

内连接查询

查调信息的来源如果来自多张表,则必须对这些表进行连接查询。连接是把不同表的记录连到一起的最普遍的方法,通过连接查询可将多个表作为一个表进行处理。连接查询分为内连接和外连接。

交叉连接(Cross Join),又称“笛卡尔连接(Cartesian Join)”或“叉乘(Product)”, 它是所有类型的内连接的基础。

如果把表视为行记录的集合,那么交叉连接即返回这两个集合的笛卡尔积,返回到结果集合中的数据行数等于第一张表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。这其实等价于内连接的连接条件为“永真”,或连接条件不存在。如果A和B是两个集合,它们的交叉连接就记为: A x B。

而实现线路表与车辆表的语句:
select * from line CROSS JOIN vehicle等价于: select *from line,vehicle

而内连接又分3种:

  1. 交叉连接
  2. 相等连接
  3. 自然连接

SELECT fieldlist FROM table1 [INNER] JOIN table2 ON table1.column1=table2.comumn
[where condition]

说明:(1) fieldlist: table1 表和table2表中的字段列。如果fieldlist取两张表所有列,则可用“*” 代替 ,此时会出I现连接依据列重复,即table1表的column1与table2表的column2为重复列。
(2) table1 [INNER] JOIN table2: 将table1表与table2表进行内连接,INNER可省略。
(3) table1.column1 =table2. column2:连接条件,其中column1和column2为table1表与table2表的并联列,通常它们为外键列和主键列。
(4) "inner” 可省略。
(5)“ where condition"可省略,它为查询条件表达式。
例子
东辆表vehicle 与线路表line存在一个连接依据列一ineD。
select * from line join vehicle on line linelD=vehicle linelD
如果需要加判断条件,则在后面加where子句。

自然连接:
自然连接(Natural Join) 是一种特 殊的内连接,它要求相连接的两张表的连接依据列必须是相同的字段(字段名相同,字段属性相同)。在自然连接中两张表的所有名称相同的列都将被比较,并且在结果集中把重复的列去掉,结果集中两张表中名称相同的列仅出现一次。而普通的内连接并不去掉重复的列。
自然连接的语法如下:
SELECT fieldlist FROM table1 NATURAL JOIN table2 [ where condition]

例:使用自然连接获取客户“王传华”所有下单日期信息

select cName姓名,ordersDate 下单日期 from customer natural join orders where cName='王传华

多表查询:
语法:SELECT fieldlist FROM table1 JOIN table2 ON table1.column1=table2.column2_ 1 JOIN table3 on table2. column2_2=tablc3.column3 [where condition]

例:获取所有非空调车的车牌号、型号司机姓名、所属线路的线路号、起点站和终点站
select name 司机姓名, plate No 车牌号, model 型号, lineNo 线路号,from_station 起点站end_station 终点站 from vehicle V join Driver D o n V.driver lD=D.driver ID join line L on V.line lD=L.line ID where type=‘非空调车’;

使用两表连接查询
SELECT fieldlist FROM table l,table 2 WHERE table 1.column l=table 2.column 2【and其他条件】
三表:
SELECT fieldlist FROM table 1,rable 2,table 3 where table 1.column 1=table 2.column 2_l and table 2 _2calicolumn2=table 3.column3【and其他条件】

  • 外连接查询

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

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

  1. 左外连接:
    左外连接的结果集包括左表的所有记录和右表中满足连接条件的记录,结果集中那些不符合连接条件的来源于右表的列值为null。
  2. 右外连接为左外连接的返向。直接把左和右的字换一下就行。

综合使用连接查询、聚合函数和分组查询可以实现很多复杂的查询需求。
如计每件商品的销售数量和销售金额,要求按照销售量和销售金额升序显示商品名、销售量和销售金额,单下单日期,订单金额。
selec g.goods Name商品名, sum(od.quantity) 销售量, sum(od.quantity*g.unit Price) 销售 from goods g left join orders detail o dong.goods lD=od.goods lD group by g.goods lDorder by销售量,销售金额;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值