SQL語句是由簡單的英語單詞構成的。這些單詞稱
爲關鍵字,每一個SQL語句都是由一個或多個關鍵字構成的。大概,最常常
使用的SQL語句就是 SELECT 語句了。它的用途是從一個或多個表中檢索
信息。
爲了使用 SELECT 檢索表數據,必須至少給出兩條信息——想選擇什
麼,以及從什麼地方選擇。mysql
咱們將從簡單的SQL SELECT 語句開始介紹
利用 SELECT 語句從 products 表中檢索一個名爲
prod_name 的列。所需的列名在 SELECT 關鍵字以後給出, FROM
關鍵字指出從其中檢索數據的表名sql
未排序數據 若是沒有
明確排序查詢結果(下一章介紹),則返回的數據的順序沒有
特殊意義。返回數據的順序多是數據被添加到表中的順序,
也可能不是。只要返回相同數目的行,就是正常的數據庫
如上的一條簡單 SELECT 語句將返回表中全部行。數據沒有過濾(過
濾將得出結果集的一個子集),也沒有排序。之後幾章將討論這些內容性能
結束SQL語句 多條SQL語句必須以分號(;)分隔。MySQL
如同多數DBMS同樣,不須要在單條SQL語句後加分號。但特
定的DBMS可能必須在單條SQL語句後加上分號。固然,若是
願意能夠老是加上分號。事實上,即便不必定須要,但加上
分號確定沒有壞處。若是你使用的是 mysql命令行,必須加上
分號來結束 SQL 語句學習
SQL語句和大小寫 請注意,SQL語句不區分大小寫,所以
SELECT 與 select 是相同的。一樣,寫成 Select 也沒有關係。
許多SQL開發人員喜歡對全部SQL關鍵字使用大寫,而對全部
列和表名使用小寫,這樣作使代碼更易於閱讀和調試。
不過,必定要認識到雖然SQL是不區分大小寫的,但有些標識
符(如數據庫名、表名、列名)可能不一樣:在MySQL 4.1及之
前的版本中,這些標識符默認是區分大小寫的;在MySQL 4.1.1
版本中,這些標識符默認是不區分大小寫的。
最佳方式是按照大小寫的慣例,且使用時保持一致命令行
使用空格 在處理SQL語句時,其中全部空格都被忽略。SQL
語句能夠在一行上給出,也能夠分紅許多行。多數SQL開發人
員認爲將SQL語句分紅多行更容易閱讀和調試調試
要想從一個表中檢索多個列,使用相同的 SELECT 語句。惟一的不一樣
是必須在 SELECT 關鍵字後給出多個列名,列名之間必須以逗號分隔blog
小心逗號 在選擇多個列時,必定要在列名之間加上逗號,但
最後一個列名後不加。若是在最後一個列名後加了逗號,將出
現錯誤排序
數據表示 從上述輸出能夠看到,SQL語句通常返回原始的、
無格式的數據。數據的格式化是一個表示問題,而不是一個
檢索問題。所以,表示(對齊和顯示上面的價格值,用貨幣
符號和逗號表示其金額)通常在顯示該數據的應用程序中規
定。通常不多使用實際檢索出的原始數據(沒有應用程序提
供的格式)。開發
除了指定所需的列外(如上所述,一個或多個列), SELECT 語句還可
以檢索全部的列而沒必要逐個列出它們。這能夠經過在實際列名的位置使
用星號( * )通配符來達到,以下所示:
若是給定一個通配符( * ),則返回表中全部列。列的順序通常
是列在表定義中出現的順序。但有時候並非這樣的,表的模
式的變化(如添加或刪除列)可能會致使順序的變化
使用通配符 通常,除非你確實須要表中的每一個列,不然最
好別使用 * 通配符。雖然使用通配符可能會使你本身省事,不
用明確列出所需列,但檢索不須要的列一般會下降檢索和應
用程序的性能
檢索未知列 使用通配符有一個大優勢。因爲不明確指定列
名(由於星號檢索每一個列),因此能檢索出名字未知的列。
正如所見, SELECT 返回全部匹配的行。可是,若是你不想要每一個值
每次都出現,怎麼辦?例如,假如你想得出 products 表中產品的全部供
應商ID:
SELECT 語句返回14行(即便表中只有4個供應商),由於 products 表
中列出了14個產品。那麼,如何檢索出有不一樣值的列表呢?
解決辦法是使用 DISTINCT 關鍵字,顧名思義,此關鍵字指示MySQL
只返回不一樣的值
不能部分使用 DISTINCT DISTINCT 關鍵字應用於全部列而
不只是前置它的列。若是給出 SELECT DISTINCT vend_id,
prod_price ,除非指定的兩個列都不一樣,不然全部行都將被
檢索出來
SELECT 語句返回全部匹配的行,它們多是指定表中的每一個行。爲
了返回第一行或前幾行,可以使用 LIMIT 子句。
此語句使用 SELECT 語句檢索單個列。 LIMIT 5 指示MySQL返回
很少於5行
LIMIT 5, 5 指示MySQL返回從行5開始的5行。第一個數爲開始
位置,第二個數爲要檢索的行數。
因此,帶一個值的 LIMIT 老是從第一行開始,給出的數爲返回的行數。
帶兩個值的 LIMIT 能夠指定從行號爲第一個值的位置開始
行 0 檢索出來的第一行爲行0而不是行1。所以, LIMIT 1, 1
將檢索出第二行而不是第一行。
在行數不夠時 LIMIT 中指定要檢索的行數爲檢索的最大行
數。若是沒有足夠的行(例如,給出 LIMIT 10, 5 ,但只有13
行),MySQL將只返回它能返回的那麼多行
MySQL 5的 LIMIT 語法 LIMIT 3, 4 的含義是從行4開始的3
行仍是從行3開始的4行?如前所述,它的意思是從行3開始的4
行,這容易把人搞糊塗。
因爲這個緣由,MySQL 5支持 LIMIT 的另外一種替代語法。 LIMIT
4 OFFSET 3 意爲從行3開始取4行,就像 LIMIT 3, 4 同樣
迄今爲止使用的SQL例子只經過列名引用列。也可能會使用徹底限定
的名字來引用列(同時使用表名和列字)。請看如下例子:
表名也能夠是徹底限定的,以下所示:
這條語句在功能上也等於剛使用的那條語句(固然,假定 products
表確實位於 crashcourse 數據庫中)
有一些情形須要徹底限定名。如今,
須要注意這個語法,以便在遇到時知道它的做用
本章學習瞭如何使用SQL的 SELECT 語句來檢索單個表列、多個表列 以及全部表列。