第十三课 创建高级联结
来源:互联网 发布:lol免费刷皮肤软件 编辑:程序博客网 时间:2024/05/21 09:15
第十三课、 创建高级联结
预习与回顾:
第十二课学习了联结,讲述了一些关系数据库设计的基本知识,包括等值联结(也称为内联结)这种最常用的联结;第十三课将学习另外一些联结(包括它们的含义和使用方法),介绍如何使用表别名,如何对被联结的表使用聚集函数。
13.1、使用表别名
给列起别名:
输入▼
SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')'
AS vend_title
FROM Vendors
ORDERBY vend_name;
输入▼
SELECT cust_name, cust_contact
FROM Customers AS C,Orders AS O, OrderItems AS OI
WHEREC.cust_id = O.cust_id
AND OI.order_num = O.order_num
ANDprod_id = 'RGAN01';
13.2、使用不同类型的联结
:自联结(self-join)、自然联结(natural join)和外联结(outer join)。
13.2.1、自联结(self-join)
输入▼
SELECT cust_id, cust_name, cust_contact
FROM Customers
WHEREcust_name = (SELECT cust_name
FROM Customers
WHERE cust_contact = 'Jim Jones');
子查询:内部的SELECT语句做了一个简单检索,返回Jim Jones工作公司的cust_name。该名字用于外部查询的WHERE子句中,以检索出为该公司工作的所有雇员。
输入▼
SELECT c1.cust_id, c1.cust_name, c1.cust_contact
FROM Customers AS c1,Customers AS c2
WHEREc1.cust_name = c2.cust_name
AND c2.cust_contact = 'Jim Jones';
13.2.2、自然联结
自然联结要求你只能选择那些唯一的列,一般通过对一个表使用通配符(SELECT *),而对其他表的列使用明确的子集来完成。
输入▼
SELECT C.*, O.order_num, O.order_date,
OI.prod_id,OI.quantity, OI.item_price
FROM Customers AS C, Orders AS O, OrderItems AS OI
WHERE C.cust_id = O.cust_id
AND OI.order_num = O.order_num
AND prod_id ='RGAN01';
13.2.3外联结
许多联结将一个表中的行与另一个表中的行相关联,但有时候需要包含没有关联行的那些行。
输入▼
SELECT Customers.cust_id, Orders.order_num
FROM Customers INNER JOINOrders
ONCustomers.cust_id = Orders.cust_id;
输入▼
SELECT Customers.cust_id, Orders.order_num
FROM Customers LEFT OUTERJOIN Orders
ONCustomers.cust_id = Orders.cust_id;
!!关键字OUTER JOIN来指定联结类型(而不是在WHERE子句中指定)。但是,与内联结关联两个表中的行不同的是,外联结还包括没有关联行的行。在使用OUTERJOIN语法时,必须使用RIGHT或LEFT关键字指定包括其所有行的表(RIGHT指出的是OUTER JOIN右边的表,而LEFT指出OUTER JOIN左边的表)。上面的例子使用LEFTOUTER JOIN从FROM子句左边的表(Customers表)中选择所有行。为了从右边的表中选择所有行,需要使用RIGHTOUTER JOIN!!
全外联结(full outer join),它检索两个表中的所有行并关联那些可以关联的行。与左外联结或右外联结包含一个表的不关联的行不同,全外联结包含两个表的不关联的行。
输入▼
SELECT Customers.cust_id, Orders.order_num
FROM Orders FULL OUTER JOINCustomers
ONOrders.cust_id = Customers.cust_id;
13.3、使用聚集函数的联结
要检索所有顾客及每个顾客所下的订单数:
输入▼
SELECT Customers.cust_id,
COUNT(Orders.order_num)AS num_ord
FROMCustomers INNER JOIN Orders
ON Customers.cust_id = Orders.cust_id
GROUP BY Customers.cust_id;
SELECT语句使用INNER JOIN将Customers和Orders表互相关联。GROUP BY子句按顾客分组数据,因此,函数调用COUNT(Orders.order_num)对每个顾客的订单计数,将它作为num_ord返回。
输入▼
SELECT Customers.cust_id,
COUNT(Orders.order_num)AS num_ord
FROMCustomers LEFT OUTER JOIN Orders
ON Customers.cust_id = Orders.cust_id
GROUP BY Customers.cust_id;
左外部联结来包含所有顾客,甚至包含那些没有任何订单的顾客
- 第十三课 创建高级联结
- SQL必知必会 笔记 第十三章 创建高级联结
- MySQL创建高级联结
- 16 创建高级联结
- [MYSQL -16]创建高级联结
- SQL必知必会(三) 联结表、创建高级联结、组合查询
- MySQL联结表与创建高级联结表.md
- 第9天-mysql创建高级联结
- 读书笔记--SQL必知必会13--创建高级联结
- MySQL数据库——创建高级联结
- MYSQL学习笔记(十二)创建高级联结
- 16 高级联结
- [MYSQL -15]创建联结
- MySQL创建联结
- SQL之高级联结查询
- 《MySQL必知必会学习笔记》:高级联结
- MySQL必知必会-13MySQL高级联结
- 第十二课 联结表
- Vue $emit $refs子父组件间方法的调用
- HDU 6116 路径计数(组合数学+NTT)
- Android学习笔记16---星级评分条的实现
- 开启博客之旅
- 1098: 树状数组2(破坏公路)
- 第十三课 创建高级联结
- Linux环境下配置出现下列问题
- 读《大话处理器 》
- OpenCV学习之旅——滑动条的创建和使用
- Codeforces 723D Lakes in Berland
- man的汉化及使用
- 日记(周中)
- linux package
- 第一单元