1、子查询
SELECT * FROM data_order WHERE id IN (SELECT order_id FROM data_order_detail WHERE goods_id IN (SELECT id FROM data_goods WHERE third_category_id = 51)😉;
- 列必须匹配
- 子查询和性能
出于性能考虑,一般不多级嵌套 - IN
虽然子查询一般与IN操作符结合使用,但也可以用于=,<等等
2、作为计算字段使用子查询
SELECT cust_name,cust_state,(SELECT COUNT(*) FROM orders WHERE orders.cust_id = customers.cust_id) AS orders FROM customers ORDER BY cust_name;
- 相关子查询
涉及外部查询的子查询,只要列名可能有多义性,就必须写明表名。
3、联结表
- 外键
外键( foreignkey )外键为某个表中的一列,它包含另一个表
的主键值,定义了两个表之间的关系。
(1)创建联结
SELECT cust_name,cust_state FROM orders,customers WHERE orders.cust_id = customers.cust_id ORDER BY cust_name;
(2)内部联结
SELECT cust_name,cust_state FROM orders INNER JOIN customers ON orders.cust_id = customers.cust_id;
4、联结多个表
SELECT prod_name,vend_name,prod_price,quantityFROM orderitems,products,vendors WHERE products.vend_id = vendors.vend_idAND orderitems.prod_id = products.prod_idAND order_num = 20005;
- 外部联结:OUTER JOIN
- 左外部联结:LEFT JOIN
- 右外部联结:RIGHT JOIN
5、组合查询
并查询:union
复合查询:compoundquery
5.1 UNION规则
- UNION中的每个查询必须包含相同的列、表达式或聚集函数(不过各个列不需要以相同的次序列出)
- UNION查询会包含或取消重复的行。如果想返回所有匹配行,可使用UNION ALL。
- 排序只能在最后一条select语句之后,且只能有一个order by