最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL全面瓦解之查詢的過濾條件詳解

 更新時(shí)間:2020年11月11日 10:48:42   作者:翁智華  
這篇文章主要給打大家介紹了關(guān)于MySQL全面瓦解之查詢的過濾條件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

概述

在實(shí)際的業(yè)務(wù)場(chǎng)景應(yīng)用中,我們經(jīng)常要根據(jù)業(yè)務(wù)條件獲取并篩選出我們的目標(biāo)數(shù)據(jù)。這個(gè)過程我們稱之為數(shù)據(jù)查詢的過濾。而過濾過程使用的各種條件(比如日期時(shí)間、用戶、狀態(tài))是我們獲取精準(zhǔn)數(shù)據(jù)的必要步驟,

這樣才能得到我們期望的結(jié)果。所以本章我們來學(xué)習(xí)MySQL中查詢過濾條件的各種用法。

關(guān)系運(yùn)算

關(guān)系運(yùn)算就是where語句后跟上一個(gè)或者n個(gè)條件,滿足where后面條件的數(shù)據(jù)會(huì)被返回,反之不滿足的就會(huì)被過濾掉。operators指的是運(yùn)算符 ,有如下幾種情況:


運(yùn)算符 說明
= 等于
<> 或者 != 不等于
> 大于
>= 大于等于
< 小于
<= 小于等于

關(guān)系運(yùn)算基本的語法格式如下:

 select cname1,cname2,... from tname where cname operators cval 

等于=

查詢出 列和后面的值嚴(yán)格相等的數(shù)據(jù),非值類型的需要對(duì)后面值加上引號(hào),值類型的不需要。

語法格式如下:

select cname1,cname2,... from tname where cname = cval;
mysql> select * from user2;
+----+-------+-----+----------+-----+
| id | name | age | address | sex |
+----+-------+-----+----------+-----+
| 1 | brand | 21 | fuzhou | 1 |
| 2 | helen | 20 | quanzhou | 0 |
| 3 | sol | 21 | xiamen | 0 |
+----+-------+-----+----------+-----+
3 rows in set

mysql> select * from user2 where name='helen';
+----+-------+-----+----------+-----+
| id | name | age | address | sex |
+----+-------+-----+----------+-----+
| 2 | helen | 20 | quanzhou | 0 |
+----+-------+-----+----------+-----+
1 row in set

mysql> select * from user2 where age=21;
+----+-------+-----+---------+-----+
| id | name | age | address | sex |
+----+-------+-----+---------+-----+
| 1 | brand | 21 | fuzhou | 1 |
| 3 | sol | 21 | xiamen | 0 |
+----+-------+-----+---------+-----+
2 rows in set

不等于(<>、!=)

不等于有兩種寫法,一種是<>,另一種是!=,意思一樣,可隨意切換使用,但是 <> 先于 != 出現(xiàn),所以看很多以前的例子,<> 出現(xiàn)頻率比較高,可移植性更強(qiáng),推薦使用。

不等于的目的是查詢出與條件不符和結(jié)果,格式如下:

select cname1,cname2,... from tname where cname <> cval;
或
select cname1,cname2,... from tname where cname != cval;
mysql> select * from user2;
+----+-------+-----+----------+-----+
| id | name | age | address | sex |
+----+-------+-----+----------+-----+
| 1 | brand | 21 | fuzhou | 1 |
| 2 | helen | 20 | quanzhou | 0 |
| 3 | sol | 21 | xiamen | 0 |
+----+-------+-----+----------+-----+
3 rows in set

mysql> select * from user2 where age<>20;
+----+-------+-----+---------+-----+
| id | name | age | address | sex |
+----+-------+-----+---------+-----+
| 1 | brand | 21 | fuzhou | 1 |
| 3 | sol | 21 | xiamen | 0 |
+----+-------+-----+---------+-----+
2 rows in set

大于小于(> <)

一般用于數(shù)值或者日期、時(shí)間類型的比較,格式如下:

select cname1,cname2,... from tname where cname > cval;

select cname1,cname2,... from tname where cname < cval;

select cname1,cname2,... from tname where cname >= cval;

select cname1,cname2,... from tname where cname <= cval;
mysql> select * from user2 where age>20;
+----+-------+-----+---------+-----+
| id | name | age | address | sex |
+----+-------+-----+---------+-----+
| 1 | brand | 21 | fuzhou | 1 |
| 3 | sol | 21 | xiamen | 0 |
+----+-------+-----+---------+-----+
2 rows in set

