返回所有行的檢索
檢索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)