1. 程式人生 > 實用技巧 >MySQL基礎之MySQL必知必會(四)檢索資料

MySQL基礎之MySQL必知必會(四)檢索資料

SELECT語句

每個SQL語句都是由一個或多個關鍵字構成的。最常使用的SQL語句是SELECT語句。它的用途是從一個或多個表中檢索資訊。

為了使用SELECT檢索表中的資料, 必須至少給出兩條資訊--想要選擇什麼, 以及從什麼地方選擇

檢索單個列

MariaDB [crashcourse]> 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) | +----------------+ 14 rows in set (0.000 sec) MariaDB [crashcourse]>

利用SELECT語句從products表中檢索一個名為prod_name的列。所需的列名在SELECT關鍵字之後給出, FROM關鍵字指出從其中檢索資料的表名。

如上一條簡單的SELECT語句將返回表中所有的行。資料是沒有過濾(過濾將得到一個結果集的子集), 也沒有排序

結束SQL語句

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

SQL語句和大小寫

SQL語句不區分大小寫, 因此寫SELECT和select是相同的。

使用空格

在處理SQL語句時, 其中所有空格都被忽略。SQL語句可以在一行上給出, 也可以分為多行。

檢索多個列

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

注意:

在選擇多個列時, 一定要在列名之間使用逗號分隔, 但是最後一個列名後不加, 如果在最後一個列名後加了逗號, 會報錯

例如: 從products表中選擇3列

MariaDB [crashcourse]> 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 |
+---------+----------------+------------+
14 rows in set (0.000 sec)

MariaDB [crashcourse]> 

檢索所有列

SELECT可以檢索所有列而不必逐個列出他們。通過在實際列名的位置使用星號(*)萬用字元來達到。如下所示:

MariaDB [crashcourse]> 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                                    |
+---------+---------+----------------+------------+----------------------------------------------------------------+
14 rows in set (0.000 sec)

MariaDB [crashcourse]> 

萬用字元的使用

一般, 除非確定需要表中的每個列, 否則最好別使用*萬用字元。因為使用*萬用字元檢索不需要列的時候通常會降低檢索和應用程式的效能

檢索不同的行

使用DISTINCT關鍵字可以指示MySQL只返回不同的值。

MariaDB [crashcourse]> select distinct vend_id from products;
+---------+
| vend_id |
+---------+
|    1001 |
|    1002 |
|    1003 |
|    1005 |
+---------+
4 rows in set (0.001 sec)

MariaDB [crashcourse]> 

SELECT DISTINCT vend_id告訴MySQL只返回不同(唯一)的vend_id行。如果使用DISTINCT關鍵字, 它必須直接放在列名的前面

不能部分使用DISTINCT

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

限制結果

SELECT語句返回匹配的行, 為了返回第一行或者前幾行, 可以使用LIMIT語句。

MariaDB [crashcourse]> SELECT prod_name from products LIMIT 5;
+--------------+
| prod_name    |
+--------------+
| .5 ton anvil |
| 1 ton anvil  |
| 2 ton anvil  |
| Detonator    |
| Bird seed    |
+--------------+
5 rows in set (0.000 sec)

MariaDB [crashcourse]> 

此語句使用SELECT語句檢索單個列, LIMIT 5指示MySQL返回不多於5行。

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

MariaDB [crashcourse]> SELECT prod_name from products LIMIT 5, 5;
+--------------+
| prod_name    |
+--------------+
| Carrots      |
| Fuses        |
| JetPack 1000 |
| JetPack 2000 |
| Oil can      |
+--------------+
5 rows in set (0.000 sec)

MariaDB [crashcourse]> 

LIMIT 5, 5指示MySQL返回行5開始的5行。第一個數為開始位置, 第二個數為要檢索的行數。

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

行0

檢索出來的第一行為行0而不是行1, 因此, LIMIT 1, 1將檢索出第二行而不是第一行

在行數不夠時

LIMIT中指定要檢索的行數為檢索的最大行數。如果沒有足夠多的行, MySQL只返回它能返回的那麼多行

MySQL5的LIMIT語法

LIMIT容易讓人混淆, 因此MySQL5支援LIMIT的另一種代替語法。LIMIT 4 OFFSET 3 意為從第3行開始取4行, 就像LIMIT3, 4一樣。

使用完全限定的表名

SQL語句也可以使用完全限定的名字來引用列(同時使用表名和列名)。

例如:

MariaDB [crashcourse]> SELECT products.prod_name FROM crashcourse.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) |
+----------------+
14 rows in set (0.000 sec)

MariaDB [crashcourse]>