檢索一列(不過濾不排序)
SELECT prod_name FROM Products;
select後面是列名,from後面是表名
返回了所有行,因爲沒指定順序,所以沒有順序,行數對就行
所以關鍵字可以小寫
select prod_price from Products;
甚至這麼寫都可以::::
seleCt prod_price from Products;
我發現mysql對於表,列名也是不區分大小寫的:(其他DBMS不一定)
seleCt prod_desC from pRoducts;
還是正確拿到了結果
注意SQL語言忽略所有空格,所以可以這麼寫:
select
prod_name
from
products;
或者這樣
select
prod_name from
products;
都正確
而且很多SQL開發人員都覺得寫成多行多便於閱讀和調試,他們不贊成寫成長長的一行
檢索多列 (逗號)
select prod_id, prod_name, prod_price
from products;
檢索所有列(*通配符)
select * from products;
通配符有好有壞,如果明確知道自己要檢索的是哪些列就不用*,如果想知道有哪些你還不知道名字的列就可以用。雙刃劍。
注意SQL檢索語句返回的數據一般是沒有格式的,我們看到的格式是workbench做的工作和貢獻。平時訪問數據庫也是,返回的數據需要應用程序自己來調整顯示格式。
檢索時顯示唯一值(distinct關鍵字)
select vend_id
from products;
因爲有9種產品,所以顯示了9行,但是有一些產品的供應商是一樣的,所以我想只顯示唯一值,只返回一列中不同的值
select distinct vend_id
from products;
但是distinct關鍵字作用於後面的所有列,只要有兩列不一樣,就會顯示所有行
select vend_id, prod_id
from products;
限制只輸出某幾行(limit,offset,不同DBMS實現不同)
只輸出前5行,使用limit關鍵字
select prod_name
from products
limit 5;
返回從第5行開始(包括第5行)的5行數據(行號從0開始)
select prod_name
from products
limit 5 offset 5;
由於一共只有9行,所以只返回4行
總結:
- limit指定返回的行數
limit後面是0 ,則返回0行;後面是1則返回1行
select prod_name
from products
limit 0 offset 1;
select prod_name
from products
limit 1 offset 1;
- offset指定返回的行是從哪一行開始的,包含offset後面的數字那一行,注意行數從0開始
比如lIimit 5 offset 5,返回5行,從第5行開始,所以返回的是5,6,7,8行。因爲一共只有9行,最大行號爲8,所以只返回了4行
返回第0行
select prod_name
from products
limit 1 offset 0;
但是!在這裏可以引入一個很重要的點!!!那就是:不同的DBMS軟件的SQL實現會有很多小的差異!比如這節說的這個功能,選中間某幾行,在mysql使用limit和offset關鍵字實現的,但是其實在其他DBMS中都不一樣!
註釋
- 行內註釋:兩個連字符–
也有人像Python那樣用#表示行內註釋,但是很多DBMS都不支持
select prod_name
from products
limit 1 offset 0;
-- select prod_id from products;
第二條註釋,就執行第一行。其實本來只會執行第二行的。
注意–後面一定要加空格,否則報錯
- 多行註釋:/**/,和C一樣
select prod_name
from products
limit 1 offset 0;
/*select prod_id from products;
select prod_price from products;*/
總結
涉及關鍵字:
- select
- from:其實from是select語句的子句(clause)
- limit
- offset
- distinct
用到了逗號分隔符,*通配符
明白了不同DBMS對SQL的實現的差異