联结表
1.创建联结
SELECT vend_name,prod_name,prod_price
FROM vendors, products
WHERE vendors.vend_id = products.vend_id
上面的语句与之前最大的区别在于,指定的列位于两张表内,使用where进行联结。
返回表vendors与表products中vend_id相等的vend_name,prod_name,prod_price
基于两个表之间的相等测试,这种联结称为等值联结,或内部联结。对于这种联结,还可以使用下面这种语法:
-
INNER JOIN
ON
SELECT vend_name,prod_name,prod_price
FROM vendors INNER JOIN products
ON vendors.vend_id = products.vend_id
2.联结多个表
SELECT vend_name,prod_name,prod_price, quantity
FROM vendors, products, order
WHERE vendors.vend_id = products.vend_id
AND order.prod_id = products.vend_id
AND order_num = 20005;
FROM后跟多个表,WHERE子句条件用AND连接。
3.联结的其他类型
- 自联结:在select语句中不止一次引用相同的表
- 自然联结:至少有一个列出现在不止一个表中
- 外部联结:联结包含了在相关表中没有关联行的行
组合查询
执行多个查询(多条SELECT语句),并将结果作为但个查询结果集返回。
1.创建组合查询
-
UNION
例如,我想查询价格小于10 或供应商名字为a的id号,即下面的两段语句怎么同时实现
SELECT order_id, order_price, order_name
FROM order1
WHERE order_price < 10;
SELECT order_id, order_price, order_name
FROM order1
WHERE order_name = 'a';
使用union组合:
SELECT order_id, order_price, order_name
FROM order1
WHERE order_price < 10
UNION
SELECT order_id, order_price, order_name
FROM order1
WHERE order_name = 'a';
2.UNION规则
- 必须由两条或两条以上的select语句组成,每两条之间用一个UNION分隔
- UNION中的每个查询必须包含相同的列,表达式或聚集函数
- 列数据类型必须兼容,类型不必完全相同,但必须是可以隐含转换的类型
- 使用UNION满足了条件后,可能会有条件满足重复的,就会有重复,使用UNION ALL可以自动除去重复的行
3.对组合查询结果排序
在使用UNION组合查询时,只能使用一条ORDER BY子句,必须出现在最后一条SELECT语句之后。