1、使用表别名
SELECT cust_name,cust_contact
FROM customer AS c,order AS o,orderItems AS OI
WHERE c.cust_id = o.cust_id
AND OI.order_num = o.order_num
AND prod_id='RGAN01';
注意:
1、缩短SQL语句。
2、允许在一条SELEC语句中多次使用相同的表。
3、ORACLE不支持AS关键字。要在Oracle中使用别名,可以不用AS,简单的指定列名即可。
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';
注意:
1、使用表别名可以在一条SELECT语句中不止一次引用相同的表。
2、许多DBMS处理联结远比处理子查询快得多。
2.2、自然联结
SELECT C.* ,order_num,o.order_data,OI.prod_id,OI.quantity,OI.item_price
FROM customers AS c,order AS o,orderitems AS OI
WHERE c.cust_id = o.cust_id
AND OI.order_num = o.order_num
AND prod_id 'RGAN01';
#自然联结要求你只能选择哪些唯一的列,一般通过对一个表使用通配符,而对其他表的列使用明确的子集来完成。
2.3、外联结
SELECT customers.cust_id,orders.order_num
FROM customers LEFT OUTER JOIN orders
ON customers.cust_id = orders.cust_id;
#联结包含了那些在相关表中没有关联行的行,这种联结称为外联结
注意:
1、在使用OUTER JOIN语句时,必须使用RIGHT或LEFT关键字包括其所有行的表(RIGHT指出的是OUTER JOIN右边的表,而LEFT指出的是OUTER JOIN左边的表)。
2、左外联结和右外联结可以相互转换。
SELECT customers.cust_id,orders.order_num
FROM orders FULL OUTER JOIN customers
ON orders .cust_id = customers.cust_id;
#全外联结包含两个表的不关联的行
注意:
1、Access,MariaDB,MySQL,Open Office Base 和SQLite不支持FULL OUTER JOIN语法。
3、使用聚集函数的联结
SELECT customers.cust_id.count(orders.order_num) AS num_ord
FROM customers INNER JOIN orders
ON customers.cust_id = orders.cust_id
GROUP BY customers.cust_id;
#检索所有顾客及每个顾客所下的订单数
4、使用联结和联结条件
1、一般我们使用内联结,但使用外联结也有效。
2、关于确切的联结语法,应该查看具体的文档,看相应的DBMS支持何种语法。
3、保证使用正确的联结条件。
4、应该总提供联结条件,否则会得出笛卡儿积。