1. 程式人生 > >MySQL的一些使用細節(二)

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語句返回的所有結果。