記錄自己學(xué)習(xí)這本書的過程
此篇文章包括檢索、排序檢索數(shù)據(jù)和過濾數(shù)據(jù)
通往其他文章的入口:
SQL必知必會(huì)----第四版(二)
SQL必知必會(huì)----第四版(三)
SQL必知必會(huì)----第四版(四)
SQL必知必會(huì)----第四版(五)
SQL必知必會(huì)----第四版(六)
SQL必知必會(huì)----第四版(七)

一、檢索
檢索的關(guān)鍵為SELECT
- 檢索表中一列數(shù)據(jù)
SELECT p_country
FROM product;

??多條SQL語句必須以;分隔。單條SQL語句有的需要加,有的不需要加。即使不一定需要,加上分號(hào)也肯定沒有壞處。
??SQL語句是不區(qū)分大小寫的,但是表名、列名和值可能有所不同。
??SQL語句可以寫成長長的一行,也可以分寫在多行,但是一定要注意空格,不要被省略。
- 檢索表中多列數(shù)據(jù)
SELECT p_id, p_name, p_country
FROM product;

??在選擇多個(gè)列時(shí),一定要在列名之間加上逗號(hào),但是最后一個(gè)列名后一不加。
- 檢索所有列
SELECT *
FROM product;
??除非你確實(shí)需要表中的每一項(xiàng),否則最好別使用*通配符,檢索不需要的列通常會(huì)降低檢索和應(yīng)用程序的性能。如圖product.png,最上方。
- 檢索不同的值
SELECT DISTINCT p_price
FROM product;
??DISTINCT關(guān)鍵字用作于所有列,不僅僅是跟在其后的那一類。
- 限制結(jié)果
- 返回不超過3行的數(shù)據(jù)
SELECT id, p_name
FROM product
LIMIT 3;

- 檢索從第3行起的2條數(shù)據(jù)
SELECT id, p_name
FROM product
LIMIT 2 OFFSET 3;

- 使用注釋
SELECT p_name
--這是一條注釋
FROM product;
??--之后的文本就是注釋。
/*SELECT p_name
FROM product;*/
??從/*開始,到*/結(jié)束,中間的任何內(nèi)容都是注釋。這種方式長用于給代碼加注釋。
二、排序檢索數(shù)據(jù)
- 排序數(shù)據(jù)
SELECT id, p_country
FROM product
ORDER BY p_country;

??在指定一條ORDER BY子句時(shí),應(yīng)該保證它是SELECT語句中最后一條子句。
??通常,ORDER BY子句中使用的列將是為顯示而選擇的列。但是,實(shí)際上并不一定要這樣,用非檢索的列排序數(shù)據(jù)是完全合法的。
- 按多個(gè)列排序
SELECT p_id, p_name, p_country
FROM product
ORDER BY p_id, p_country;
??首先按p_id,然后按p_country排序。
- 按列位置排序
SELECT id, p_name, p_country
FROM product
ORDER BY 2, 3;
??這里排序指定的是選擇列的相對(duì)位置而不是列名。首先按p_country,然后按p_price排序。
??當(dāng)根據(jù)不出現(xiàn)在SELECT清單中的列進(jìn)行排序時(shí),不能采用這項(xiàng)技術(shù)。但是,如果有必要,可以混合使用實(shí)際列和相對(duì)列位置。
- 指定排序方向
默認(rèn)排序?yàn)樯蚺帕?,降序排列關(guān)鍵字為DESC。
SELECT p_name, p_country, p_price
FROM product
ORDER BY p_price DESC;
??以p_price降序排列。
SELECT p_id, p_name, p_price
FROM product
ORDER BY p_id DESC, p_price;
??以p_id降序、p_price升序排列。
??DESC關(guān)鍵字只應(yīng)用到位于其前面的列名。
??如果想在多個(gè)列上進(jìn)行降序排列,必須對(duì)每一列指定DESC關(guān)鍵字。
??DESC是DESCENDING的縮寫,這兩個(gè)關(guān)鍵字都可以使用。與DESC相對(duì)的是ASC(或ASCENDING),在升序排序時(shí)可以指定它。但實(shí)際上,ASC沒有多大用處,因?yàn)樯蚴悄J(rèn)的。
三、過濾數(shù)據(jù)
- 使用WHERE子句
SELECT p_name, p_count
FROM product
WHERE p_count = 5;
這條語句從product表中檢索兩列,但不反回所有行,只返回p_count值為5的行。
??數(shù)據(jù)也可以在應(yīng)用層過濾。為此,SQL的SELECT語句為客戶端應(yīng)用檢索出超過實(shí)際所需的數(shù)據(jù),然后客戶端代碼對(duì)返回?cái)?shù)據(jù)進(jìn)行循環(huán),提取出需要的行。通常,這種做法極其不妥。優(yōu)化數(shù)據(jù)庫后可以更快速地對(duì)數(shù)據(jù)進(jìn)行過濾。而讓客戶端應(yīng)用(或開發(fā)語言)處理數(shù)據(jù)庫的工作將會(huì)極大地影響應(yīng)用的性能,并且使所創(chuàng)建的應(yīng)用完全不具備可伸縮性。此外,如果在客戶端過濾數(shù)據(jù),服務(wù)器不得不通過網(wǎng)絡(luò)發(fā)送多余的數(shù)據(jù),這將導(dǎo)致網(wǎng)絡(luò)寬帶的浪費(fèi)。
??在同時(shí)使用ORDER BY和WHERE子句時(shí),應(yīng)該讓ORDER BY位于WHERE之后。
- WHERE子句操作符
| 操作符 | 說明 |
|---|---|
| = | 等于 |
| <> | 不等于 |
| != | 不等于 |
| < | 小于 |
| <= | 小于等于 |
| > | 大于 |
| >= | 大于等于 |
| BETWEEN | 在指定的兩個(gè)值之間 |
| IS NULL | 為NULL值 |
SELECT p_name, p_price
FROM product
WHERE p_price < 5;
??列出所有p_price小與5的數(shù)據(jù)。
SELECT p_name, p_price
FROM product
WHERE p_price <= 4.6;
??列出所有p_price小與等于4.6的數(shù)據(jù)。
SELECT p_name, p_country
FROM product
--p_country p_country != 'CN'
WHERE p_country <> 'CN';
??列出所有p_country不等于CN的數(shù)據(jù)。
SELECT id, p_name
FROM product
WHERE id BETWEEN 2 AND 5;
??在使用BETWEEN時(shí),必須指定兩個(gè)值,所需范圍的低端紙和高端值。這兩個(gè)值必須使用AND關(guān)鍵字分隔。BETWEEN匹配范圍中所有的值,包括指定的開始值和結(jié)束值。
SELECT p_name
FROM product
WHERE p_name IS NULL;
??列出所有p_name值為NULL的所有數(shù)據(jù)。
不好意思,這個(gè)沒圖