mysql> select * from user2 where age>=20;
+----+-------+-----+----------+-----+
| id | name | age | address | sex |
+----+-------+-----+----------+-----+
| 1 | brand | 21 | fuzhou | 1 |
| 2 | helen | 20 | quanzhou | 0 |
| 3 | sol | 21 | xiamen | 0 |
+----+-------+-----+----------+-----+
3 rows in set

mysql> select * from user2 where age<21;
+----+-------+-----+----------+-----+
| id | name | age | address | sex |
+----+-------+-----+----------+-----+
| 2 | helen | 20 | quanzhou | 0 |
+----+-------+-----+----------+-----+
1 row in set

mysql> select * from user2 where age<=21;
+----+-------+-----+----------+-----+
| id | name | age | address | sex |
+----+-------+-----+----------+-----+
| 1 | brand | 21 | fuzhou | 1 |
| 2 | helen | 20 | quanzhou | 0 |
| 3 | sol | 21 | xiamen | 0 |
+----+-------+-----+----------+-----+
3 rows in set

邏輯運(yùn)算  

運(yùn)算符 說明
AND 多個(gè)條件都成立
OR 多個(gè)條件中滿足一個(gè)
NOT 對(duì)條件進(jìn)行取非操作

AND(且)

當(dāng)需要多個(gè)條件進(jìn)行數(shù)據(jù)過濾的時(shí)候,使用這種方式,and的每個(gè)表達(dá)式都是要成立,過濾出來的數(shù)據(jù)就是用戶需要的。

下面過濾出年齡和性別兩個(gè)條件都成立的數(shù)據(jù),語法格式如下:

select cname1,cname2,... from tname where cname1 operators cval1 and cname2 operators cval2 
mysql> select * from user2;
+----+-------+-----+----------+-----+
| id | name | age | address | sex |
+----+-------+-----+----------+-----+
| 1 | brand | 21 | fuzhou | 1 |
| 2 | helen | 20 | quanzhou | 0 |
| 3 | sol | 21 | xiamen | 0 |
| 4 | weng | 33 | guizhou | 1 |
+----+-------+-----+----------+-----+
4 rows in set

mysql> select * from user2 where age >20 and sex=1;
+----+-------+-----+---------+-----+
| id | name | age | address | sex |
+----+-------+-----+---------+-----+
| 1 | brand | 21 | fuzhou | 1 |
| 4 | weng | 33 | guizhou | 1 |
+----+-------+-----+---------+-----+
2 rows in set

OR(或)

當(dāng)多個(gè)條件中只要滿足一個(gè)條件即進(jìn)行數(shù)據(jù)過濾。

下面條件過濾出年齡大于21歲和小于21歲的數(shù)據(jù),語法格式如下:

select cname1,cname2,... from tname where cname1 operators cval1 or cname2 operators cval2 
mysql> select * from user2;
+----+-------+-----+----------+-----+
| id | name | age | address | sex |
+----+-------+-----+----------+-----+
| 1 | brand | 21 | fuzhou | 1 |
| 2 | helen | 20 | quanzhou | 0 |
| 3 | sol | 21 | xiamen | 0 |
| 4 | weng | 33 | guizhou | 1 |
+----+-------+-----+----------+-----+
4 rows in set

mysql> select * from user2 where age>21 or age<21;
+----+-------+-----+----------+-----+
| id | name | age | address | sex |
+----+-------+-----+----------+-----+
| 2 | helen | 20 | quanzhou | 0 |
| 4 | weng | 33 | guizhou | 1 |
+----+-------+-----+----------+-----+
2 rows in set

NOT(取非)

對(duì)某個(gè)滿足的條件進(jìn)行取反,過濾出來的數(shù)據(jù)就是用戶需要的。

下面過濾不屬于年齡大于20的數(shù)據(jù),語法格式如下:

select cname1,cname2,... from tname where not(cname operators cval) 
mysql> select * from user2;
+----+-------+-----+----------+-----+
| id | name | age | address | sex |
+----+-------+-----+----------+-----+
| 1 | brand | 21 | fuzhou | 1 |
| 2 | helen | 20 | quanzhou | 0 |
| 3 | sol | 21 | xiamen | 0 |
| 4 | weng | 33 | guizhou | 1 |
+----+-------+-----+----------+-----+
4 rows in set

mysql> select * from user2 where not(age>20);
+----+-------+-----+----------+-----+
| id | name | age | address | sex |
+----+-------+-----+----------+-----+
| 2 | helen | 20 | quanzhou | 0 |
+----+-------+-----+----------+-----+
1 row in set

模糊匹配

