MySQL的一些使用细节(二)

一、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语句返回的所有结果。

猜你喜欢

转载自blog.csdn.net/hefrankeleyn/article/details/84980542