子查询
- 利用子查询进行过滤
SELECT col1, col2 FROM table1
WHERE col3 IN (SELECT col FROM table2);
- 作为计算字段使用
SELECT col1, col2,
(SELECT col1 FROM table2 WHERE table1.col = table2.col) AS col3
FROM table1;
子查询中的WHERE语句必须限定列名,否则就是与自身比较。
WHERE table1.col = table2.col
组合查询
两种情况下使用:
- 在一个查询中从不同的表返回结构数据
- 对一个表执行多个查询,按一个查询返回数据
SELECT cust_name FROM Customers
WHERE cust_state IN('IL','IN')
UNION
SELECT cust_name FROM Customers
WHERE cust_name = 'Fun4All';
- UNION中的每个查询必须包含相同的列、表达式或聚集函数。列数据类型不必完全相同,但必须兼容。
- 列必须匹配:确保子查询中SELECT语句具有与WHERE子句中相同数目的列
联结表
- 创建联结
SELECT vend_name, prod_name, prod_price
FROM Vendors, Products
WHERE Vendors.vend_id = Products.vend_id;
WHERE子句作为过滤条件(联结条件),没有WHERE子句,第一个表的每一行将与第二个表的每一行配对,而不管它们逻辑是否正确(笛卡尔积)
- 自然联结
SELECT C.*, O.order_num, OI.prod_id
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';
Customers AS C #使用表别名
- 高级联结
网友评论