就像我們上面的那個(gè)用戶表信息表(包含名稱、年齡、地址、性別),當(dāng)我們要查詢名稱為s開頭的用戶時(shí),就可以用到 like 關(guān)鍵字了,他用以模糊匹配數(shù)據(jù)。

語法格式如下,pattern中可以包含通配符,有兩種。%:表示匹配任意一個(gè)或n個(gè)字符; _:表示匹配任意一個(gè)字符。

select cname1,cname2,... from tname where cname like pattern; 

%的使用

mysql> select * from user2;
+----+--------+-----+----------+-----+
| id | name | age | address | sex |
+----+--------+-----+----------+-----+
| 1 | brand | 21 | fuzhou | 1 |
| 2 | helen | 20 | quanzhou | 0 |
| 3 | sol | 21 | xiamen | 0 |
| 4 | weng | 33 | guizhou | 1 |
| 5 | selina | 25 | taiwang | 0 |
+----+--------+-----+----------+-----+
5 rows in set

mysql> select * from user2 where name like 's%';
+----+--------+-----+---------+-----+
| id | name | age | address | sex |
+----+--------+-----+---------+-----+
| 3 | sol | 21 | xiamen | 0 |
| 5 | selina | 25 | taiwang | 0 |
+----+--------+-----+---------+-----+
2 rows in set

_的使用

mysql> select * from user2;
+----+--------+-----+----------+-----+
| id | name | age | address | sex |
+----+--------+-----+----------+-----+
| 1 | brand | 21 | fuzhou | 1 |
| 2 | helen | 20 | quanzhou | 0 |
| 3 | sol | 21 | xiamen | 0 |
| 4 | weng | 33 | guizhou | 1 |
| 5 | selina | 25 | taiwang | 0 |
+----+--------+-----+----------+-----+
5 rows in set

mysql> select * from user2 where name like 's_l';
+----+------+-----+---------+-----+
| id | name | age | address | sex |
+----+------+-----+---------+-----+
| 3 | sol | 21 | xiamen | 0 |
+----+------+-----+---------+-----+
1 row in set

注意點(diǎn)

1、不要過度使用模糊匹配得通配符。如果其他操作符能達(dá)到相同的目的,應(yīng)該使用其他操作符

2、對(duì)大體量的表進(jìn)行模糊匹配的時(shí)候盡量不要以%開頭,比如 like '%username',這樣會(huì)執(zhí)行掃表,效率較慢。盡量明確模糊查找的開頭部分,比如 like 'brand%',會(huì)先定位到brand開頭的數(shù)據(jù),效率高很多。

范圍值檢查

BETWEEN AND(區(qū)間查詢)

操作符 BETWEEN … AND 會(huì)選取介于兩個(gè)值之間的數(shù)據(jù)范圍,這些值可以是數(shù)值、文本或者日期,屬于一個(gè)閉區(qū)間查詢。

and 的左邊val1 和 右邊 val2 分別表示兩個(gè)臨界值,等同于數(shù)學(xué)公式[val1,val2] ,屬于這兩個(gè)區(qū)間的數(shù)據(jù)會(huì)被過濾出來(>=val1 和 <=val2),所以語法格式如下:

 selec cname1,cname2,... from tname where cname between val1 and val2;
 等同于
 selec cname1,cname2,... from tname where cname >= val1 and cname <= val2;

查詢年齡在[21,25]之間的數(shù)據(jù):

mysql> select * from user2;
+----+--------+-----+----------+-----+
| id | name | age | address | sex |
+----+--------+-----+----------+-----+
| 1 | brand | 21 | fuzhou | 1 |
| 2 | helen | 20 | quanzhou | 0 |
| 3 | sol | 21 | xiamen | 0 |
| 4 | weng | 33 | guizhou | 1 |
| 5 | selina | 25 | taiwang | 0 |
+----+--------+-----+----------+-----+
5 rows in set

mysql> select * from user2 where age between 21 and 25;
+----+--------+-----+---------+-----+
| id | name | age | address | sex |
+----+--------+-----+---------+-----+
| 1 | brand | 21 | fuzhou | 1 |
| 3 | sol | 21 | xiamen | 0 |
| 5 | selina | 25 | taiwang | 0 |
+----+--------+-----+---------+-----+
3 rows in set

mysql> select * from user2 where age >= 21 and age <= 25;
+----+--------+-----+---------+-----+
| id | name | age | address | sex |
+----+--------+-----+---------+-----+
| 1 | brand | 21 | fuzhou | 1 |
| 3 | sol | 21 | xiamen | 0 |
| 5 | selina | 25 | taiwang | 0 |
+----+--------+-----+---------+-----+
3 rows in set

