SELECT
- 檢索單個列
- 檢索多個列
- 檢索所有列
- 不重復的結果 DISTINCT
- 限制結果 LIMIT 與 OFFSET
- 注釋
- 行內注釋
- 多行注釋
檢索單個列
從 Products 表中檢索一個名為 prod_name 的列;
SELECT prod_name
FROM Products;
【1】返回的數據可能是無序的,除非規定了順序;
【2】結束SQL語句需要分號;
【3】SQL不區分大小寫,但是推薦大寫,這樣結構清晰;
【4】SQL語句可以寫在一行,也可以寫在多行;
檢索多個列
從 Products 表中檢索多個列,prod_id,prod_name,prod_price;
SELECT prod_id,prod_name,prod_price
FROM Products;
【1】當心逗號,在選擇多個列時,需要在列名之間加上逗號,但是一定注意最后不加逗號;
【2】重要的話說三遍,最后一個列名后一定注意不加逗號;
【3】重要的話說三遍,最后一個列名后一定注意不加逗號;
檢索所有列
檢索 Products 表中所有的列;
SELECT *
FROM Products;
【1】雖然通配符 * 可以一下子檢索出所有的列,但是意味著降低檢索的速度和應用程序性能;
【2】在檢索未知列時,使用通配符是一大好處。
不重復的結果 DISTINCT
假設我們只需要檢索出所有的供應商信息,明顯我們不希望很多重復的值,因為無意義,此時,我們需要在屬性前添加 DISTINCT 來限制輸出的結果。
輸出上述左側結果的代碼如下:
SELECT vend_id
FROM Products;
輸出上述右側結果的代碼如下:
SELECT DISTINCT vend_id
FROM Products;
【1】DISTINCT 關鍵字作用于所有的列,不僅僅是跟在其后的那一列;
【2】DISTINCT 關鍵字可以組合屬性使用;
限制結果 LIMIT 與 OFFSET
SELECT 語句默認返回表中所有匹配的行,但是如果我們希望只輸出一定數量的行,怎么辦?本節需要注意的是,不同的 DBMS 的語句不同;
以下案例均為只取前五個結果:
SQL Server:
SELECT TOP 5 prod_name
FROM Products;
DB2:
SELECT prod_name
FROM Products
FETCH FIRST 5 ROWS ONLY;
Oracle:
SELECT prod_name
FROM Products
WHERE ROWNUM <= 5;
MySQL、MariaDB、PostgreSQL或SQLite:
SELECT prod_name
FROM Products
LIMIT 5;
此外,LIMIT 與 OFFSET 結合:
SELECT prod_name
FROM Products
LIMIT 5 OFFSET 5;
LIMIT 5 OFFSET 5 的含義是返回從第5個結果起的5行結果;
【1】第0行,第一個被檢索的結果是第0行,而不是第1行;
【2】LIMIT 4 OFFSET 3 可以簡化為 LIMIT 3,4;
【3】本節很清晰的表示出不同的DBMS語法的不同,所以必須要注意到不是所有的都一致的;
注釋
DBMS 有很多種注釋語法,具體如下:
行內注釋
SELECT prod_name -- 這是一條注釋
FROM Products;
# 這是一條注釋
SELECT prod_name
FROM Products;
多行注釋
/* 這是一條多行注釋
這是一條多行注釋
*/
SELECT prod_name
FROM Products;