MySQL筆記4 SELECT語句

2021-08-20 04:42:31 字數 3697 閱讀 4573

為了使用select檢索表資料,必須至少給出兩條資訊——想選擇什麼,以及從什麼地方選擇。

輸入:select prod_name from products;

分析:上述語句利用select 語句從products 表中檢索乙個名為prod_name的列。

所需的列名在select關鍵字之後給出,from關鍵字指出從其中檢索資料的表名。

如果讀者自己試驗這個查詢,可能會發現顯示輸出的資料順序與這裡的不同。出現這種情況很正常。如果沒有明確排序查詢結果(下一章介紹),則返回的資料的順序沒有特殊意義。返回資料的順序可能是資料被新增到表中的順序,也可能不是。只要返回相同數目的行,就是正常的。

如上的一條簡單select語句將返回表中所有行。資料

沒有過濾(過濾將得出結果集的乙個子集),也沒有排序。

多條sql語句必須以分號(;)分隔。

mysql如同多數dbms一樣,不需要在單條sql語句後加分號。但特定的dbms可能必須在單條sql語句後加上分號。當然,如果願意可以總是加上分號。事實上,即使不一定需要,但加上分號肯定沒有壞處。如果你使用的是mysql命令列,必須加上分號來結束sql語句。

請注意,sql語句不區分大小寫,因此select與select是相同的。同樣,寫成select也沒有關係。許多sql開發人員喜歡對所有sql關鍵字使用大寫,而對所有列和表名使用小寫,這樣做使**更易於閱讀和除錯。不過,一定要認識到雖然sql是不區分大小寫的,但有些識別符號(如資料庫名、表名、列名)可能不同:在mysql 4.1及之前的版本中,這些識別符號預設是區分大小寫的;在mysql 4.1.1版本中,這些識別符號預設是不區分大小寫的。最佳方式是按照大小寫的慣例,且使用時保持一致

。在處理sql語句時,其中所有空格都被忽略。sql語句可以在一行上給出,也可以分成許多行。多數sql開發人員認為將sql語句分成多行更容易閱讀和除錯。

要想從乙個表中檢索多個列,使用相同的select語句。唯一的不同是必須在select關鍵字後給出多個列名,列名之間必須以逗號分隔。

在選擇多個列時,一定要

在列名之間加上逗號,但最後乙個列名後不加。如果在最後乙個列名後加了逗號,將出現錯誤。

下面的select語句從products表中選擇3列:

從上述輸出可以看到,sql語句一般返回原始的、

無格式的資料。資料的格式化是乙個表示問題,而不是乙個

檢索問題。因此,表示(對齊和顯示上面的**值,用貨幣

符號和逗號表示其金額)一般在顯示該資料的應用程式中規

定。一般很少使用實際檢索出的原始資料(沒有應用程式提

供的格式)。

select語句還可以檢索所有的列而不必逐個列出它們。這可以通過在實際列名的位置使用星號(*)萬用字元來達到。

select * from products;

products為表名

分析:如果給定乙個萬用字元(*),則返回表中所有列。列的順序一般是列在表定義中出現的順序。但有時候並不是這樣的,表的模式的變化(如新增或刪除列)可能會導致順序的變化。

一般,除非你確實需要表中的每個列,否則最好別使用*萬用字元。雖然使用萬用字元可能會使你自己省事,不

用明確列出所需列,但檢索不需要的列通常會降低檢索和應用程式的效能。

使用萬用字元有乙個大優點。由於不明確指定列名(因為星號檢索每個列),所以能檢索出名字未知的列。

select返回所有匹配的行。但是,如果你不想要每個值每次都出現,怎麼辦?例如,假如你想得出products表中產品的所有供

應商id:

select語句返回14行(即使表中只有4個**商),因為products表中列出了14個產品。

那麼,如何檢索出有不同值的列表呢?

解決辦法是使用distinct關鍵字,顧名思義,此關鍵字指示mysql只返回不同的值。select distinct vend_id告訴mysql只返回不同(唯一)的vend_id行,因此只返回4行,如下面的輸出所示。

如果使用distinct關鍵字,它必須直接放在列名的前面

。輸入:

distinct關鍵字應用於所有列而不僅是前置它的列。兩個列都相同時,才視為相同行。

select語句返回所有匹配的行,它們可能是指定表中的每個行。

為了返回第一行或前幾行,可使用limit子句

輸入:select

此語句使用select語句檢索單個列。limit 5指示mysql返回不多於5行。

為得出下乙個5行,可指定要檢索的開始行和行數,如下所示:

分析:limit 5, 5指示mysql返回從行5開始的5行。

第乙個數為開始位置,第二個數為要檢索的行數。

只有乙個引數的limit,總是從第一行開始,引數為 將返回的行數。

帶兩個引數的limit可以指定 開始行 和 將返回的行數。

limit 3, 4的含義是是從行3開始的

4行。由於這個原因,mysql 5支援limit的另一種替代語法。

limit 4 offset 3 意為從行3開始取4行,就像limit 3, 4一樣。

完全限定(

同時使用表名和列字)。有一些情形需要完全限定名。

輸入:select products.prod_name from products;  等價於 

列名的完全限定:表名.列名

輸入:select products.prod_name from crashcourse.products;

表名的完全限定:庫名.表名

MySQL筆記 select多表查詢

前面的筆記已經記錄了select單錶查詢與子查詢,此筆記記錄sql99標準的多表連線查詢。一 sql92與sql99的連線查詢 sql99標準連線查詢語法 select col1,col2 from table1,table2 table3,where condition 如 select t1.t...

MySQL筆記 select多表查詢

mysql筆記 select多表查詢,前面的筆記已經記錄了select單錶查詢與子查詢,此筆記記錄sql99標準的多表連線查詢。一 sql92與sql99的連線查詢 sql92標準連線查詢語法 select col1,col2 from table1,table2 table3,where cond...

MySQL學習筆記 select語句效能優化建議

關於sql中select效能優化有以下建議,僅當筆記記錄。1.檢查索引 where join部分欄位都該加上索引 2.限制工作資料集的大小 利用where字句過濾 3.只選擇需要的字段 減少io開銷 4.移除不必要的表 5.移除外部連線查詢 outer joins 更新null值佔位符 6.刪除jo...