SQL语句进阶学习二(子查询、联接表、高级联接、左连接与右连接)

子查询:查询的结果当做另一查询的条件。

1)查询:任何SQL语句都是查询。一般指select语句。
2)子查询:嵌套其他查询中的查询。
3)实例:

在这里插入图片描述
该查询包含两个子查询。一个是select cust_id from orders where order_num in,另一个是select order_num from orderitems where prod_id = ‘TNT2’;
SQL语句解释:列出订购物品TNT2的所有客户
(1) 检索包含物品TNT2的所有订单的编号。
(2) 检索具有前一步骤列出的订单编号的所有客户的ID。
(3) 检索前一步骤返回的所有客户ID的客户信息。

4)计算字段使用子查询

在这里插入图片描述
子查询中,使用了orders.cust_id = customers.cust_id完全限定列名(即表名.列名,select操作多个表时,应使用完全限定列名来避免歧义)。

联接表

1.外键:外键为另一个表中的列,它包含该表的主键值。
2.可伸缩性:可以适应不断增加的工作量而不失败。
3.联接:联接是一种机制。用select语句关联表格。
4.实例:

在这里插入图片描述
分析:查询的字段从vendors和products两个表中获得,where语句接vendors.vend_id = products.vend_id。这种完全限定列名。因为两个表中都有vend_id,如果不限定表名就不知道指代那个vend_id。

5.where语句的重要性

select关联几个表,where语句则将第一个表格的每一行与第二个表格的每一行进行匹配。应保证所有的联接都有where语句,where表示连个表的联接条件。

6.笛卡儿积:由没有联接条件的表关系返回的结果为笛卡儿积。检索出来的结果行数就是第一个表格的行数与第二个表格的行数乘积。

在这里插入图片描述

7.等值联接:两个表之间的相等测试。又称为内部联接。

在这里插入图片描述
分析:1.from 表格A inner join 表格B on 联接条件。联接条件由on语句给出而不是where语句。
2.优先选择inner join的语法而不是where语法。

8.联接多个表格

在这里插入图片描述
注意事项:尽量不要关联不必要的表格。联结的表格越多,性能下降越快。

9.子查询和联接查询的相互转化。

在这里插入图片描述

创建高级联接

1.使用表别名

在这里插入图片描述
对customers orders orderitems 分别取别名为c o oi。

2.自联接

在这里插入图片描述
分析:找出生产ID为DTNTR生产商生产的其他的商品信息。where语句对两个表进行关联。

上述也可以以子查询进行操作。

在这里插入图片描述
注意事项:自联接的性能比子查询的性能要快很多。

3.自然联接
1)自然联接:自然联接排除多次出现的列,使每个列只返回一次。
2)实例

在这里插入图片描述

4.外部联接
1)概念:联接中包含了那些相关表无关联行的行。如:列出所有产品和订购数量,包括那些没有人订购的产品。
2)实例

在这里插入图片描述
分析:外部联接使用语法outer join,使用outer join语法时必须加上关键字left 或者right。执行时选择左边表格所有的行或者右边表格所有的行。

5.使用带聚集函数的联接

在这里插入图片描述

6.使用联接和联接条件

在这里插入图片描述

7.使用左连接
select l.str as left_str,r.str as right_str from l left join r on l.val = r.val

左表l数据列全部显示
oracle中的做左连接也可以写为

select l.str as left_str,r.str as right_str from l , r where  l.val(+= r.val
8.使用右连接
select l.str as left_str,r.str as right_str from l rightjoin r on l.val = r.val

右表r数据列全部显示

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值