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
    在这里插入图片描述

5、组合查询

并查询:union
复合查询:compoundquery

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值