mysql必知必會 (一)select語句檢索數據

返回所有行的檢索

檢索1列

這裏的代碼之前在mysql workbench都跑過了,現在在命令行再跑一遍,複習並熟悉mysql命令行

mysql> select prod_name from products;
+---------------------+
| prod_name           |
+---------------------+
| Fish bean bag toy   |
| Bird bean bag toy   |
| Rabbit bean bag toy |
| 8 inch teddy bear   |
| 12 inch teddy bear  |
| 18 inch teddy bear  |
| Raggedy Ann         |
| King doll           |
| Queen doll          |
+---------------------+
9 rows in set (0.01 sec)

沒排序,沒過濾(返回所有行)
在這裏插入圖片描述

檢索多列

mysql> select prod_id, prod_name, prod_price
    -> from products;
+---------+---------------------+------------+
| prod_id | prod_name           | prod_price |
+---------+---------------------+------------+
| BNBG01  | Fish bean bag toy   |       3.49 |
| BNBG02  | Bird bean bag toy   |       3.49 |
| BNBG03  | Rabbit bean bag toy |       3.49 |
| BR01    | 8 inch teddy bear   |       5.99 |
| BR02    | 12 inch teddy bear  |       8.99 |
| BR03    | 18 inch teddy bear  |      11.99 |
| RGAN01  | Raggedy Ann         |       4.99 |
| RYL01   | King doll           |       9.49 |
| RYL02   | Queen doll          |       9.49 |
+---------+---------------------+------------+
9 rows in set (0.00 sec)

明白爲啥mysql命令行要求輸入分號後回車才執行命令了,因爲sql語句喜歡分行寫,如果回車執行就沒法弄了。

返回的數據是沒有格式的。因爲sql語句只負責檢索。不過以後也會涉及到用sql語句實現格式化

檢索所有列:*通配符

mysql> select * from products;
+---------+---------+---------------------+------------+-----------------------------------------------------------------------+
| prod_id | vend_id | prod_name           | prod_price | prod_desc                                                             |
+---------+---------+---------------------+------------+-----------------------------------------------------------------------+
| BNBG01  | DLL01   | Fish bean bag toy   |       3.49 | Fish bean bag toy, complete with bean bag worms with which to feed it |
| BNBG02  | DLL01   | Bird bean bag toy   |       3.49 | Bird bean bag toy, eggs are not included                              |
| BNBG03  | DLL01   | Rabbit bean bag toy |       3.49 | Rabbit bean bag toy, comes with bean bag carrots                      |
| BR01    | BRS01   | 8 inch teddy bear   |       5.99 | 8 inch teddy bear, comes with cap and jacket                          |
| BR02    | BRS01   | 12 inch teddy bear  |       8.99 | 12 inch teddy bear, comes with cap and jacket                         |
| BR03    | BRS01   | 18 inch teddy bear  |      11.99 | 18 inch teddy bear, comes with cap and jacket                         |
| RGAN01  | DLL01   | Raggedy Ann         |       4.99 | 18 inch Raggedy Ann doll                                              |
| RYL01   | FNG01   | King doll           |       9.49 | 12 inch king doll with royal garments and crown                       |
| RYL02   | FNG01   | Queen doll          |       9.49 | 12 inch queen doll with royal garments and crown                      |
+---------+---------+---------------------+------------+-----------------------------------------------------------------------+
9 rows in set (0.00 sec)

在這裏插入圖片描述在這裏插入圖片描述

只返回不同值:distinct

返回所有行的一個顯著缺點是,如果一列有很多數據是一樣,也許需要的只是一共有幾個不同的值

如果從供應商表中選擇,由於vend_id是主鍵,所以返回的每一行一定沒有重複值

mysql> select vend_id from vendors;
+---------+
| vend_id |
+---------+
| BRE02   |
| BRS01   |
| DLL01   |
| FNG01   |
| FRB01   |
| JTS01   |
+---------+
6 rows in set (0.00 sec)

但是如果從產品表中選擇這一列,就會得到

mysql> select vend_id from products;
+---------+
| vend_id |
+---------+
| BRS01   |
| BRS01   |
| BRS01   |
| DLL01   |
| DLL01   |
| DLL01   |
| DLL01   |
| FNG01   |
| FNG01   |
+---------+
9 rows in set (0.02 sec)

可以看到,由於多個產品來自同一個供應商,所以存在重複值,我們只想要唯一值

mysql> select distinct vend_id
    -> from products;
+---------+
| vend_id |
+---------+
| BRS01   |
| DLL01   |
| FNG01   |
+---------+
3 rows in set (0.00 sec)

在這裏插入圖片描述
prod_price和vend_id沒有都不同的行就會被顯示出來,於是得到的結果雖然不一定是所有行,但是兩個列都有可能出現重複值了

mysql> select distinct vend_id, prod_price
    -> from products;
+---------+------------+
| vend_id | prod_price |
+---------+------------+
| DLL01   |       3.49 |
| BRS01   |       5.99 |
| BRS01   |       8.99 |
| BRS01   |      11.99 |
| DLL01   |       4.99 |
| FNG01   |       9.49 |
+---------+------------+
6 rows in set (0.00 sec)

重點是記清楚distinct作用於後面的所有列

只返回某幾行:limit

返回前6行

mysql> select prod_name from products
    -> limit 6;
+---------------------+
| prod_name           |
+---------------------+
| Fish bean bag toy   |
| Bird bean bag toy   |
| Rabbit bean bag toy |
| 8 inch teddy bear   |
| 12 inch teddy bear  |
| 18 inch teddy bear  |
+---------------------+
6 rows in set (0.00 sec)

返回第6行開始的3行,注意到第6行的6是從0開始編號的,實際返回的是第7行(如果從1編號的話)

這時候limit後面第一個數字是行的起點,表示從第6行開始,而第二個數字才表示幾行

mysql> select prod_name
    -> from products
    -> limit 6, 3;
+-------------+
| prod_name   |
+-------------+
| Raggedy Ann |
| King doll   |
| Queen doll  |
+-------------+
3 rows in set (0.00 sec)

也可以用offset關鍵字,limit後的數字表示最多輸出的行數,這裏是3行,從第2行(從0編號)開始

mysql> select prod_name
    -> from products
    -> limit 3 offset 2;
+---------------------+
| prod_name           |
+---------------------+
| Rabbit bean bag toy |
| 8 inch teddy bear   |
| 12 inch teddy bear  |
+---------------------+
3 rows in set (0.00 sec)

注意limit 6, 3和limit 6 offset 3的區別:limit 6, 3相當於是limit 3 offset 6
在這裏插入圖片描述

完全限定表名,列名

mysql> select products.prod_name
    -> from tysql.products;
+---------------------+
| prod_name           |
+---------------------+
| Fish bean bag toy   |
| Bird bean bag toy   |
| Rabbit bean bag toy |
| 8 inch teddy bear   |
| 12 inch teddy bear  |
| 18 inch teddy bear  |
| Raggedy Ann         |
| King doll           |
| Queen doll          |
+---------------------+
9 rows in set (0.00 sec)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章