MySQL的一些使用細節(二)
阿新 • • 發佈:2018-12-17
一、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語句返回的所有結果。