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 版本中,這些標識符默認是不區分大小寫的。 最佳方式是按照大小寫的慣例,且使用時保持一致spa
使用空格 在處理SQL語句時,其中全部空格都被忽略。SQL 語句能夠在一行上給出,也能夠分紅許多行。多數SQL開發人 員認爲將SQL語句分紅多行更容易閱讀和調試命令行
要想從一個表中檢索多個列,使用相同的 SELECT 語句。惟一的不一樣 是必須在 SELECT 關鍵字後給出多個列名,列名之間必須以逗號分隔3d
小心逗號 在選擇多個列時,必定要在列名之間加上逗號,但 最後一個列名後不加。若是在最後一個列名後加了逗號,將出 現錯誤調試
數據表示 從上述輸出能夠看到,SQL語句通常返回原始的、 無格式的數據。數據的格式化是一個表示問題,而不是一個 檢索問題。所以,表示(對齊和顯示上面的價格值,用貨幣 符號和逗號表示其金額)通常在顯示該數據的應用程序中規 定。通常不多使用實際檢索出的原始數據(沒有應用程序提 供的格式)。blog
除了指定所需的列外(如上所述,一個或多個列), 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 語句來檢索單個表列、多個表列 以及全部表列。