13创建高级连结

创建高级连结

1.使用表别名

理由:

1.缩短SQL语句

2.允许在单条SQL语句中使用多次相同的表

1.1创建方法

使用AS关键字

SELECT cust_name, cust_contacts
From Customers as C, Orders as O, OrderItems as OI
Where C.cust_id = O.cust_id
AND OI.order_name = O.order_name
AND prod_id = 'RGAN01';

2.使用不同类型的连结

2.1自连结

对同一张表进行两次嵌套查询时,可以使用子查询,也可以使用给每次查询的表起别名的自连结来防止二义性。

SELECT c1.cust_id, c1.cust_name, c1.cust_contact
From Customers as c1, Customers as c2
Where c1.cust_name = c2.cust_name
AND c2.cust_contact = 'Jim Jones';
2.2自然连结

无论何时对表进行连结,至少有一个列出现在不止一个表中(被连结的列)。

然而检索结果中,相同的列只出现一次,这就是自然连结,由SELECT语句选择时用户自主完成。(即每一列都是唯一的,不允许第二次出现)

2.3外部连结

在两个表的关联列内容并不完全一致时,即其中一个列有另一个没有的内容时,使用外部连结来使其显示而不是忽略。

SELECT Customers.cust_id, Orders.order_num
From Customers LEFT OUTER JOIN Orders
ON Customers.cust_id = Orders.cust_id;

在From子句中使用关键字OUTER JOIN。使用LEFT或RIGHT来注明以哪一张表为基准。(即确定显示哪一张表的所有信息)。

另一种简化语法

在where中使用*==*注明外部连结的左右基准

SELECT Customers.cust_id, Orders.order_num
From Customers Orders
where Customers.cust_id *= Orders.cust_id;

全外部连结

找出两张表中的所有信息,即使在另一张表中不存在。

方法:将关键字中的LEFT或RIGHT改为FULL。

3.使用带聚集的连结

聚集函数可以从单个表汇集数据,也可以和连结一起使用。

SELECT Customers.cust_id, COUNT(Orders.order_num) AS num_order
From Customers INNER JOIN Orders
ON Customers.cust_id = Orders.cust_id
Group by Customers.cust_id;