IN(包含查詢)

按照上面得數(shù)據(jù),如果我們想查出居住地位于福州和廈門得用戶數(shù)據(jù),應(yīng)該使用 IN操作符,因?yàn)?IN 操作符允許我們?cè)?WHERE 子句中指定多個(gè)值,符合這些值中得某一項(xiàng),既滿足條件返回?cái)?shù)據(jù)。

語法格式如下,in 后面列表的值類型必須一致或兼容,且不支持通配符:

select cname1,cname2,... from tname where cname in (val1,val2,...);
mysql> select * from user2;
+----+--------+-----+----------+-----+
| id | name | age | address | sex |
+----+--------+-----+----------+-----+
| 1 | brand | 21 | fuzhou | 1 |
| 2 | helen | 20 | quanzhou | 0 |
| 3 | sol | 21 | xiamen | 0 |
| 4 | weng | 33 | guizhou | 1 |
| 5 | selina | 25 | taiwang | 0 |
+----+--------+-----+----------+-----+
5 rows in set

mysql> select * from user2 where address in('fuzhou','xiamen');
+----+-------+-----+---------+-----+
| id | name | age | address | sex |
+----+-------+-----+---------+-----+
| 1 | brand | 21 | fuzhou | 1 |
| 3 | sol | 21 | xiamen | 0 |
+----+-------+-----+---------+-----+
2 rows in set

NOT IN(對(duì)包含查詢?nèi)》矗?/strong>

我們上面已經(jīng)學(xué)習(xí)過了not得用戶,對(duì)not后面執(zhí)行得表達(dá)式進(jìn)行取反得操作,測(cè)試下:

mysql> select * from user2;
+----+--------+-----+----------+-----+
| id | name | age | address | sex |
+----+--------+-----+----------+-----+
| 1 | brand | 21 | fuzhou | 1 |
| 2 | helen | 20 | quanzhou | 0 |
| 3 | sol | 21 | xiamen | 0 |
| 4 | weng | 33 | guizhou | 1 |
| 5 | selina | 25 | taiwang | 0 |
+----+--------+-----+----------+-----+
5 rows in set

mysql> select * from user2 where address not in('fuzhou','quanzhou','xiamen');
+----+--------+-----+---------+-----+
| id | name | age | address | sex |
+----+--------+-----+---------+-----+
| 4 | weng | 33 | guizhou | 1 |
| 5 | selina | 25 | taiwang | 0 |
+----+--------+-----+---------+-----+
2 rows in set

空值檢查

IS NULL/IS NOT NULL

判斷是否為空,語法格式如下,這邊注意的是,對(duì)值為null的數(shù)據(jù),各種比較運(yùn)算符、like、between and、in、not in查詢都不起作用,只有is null 能夠過濾出來。

 select cname1,cname2,... from tname where cname is null;
 或者
 select cname1,cname2,... from tname where cname is not null;
mysql> select * from user2 where address is null;
+----+--------+-----+---------+-----+
| id | name | age | address | sex |
+----+--------+-----+---------+-----+
| 5 | selina | 25 | NULL | 0 |
+----+--------+-----+---------+-----+
1 row in set

mysql> select * from user2 where address is not null;
+----+-------+-----+----------+-----+
| id | name | age | address | sex |
+----+-------+-----+----------+-----+
| 1 | brand | 21 | fuzhou | 1 |
| 2 | helen | 20 | quanzhou | 0 |
| 3 | sol | 21 | xiamen | 0 |
| 4 | weng | 33 | guizhou | 1 |
+----+-------+-----+----------+-----+
4 rows in set

有一種關(guān)鍵字 <=>,可以包含對(duì)null值得判斷,但是目前用的比較少了,有興趣可以去查查,這邊不贅述。

總結(jié)

1、like表達(dá)式中的%匹配一個(gè)到多個(gè)任意字符,_匹配一個(gè)任意字符

2、空值查詢需要使用IS NULL或者IS NOT NULL,其他查詢運(yùn)算符對(duì)NULL值無效。即使%通配符可以匹配任何東西,也不能匹配值NULL的數(shù)據(jù)。

3、建議創(chuàng)建表的時(shí)候,表字段不設(shè)置空,給字段一個(gè)default 默認(rèn)值。

4、MySQL支持使用NOT對(duì)IN 、BETWEEN 和EXISTS子句取反 。

