2007年11月9日 星期五

sql小教學

我們將語法中最常用的部份取出,可以簡化成為以下這種形式:
SELECT column_list  要檢索哪些欄位
FROM table_list  要以哪些資料表為目標
WHERE primary_constraint  必須滿足哪些條件
GROUP BY grouping_columns  如何產生 group
ORDER BY sorting_columns  如何對結果排序
HAVING secondary_constraint  其次要滿足哪些條件
LIMIT count  限制資料輸出的筆數

 以實例來看:
例一,讀取所有資料,但不設定條件:
SELECT * FROM friend
例二,讀取部份欄位的資料,且指定條件:
SELECT realname, address FROM friend WHERE age > 20

SELECT 進階
ORDER BY
 如果我們希望查詢所得的資料能依序排列的話,可以使用 ORDER BY 來達成目的。
例一,升冪排序(這是預設的排列方式,因此 ASC 可以省略不寫):
SELECT first_name, address FROM friend ORDER BY city ASC
例二,降冪排序:
SELECT first_name, address FROM friend ORDER BY city DESC
例三,同時對兩個欄位排序(前者優先):
SELECT first_name, address FROM friend ORDER BY city DESC, age

GROUP BY
 我們可以使用 GROUP BY 來指定某個特定欄位,以便將查詢結區分為若干個群組,然後對這些群組進行計算。
例一,從通訊錄中列出所有親友居住的縣市名稱,並求出各地居住的人數:
SELECT city, COUNT(*) FROM friend GROUP BY city
例二,依親友所居住的縣市來區分,並求出各地親友的平均年齡:
SELECT city, AVG(age) FROM friend GROUP BY city
例三,依親友所居住的縣市來區分,並求出各地親友家中成員的總數:
SELECT city, SUM(member) FROM friend GROUP BY city

HAVING
 HAVING 的功能類似於 WHERE,可以用來規範資料被讀取的條件,但它必須與 GROUP BY 搭配,不能用來取代 WHERE。而且 HAVING 是在資料被取出之後,才再次進行篩選的動作。
例如,以學生的分組為單位,列出測驗平均成績高於 60 分的各組與其成績:
SELECT group_num, AVG(score) FROM exam
GROUP BY group_num HAVING AVG(score) > 60

DISTINCT
 假如我們在意的是「某個欄位裡是否有某些特定的值」,而不在乎它出現多少次的話,我們可以使用 DISTINCT 來剔除欄位中重複的值。
例如,從通訊錄中列出所有親友居住的縣市名稱:
SELECT DISTINCT city FROM friend

LIMIT
 如果在某項查詢結果中,我們想要的僅是其中一部份時,可以使用 LIMIT 來限制資料被讀取的筆數。
例如,找出座號最前面的五位學生姓名:
SELECT realname FROM student ORDER BY num LIMIT 0, 5
 在此例中,LIMIT 後方的 0 代表「從第 0 筆資料開始」,5 表示「取出 5 筆資料」。

沒有留言: