MySQL必知必會四:檢索數據

4.1 SELECT語句

SELECT:用途是從一個或多個表中檢索信息。爲了使用SELECT檢索表數據,必須至少給出兩條信息——想選擇什麼,以及從什麼地方選擇。

4.2 檢索單個列

mysql> SELECT prod_name FROM products;
+----------------+
| prod_name      |
+----------------+
| .5 ton anvil   |
| 1 ton anvil    |
| 2 ton anvil    |
| Detonator      |
| Bird seed      |
| Carrots        |
| Fuses          |
| JetPack 1000   |
| JetPack 2000   |
| Oil can        |
| Safe           |
| Sling          |
| TNT (1 stick)  |
| TNT (5 sticks) |
+----------------+
  • 分析:上述語句利用SELECT語句從products表中檢索一個名爲prod_name的列。所需的列名在SELECT關鍵字之後給出, FROM關鍵字指出從其中檢索數據的表名。

未排序數據:顯示輸出的數據順序與這裏的不同,出現這種情況很正常。如果沒有明確排序查詢結果,則返回的數據的順序沒有特殊意義。只要返回相同數目的行,就是正常的。
結束SQL語句:多條SQL語句必須以分號(;)分隔。如果你使用的是mysql命令行,必須加上分號來結束SQL語句。
SQL語句和大小寫:請注意, SQL語句不區分大小寫,因此SELECT與select是相同的。許多SQL開發人員喜歡對所有SQL關鍵字使用大寫,而對所有列和表名使用小寫,這樣做使代碼更易於閱讀和調試。
使用空格:在處理SQL語句時,其中所有空格都被忽略。 SQL語句可以在一行上給出,也可以分成許多行。

4.3 檢索多個列

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

當心逗號:在選擇多個列時,一定要在列名之間加上逗號,但
最後一個列名後不加。如果在最後一個列名後加了逗號,將出
現錯誤。

mysql> SELECT prod_id, prod_name, prod_price FROM products;
+---------+----------------+------------+
| prod_id | prod_name      | prod_price |
+---------+----------------+------------+
| ANV01   | .5 ton anvil   |       5.99 |
| ANV02   | 1 ton anvil    |       9.99 |
| ANV03   | 2 ton anvil    |      14.99 |
| DTNTR   | Detonator      |      13.00 |
| FB      | Bird seed      |      10.00 |
| FC      | Carrots        |       2.50 |
| FU1     | Fuses          |       3.42 |
| JP1000  | JetPack 1000   |      35.00 |
| JP2000  | JetPack 2000   |      55.00 |
| OL1     | Oil can        |       8.99 |
| SAFE    | Safe           |      50.00 |
| SLING   | Sling          |       4.49 |
| TNT1    | TNT (1 stick)  |       2.50 |
| TNT2    | TNT (5 sticks) |      10.00 |
+---------+----------------+------------+
  • 分析:這條語句使用SELECT語句從表products中選擇數據。在這個例子中,指定了3個列名,列名之間用逗號分隔。

4.4 檢索所有列

SELECT語句通過在實際列名的位置使用星號(*)通配符來檢索所有的列。