到此這篇關(guān)于MySQL全面瓦解之查詢的過濾條件的文章就介紹到這了,更多相關(guān)MySQL查詢的過濾條件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL 中 FIELD() 自定義排序示例詳解

    MySQL 中 FIELD() 自定義排序示例詳解

    MySQL中的field()函數(shù),可以用來對(duì)SQL中查詢結(jié)果集進(jìn)行指定順序排序,這篇文章主要介紹了MySQL 中 FIELD() 自定義排序,需要的朋友可以參考下
    2024-05-05
  • MySQL創(chuàng)建索引/判斷索引是否生效的問題

    MySQL創(chuàng)建索引/判斷索引是否生效的問題

    這篇文章主要介紹了MySQL創(chuàng)建索引/判斷索引是否生效的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • MySQL Shell import_table數(shù)據(jù)導(dǎo)入的實(shí)現(xiàn)

    MySQL Shell import_table數(shù)據(jù)導(dǎo)入的實(shí)現(xiàn)

    這篇文章主要介紹了MySQL Shell import_table數(shù)據(jù)導(dǎo)入的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • MySQL 實(shí)用命令

    MySQL 實(shí)用命令

    對(duì)于剛接觸到mysql的朋友,需要的了解下,mysql的一些小技巧。
    2009-03-03
  • MySql行轉(zhuǎn)列&列轉(zhuǎn)行方式

    MySql行轉(zhuǎn)列&列轉(zhuǎn)行方式

    在MySQL數(shù)據(jù)庫(kù)管理中,行轉(zhuǎn)列和列轉(zhuǎn)行是常見的數(shù)據(jù)處理需求,行轉(zhuǎn)列通常涉及將表中的行數(shù)據(jù)按照某種規(guī)則轉(zhuǎn)換成列形式,常用于報(bào)表生成、數(shù)據(jù)分析等場(chǎng)景,列轉(zhuǎn)行則是將原本以列形式存儲(chǔ)的數(shù)據(jù)轉(zhuǎn)換成行形式,以便于進(jìn)行進(jìn)一步的數(shù)據(jù)處理或分析
    2024-11-11
  • MySQL獲取數(shù)據(jù)庫(kù)內(nèi)所有表格數(shù)據(jù)總數(shù)的示例代碼

    MySQL獲取數(shù)據(jù)庫(kù)內(nèi)所有表格數(shù)據(jù)總數(shù)的示例代碼

    在 MySQL 中,要獲取數(shù)據(jù)庫(kù)內(nèi)所有表格的數(shù)據(jù)總數(shù),可以編寫一個(gè)查詢腳本來遍歷每個(gè)表并計(jì)算其行數(shù),所以本文給大家介紹了MySQL獲取數(shù)據(jù)庫(kù)內(nèi)所有表格數(shù)據(jù)總數(shù)的示例,需要的朋友可以參考下
    2024-11-11
  • 如何使用Maxwell實(shí)時(shí)同步mysql數(shù)據(jù)

    如何使用Maxwell實(shí)時(shí)同步mysql數(shù)據(jù)

    這篇文章主要介紹了如何使用Maxwell實(shí)時(shí)同步mysql數(shù)據(jù),幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-04-04
  • Mac下mysql 5.7.13 安裝配置方法圖文教程

    Mac下mysql 5.7.13 安裝配置方法圖文教程

    這篇文章主要介紹了Mac下mysql 5.7.13 安裝配置方法圖文教程,內(nèi)容很詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Nacos配置MySQL8的方法

    Nacos配置MySQL8的方法

    這篇文章主要介紹了Nacos配置MySQL8的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • mysql實(shí)現(xiàn)隨機(jī)查詢經(jīng)驗(yàn)談

    mysql實(shí)現(xiàn)隨機(jī)查詢經(jīng)驗(yàn)談

    官方文檔中進(jìn)行說明:Order By和RAND()連用,會(huì)多次掃描表,導(dǎo)致速度變慢,下面看下一些測(cè)試詳解
    2013-10-10

最新評(píng)論

巴塘县| 江永县| 山阴县| 遵义县| 兴山县| 淳安县| 黑河市| 外汇| 无棣县| 棋牌| 河南省| 北海市| 榆林市| 手机| 收藏| 唐海县| 阳高县| 连江县| 靖西县| 彰武县| 沛县| 绥芬河市| 定远县| 龙口市| 丹阳市| 达拉特旗| 安义县| 郓城县| 临汾市| 喀什市| 兴文县| 大余县| 家居| 龙山县| 汤阴县| 吉林市| 屯门区| 博兴县| 宜兰市| 高州市| 义乌市|