MySQL——关联查询&组合查询

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
    MySQL——关联查询&组合查询_第1张图片

5、组合查询

并查询:union
复合查询:compoundquery

5.1 UNION规则
  • UNION中的每个查询必须包含相同的列、表达式或聚集函数(不过各个列不需要以相同的次序列出)
  • UNION查询会包含或取消重复的行。如果想返回所有匹配行,可使用UNION ALL。
  • 排序只能在最后一条select语句之后,且只能有一个order by

你可能感兴趣的:(数据库,mysql,数据库,sql)