MySQL的一些使用细节(二)

本文深入讲解了SQL中的高级查询技术,包括where与having的区别、子查询的处理方式、引用完整性的维护、union与union all的使用场景以及union与orderby的结合运用。通过具体示例,帮助读者理解并掌握复杂SQL查询的编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、where和having

    where过滤行,而having过滤分组。

select vend_id,count(*) as num_prods from products where prod_price >= 10 
group by vend_id having count(*) >=2;

二、子查询是从内向外处理

    在实际中,由于性能限制,不能嵌套太多的子查询。

三、维持引用完整性

    比如:有两个表,一个是供应商表(vendors),一个是产品表(products)。

   如果在products表中插入拥有非法供应商ID(即没有在vendors表中出现)的供应商产生的产品,则这些产品是不可访问的,因为它们没有关联到某个供应商。

   为了防止这样情况发生,可指示MySQL值允许products表的供应商ID列中出现合法值(即出现在venders表中的供应商),这就是维护引用完整性

   维护引用完整性,是通过在表的定义中指定主键和外键来实现的。

四、union和union all

    union从查询结果集中自动去除重复的行(换句话说,它的行为与单条select语句中使用多个where子句条件一样)。

    union all返回所有匹配的行。如果确实需要每个条件的匹配行全部出现(包括重复行),则必须使用union all而不是where。

五、union 和 order by

    union在最后一条select语句后使用order by子句,看起来似乎只是最后一条select语句的组成部分,但实际上MySQL将用它来排序所有select语句返回的所有结果。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值