mysql> SELECT * FROM products;
+---------+---------+----------------+------------+----------------------------------------------------------------+
| prod_id | vend_id | prod_name      | prod_price | prod_desc                                                      |
+---------+---------+----------------+------------+----------------------------------------------------------------+
| ANV01   |    1001 | .5 ton anvil   |       5.99 | .5 ton anvil, black, complete with handy hook                  |
| ANV02   |    1001 | 1 ton anvil    |       9.99 | 1 ton anvil, black, complete with handy hook and carrying case |
| ANV03   |    1001 | 2 ton anvil    |      14.99 | 2 ton anvil, black, complete with handy hook and carrying case |
| DTNTR   |    1003 | Detonator      |      13.00 | Detonator (plunger powered), fuses not included                |
| FB      |    1003 | Bird seed      |      10.00 | Large bag (suitable for road runners)                          |
| FC      |    1003 | Carrots        |       2.50 | Carrots (rabbit hunting season only)                           |
| FU1     |    1002 | Fuses          |       3.42 | 1 dozen, extra long                                            |
| JP1000  |    1005 | JetPack 1000   |      35.00 | JetPack 1000, intended for single use                          |
| JP2000  |    1005 | JetPack 2000   |      55.00 | JetPack 2000, multi-use                                        |
| OL1     |    1002 | Oil can        |       8.99 | Oil can, red                                                   |
| SAFE    |    1003 | Safe           |      50.00 | Safe with combination lock                                     |
| SLING   |    1003 | Sling          |       4.49 | Sling, one size fits all                                       |
| TNT1    |    1003 | TNT (1 stick)  |       2.50 | TNT, red, single stick                                         |
| TNT2    |    1003 | TNT (5 sticks) |      10.00 | TNT, red, pack of 10 sticks                                    |
+---------+---------+----------------+------------+----------------------------------------------------------------+
  • 分析:如果給定一個通配符(*),則返回表中所有列。列的順序一般是列在表定義中出現的順序。但有時候並不是這樣的,表的模式的變化(如添加或刪除列)可能會導致順序的變化。

使用通配符:使用通配符可能會使你自己省事,不用明確列出所需列,但檢索不需要的列通常會降低檢索和應用程序的性能。

4.5 檢索不同的行

mysql> SELECT vend_id FROM products;
+---------+
| vend_id |
+---------+
|    1001 |
|    1001 |
|    1001 |
|    1002 |
|    1002 |
|    1003 |
|    1003 |
|    1003 |
|    1003 |
|    1003 |
|    1003 |
|    1003 |
|    1005 |
|    1005 |
+---------+

SELECT語句返回14行(即使表中只有4個供應商),因爲products表中列出了14個產品。那麼,如何檢索出有不同值的列表呢?
解決辦法是使用DISTINCT關鍵字,顧名思義,此關鍵字指示MySQL只返回不同的值。

mysql> SELECT DISTINCT vend_id FROM products;
+---------+
| vend_id |
+---------+
|    1001 |
|    1002 |
|    1003 |
|    1005 |
+---------+
  • 分析:SELECT DISTINCT vend_id告訴MySQL只返回不同(唯一)的
    vend_id行,因此只返回4行。如果使用DISTINCT關鍵字,它必須直接放在列名的前面。

不能部分使用DISTINCTDISTINCT關鍵字應用於所有列而不僅是前置它的列。如果給出SELECT DISTINCT vend_id,prod_price,除非指定的兩個列都不同,否則所有行都將被檢索出來。

4.6 限制結果

mysql> SELECT prod_name FROM products LIMIT 5;
+--------------+
| prod_name    |
+--------------+
| .5 ton anvil |
| 1 ton anvil  |
| 2 ton anvil  |
| Detonator    |
| Bird seed    |
+--------------+
  • 分析:此語句使用SELECT語句檢索單個列。 LIMIT 5指示MySQL返回
    不多於5行。

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

mysql> SELECT prod_name FROM products LIMIT 5,5;
+--------------+
| prod_name    |
+--------------+
| Carrots      |
| Fuses        |
| JetPack 1000 |
| JetPack 2000 |
| Oil can      |
+--------------+
  • 分析:LIMIT 5, 5指示MySQL返回從行5開始的5行。第一個數爲開始
    位置,第二個數爲要檢索的行數。

所以, 帶一個值的LIMIT總是從第一行開始,給出的數爲返回的行數。帶兩個值的LIMIT可以指定從行號爲第一個值的位置開始。

行0:檢索出來的第一行爲行0而不是行1。因此, LIMIT 1, 1將檢索出第二行而不是第一行。
在行數不夠時:如果沒有足夠的行, MySQL將只返回它能返回的那麼多行。
MySQL 5的LIMIT語法LIMIT 4 OFFSET 3意爲從行3開始取4行,就像LIMIT 3, 4一樣。

4.7 使用完全限定的表名

mysql> SELECT products.prod_name FROM products;
  • 分析:這裏指定了一個完全限定的列名。

表名也可以是完全限定的,如下所示:

mysql> SELECT products.prod_name FROM mysql_study.products;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章