記錄自己學(xué)習(xí)這本書的過程
此篇文章包括檢索、排序檢索數(shù)據(jù)和過濾數(shù)據(jù)
通往其他文章的入口:
SQL必知必會----第四版(二)
SQL必知必會----第四版(三)
SQL必知必會----第四版(四)
SQL必知必會----第四版(五)
SQL必知必會----第四版(六)
SQL必知必會----第四版(七)
一、檢索
檢索的關(guān)鍵為SELECT
- 檢索表中一列數(shù)據(jù)
SELECT p_country
FROM product;
??多條SQL語句必須以;
分隔呕诉。單條SQL語句有的需要加议街,有的不需要加。即使不一定需要,加上分號也肯定沒有壞處宙橱。
??SQL語句是不區(qū)分大小寫的搔啊,但是表名柬祠、列名和值可能有所不同。
??SQL語句可以寫成長長的一行负芋,也可以分寫在多行漫蛔,但是一定要注意空格,不要被省略旧蛾。
- 檢索表中多列數(shù)據(jù)
SELECT p_id, p_name, p_country
FROM product;
??在選擇多個列時莽龟,一定要在列名之間加上逗號,但是最后一個列名后一不加锨天。
- 檢索所有列
SELECT *
FROM product;
??除非你確實需要表中的每一項毯盈,否則最好別使用*通配符,檢索不需要的列通常會降低檢索和應(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子句時秒咨,應(yīng)該保證它是SELECT語句中最后一條子句。
??通常掌挚,ORDER BY子句中使用的列將是為顯示而選擇的列雨席。但是,實際上并不一定要這樣吠式,用非檢索的列排序數(shù)據(jù)是完全合法的陡厘。
- 按多個列排序
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;
??這里排序指定的是選擇列的相對位置而不是列名糙置。首先按p_country,然后按p_price排序是目。??當(dāng)根據(jù)不出現(xiàn)在SELECT清單中的列進(jìn)行排序時谤饭,不能采用這項技術(shù)。但是懊纳,如果有必要揉抵,可以混合使用實際列和相對列位置。
- 指定排序方向
默認(rè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)用到位于其前面的列名。
??如果想在多個列上進(jìn)行降序排列脚囊,必須對每一列指定DESC關(guān)鍵字帖汞。
??DESC是DESCENDING的縮寫,這兩個關(guān)鍵字都可以使用凑术。與DESC相對的是ASC(或ASCENDING)翩蘸,在升序排序時可以指定它。但實際上淮逊,ASC沒有多大用處催首,因為升序是默認(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ù)據(jù),然后客戶端代碼對返回數(shù)據(jù)進(jìn)行循環(huán)霉猛,提取出需要的行尺锚。通常,這種做法極其不妥惜浅。優(yōu)化數(shù)據(jù)庫后可以更快速地對數(shù)據(jù)進(jìn)行過濾瘫辩。而讓客戶端應(yīng)用(或開發(fā)語言)處理數(shù)據(jù)庫的工作將會極大地影響應(yīng)用的性能,并且使所創(chuàng)建的應(yīng)用完全不具備可伸縮性坛悉。此外伐厌,如果在客戶端過濾數(shù)據(jù),服務(wù)器不得不通過網(wǎng)絡(luò)發(fā)送多余的數(shù)據(jù)裸影,這將導(dǎo)致網(wǎng)絡(luò)寬帶的浪費挣轨。
??在同時使用ORDER BY和WHERE子句時,應(yīng)該讓ORDER BY位于WHERE之后轩猩。
- WHERE子句操作符
操作符 | 說明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN | 在指定的兩個值之間 |
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時,必須指定兩個值衔瓮,所需范圍的低端紙和高端值浊猾。這兩個值必須使用AND關(guān)鍵字分隔。BETWEEN匹配范圍中所有的值热鞍,包括指定的開始值和結(jié)束值葫慎。SELECT p_name
FROM product
WHERE p_name IS NULL;
??列出所有p_name值為NULL的所有數(shù)據(jù)。
不好意思薇宠,這個沒圖