一抽兆、數(shù)據(jù)檢索
1.基本格式
select [字段名...] from 表名 where 表達(dá)式
2.查詢所有列
select * from 表名 where 表達(dá)式;
*通常會(huì)降低檢索和應(yīng)用程序的性能,能不用盡量不用
3.去重檢索 DISTINCT
mysql>> select DISTINCT 字段 from 表名;
DISTINCT 必須直接放在列名的前面,作用于后面所有列
4.限制結(jié)果
在SQL Server和Access中使用SELECT時(shí),可以使用TOP關(guān)鍵字來(lái)限制最多返回多少行
mysql>> select TOP 5 * from user;
如果你使用MySQL竟宋、MariaDB杈绸、PostgreSQL或者SQLite系奉,需要使用LIMIT 子句,offset 第0行開(kāi)始
mysql>> select * from user LIMIT 5 OFFSET 5;
5.使用注釋
行內(nèi)注釋?zhuān)?/p>
--(兩個(gè)連字符 ,之后的便是注釋文本)
行首注釋?zhuān)?/p>
# 在每一行的行首加# ,注釋整行
多行注釋:
/**/
以上都基于mysql語(yǔ)句
二惭嚣、排序檢索
1.ORDERBY
mysql>> select * from user ORDER BY [字段名...];
保證oder by為select最后一條子句,按后接字段名優(yōu)先級(jí)排序
2.按字段位置排序
mysql>> select * from user ORDER BY 2,3;
按照第二列與第三列排序
3.降序排列
mysql>> select * from user ORDER BY [字段..] DESC;
DESC 只應(yīng)用到直接位于其前面的列名遵湖,所列降序需指定多個(gè)DESC
三、數(shù)據(jù)過(guò)濾
數(shù)據(jù)庫(kù)表一般包含大量的數(shù)據(jù)晚吞,很少需要檢索表中的所有行延旧。通常只會(huì)根據(jù)特定操作或報(bào)告的需要提取表數(shù)據(jù)的子集。只檢索所需數(shù)據(jù)需要指
定搜索條件(search criteria)载矿,搜索條件也稱(chēng)為過(guò)濾條件(filter condition)垄潮。
1.where子句操作符
操作符 | 說(shuō)明 |
---|---|
= | 等于 |
<>、!= | 不等于 |
< | 小于 |
<= | 小于等于 |
BETWEEN AND | 在指定兩個(gè)值之間 |
IS NULL | 為NULL值 |
eg:
select * from user where id BETWEEN 5 AND 10;
select * from user where id IS NULL;
null和非匹配
通過(guò)過(guò)濾選擇不包含指定值的所有行時(shí)闷盔,你可能希望返回含NULL值的行弯洗。但是這做不到。因?yàn)槲粗╱nknown)有特殊的含義逢勾,數(shù)據(jù)庫(kù)不知
道它們是否匹配牡整,所以在進(jìn)行匹配過(guò)濾或非匹配過(guò)濾時(shí),不會(huì)返回這些結(jié)果溺拱。
過(guò)濾數(shù)據(jù)時(shí)逃贝,一定要驗(yàn)證被過(guò)濾列中含NULL的行確實(shí)出現(xiàn)在返回的數(shù)據(jù)中
四、高級(jí)數(shù)據(jù)過(guò)濾
用來(lái)聯(lián)結(jié)或改變WHERE子句中的子句的關(guān)鍵字迫摔,也稱(chēng)為邏輯操作符(logical operator)
1.AND操作符
要通過(guò)不止一個(gè)列進(jìn)行過(guò)濾沐扳,可以使用AND操作符給WHERE子句附加條件
mysql>> select * from user where id <10 AND id >2;
2.OR操作符
在第一個(gè)條件滿足時(shí),不管第二個(gè)條件是否滿足句占,相應(yīng)的行都將被檢索出來(lái)
mysql>> select * from user where id <10 OR id >2;
3. WHERE OR 組合使用
mysql>> select * from user where id <10 AND id >2 OR sex = 1;
結(jié)合使用時(shí)沪摄,AND在求值過(guò)程中優(yōu)先級(jí)更高,使用圓括號(hào)可消除歧義
4.IN操作符
IN操作符用來(lái)指定條件范圍,范圍中的每個(gè)條件都可以進(jìn)行匹配
mysql>> select * from user where name IN ('july','tofu');
IN操作符擁有和OR相似的功能
IN操作符優(yōu)點(diǎn):
- 在有很多合法選項(xiàng)時(shí)杨拐,IN操作符的語(yǔ)法更清楚祈餐,更直觀。
- 在與其他AND和OR操作符組合使用IN時(shí)哄陶,求值順序更容易管理帆阳。
- IN操作符一般比一組OR操作符執(zhí)行得更快(在上面這個(gè)合法選項(xiàng)很少的例子中,你看不出性能差異)屋吨。
- IN的最大優(yōu)點(diǎn)是可以包含其他SELECT語(yǔ)句蜒谤,能夠更動(dòng)態(tài)地建立WHERE子句。
5.NOT操作符
NOT操作符有且只有一個(gè)功能离赫,那就是否定其后所跟的任何條件芭逝,一般和IN配合使用
mysql>> select * from user where NOT id=6 ORDER BY id;
五、通配符(wildcard)過(guò)濾
1.LIKE操作符
通配符搜索只能用于文本字段(串)渊胸,非文本數(shù)據(jù)類(lèi)型字段不能使用通配符搜索
為在搜索子句中使用通配符旬盯,必須使用LIKE操作符。LIKE指示DBMS翎猛,后跟的搜索模式利用通配符匹配而不是簡(jiǎn)單的相等匹配進(jìn)行比較胖翰。
2.百分號(hào)(%)
在搜索串中,%表示任何字符(包括空格)出現(xiàn)任意次數(shù),相當(dāng)于其他模式的切厘,可在任意位置使用萨咳,使用多個(gè),不匹配N(xiāo)ULL*
mysql>> select * from user where name LIKE "lily%";
3.下劃線(_)
下劃線的用途與%一樣疫稿,但它只匹配單個(gè)字符
相當(dāng)于填空培他,一個(gè)字符
mysql>> select * from user where name LIKE "_eo";
4.方括號(hào)([ ])
方括號(hào)([])通配符用來(lái)指定一個(gè)字符集,它必須匹配指定位置(通配符的位置)的一個(gè)字符
只有微軟的Access和SQL Server支持集合
和正則表達(dá)式規(guī)則類(lèi)似
5.通配符技巧
- 不要過(guò)度使用通配符遗座。如果其他操作符能達(dá)到相同的目的舀凛,應(yīng)該使用其他操作符。
- 在確實(shí)需要使用通配符時(shí)途蒋,也盡量不要把它們用在搜索模式的開(kāi)始處猛遍。把通配符置于開(kāi)始處,搜索起來(lái)是最慢的号坡。
- 仔細(xì)注意通配符的位置懊烤。如果放錯(cuò)地方,可能不會(huì)返回想要的數(shù)據(jù)