mysql怎么滤空_《MySQL 入门教程》第 08 篇 过滤条件
文章來(lái)源:《MySQL 入門(mén)教程》第 08 篇 過(guò)濾條件
原文作者:不剪發(fā)的Tony老師
來(lái)源平臺(tái):CSDN
上一篇我們學(xué)習(xí)了如何使用 SELECT 和 FROM 查詢表中的數(shù)據(jù)。很多時(shí)候,我們并不需要查看全部數(shù)據(jù),更多的則是滿足指定條件的數(shù)據(jù);此時(shí),我們就需要利用 WHERE 子句來(lái)實(shí)現(xiàn)數(shù)據(jù)的過(guò)濾。
8.1 簡(jiǎn)單條件
MySQL 中的 WHERE 子句可以用于指定一個(gè)查詢條件,只有滿足條件的數(shù)據(jù)才會(huì)返回。指定 WHERE 子句的語(yǔ)法如下:
SELECT col1, col2, ...
FROM table_name
WHERE conditions;
其中,conditions 是一個(gè)邏輯表達(dá)式,它的結(jié)果可能為 TRUE(1)、FALSE(0)或者 UNKNOWN(NULL)。對(duì)于表中的數(shù)據(jù)行,只有表達(dá)式為 TRUE 的才會(huì)返回。例如,以下查詢只返回月薪大于 10000 的員工姓名:
select emp_name, salary
from employee
where salary > 10000;
emp_name|salary |
---------|--------|
劉備 |30000.00|
關(guān)羽 |26000.00|
張飛 |24000.00|
諸葛亮 |25000.00|
孫尚香 |12000.00|
趙云 |15000.00|在 SQL 定義中,WHERE 子句也被稱為謂詞(predicate)。
以上示例中的大于號(hào)(>)是一個(gè)比較運(yùn)算符,用于判斷 salary 是否大于 10000。
除了大于號(hào)之外,MySQL 還支持以下比較運(yùn)算符:等于(=)、不等于(<> 或者 !=)、大于等于(>=)、小于(
select emp_name, hire_date
from employee
where emp_name = '張飛';
emp_name|hire_date |
---------|----------|
張飛 |2000-01-01|
另外,BETWEEN 運(yùn)算符可以用于判斷數(shù)據(jù)是否位于某個(gè)范圍之內(nèi)。例如,以下查詢返回 2002 年入職的員工:
select emp_name, hire_date
from employee
where hire_date between '2002-01-01' and '2002-12-31';
emp_name|hire_date |
----------|----------|
孫尚香 |2002-08-08|
孫丫鬟 |2002-08-08|
BETWEEN 運(yùn)算符包含了兩端的值,所以上面的示例查詢的是 2002 年入職的員工。
除此之外,IN 運(yùn)算符可以用于判斷數(shù)據(jù)是否位于某個(gè)列表之中。例如,以下查詢返回了編號(hào)為 1、2 或者 3 的員工:
select emp_name, hire_date
from employee
where emp_id IN (1, 2, 3);
emp_name|hire_date |
---------|----------|
劉備 |2000-01-01|
關(guān)羽 |2000-01-01|
張飛 |2000-01-01|
BETWEEN 運(yùn)算符包含了兩端的值,所以上面的示例查詢的是 2002 年入職的員工。
除此之外,IN 運(yùn)算符可以用于判斷數(shù)據(jù)是否位于某個(gè)列表之中。例如,以下查詢返回了編號(hào)為 1、2 或者 3 的員工:
select emp_name, hire_date
from employee
where emp_id IN (1, 2, 3);
emp_name|hire_date |
---------|----------|
劉備 |2000-01-01|
關(guān)羽 |2000-01-01|
張飛 |2000-01-01|
只要數(shù)據(jù)和 IN 列表中的任意值相等,就表示滿足條件。IN 運(yùn)算符中除了直接給出列表之外,還可以使用子查詢返回一個(gè)結(jié)果集,這種用法我們?cè)诤竺娴淖硬樵冎羞M(jìn)行演示。
8.2 空值判斷
在數(shù)據(jù)庫(kù)中,空值(NULL )表示缺失或者未知的數(shù)據(jù),它不等于 0 或者空字符串。對(duì)于空值的判斷,不能使用普通的等于或者不等于,而需要使用特殊的 IS NULL 和 IS NOT NULL 運(yùn)算符。例如:
select null is null, null = 0, null = null, null != null;
null is null|null = 0|null = null|null != null|
------------|--------|-----------|------------|
1| | | |
只有 null is null 的結(jié)果為 True(MySQL 使用 1 表示 True,0 表示 False);null = 0 的結(jié)果是未知(Unknown),因?yàn)槲粗獢?shù)據(jù)和 0 比較的結(jié)果也是未知;null = null 和 null != null 的結(jié)果都是未知。
以下查詢返回了沒(méi)有上級(jí)領(lǐng)導(dǎo)的員工:
select emp_name, manager
from employee
where manager is null;
emp_name|manager|
---------|-------|
劉備 | |
如果想要查詢存在上級(jí)領(lǐng)導(dǎo)的員工,可以使用 IS NOT NULL 運(yùn)算符:
select emp_name, manager
from employee
where manager is not null;
除了 IS [NOT] NULL 運(yùn)算符之外,MySQL 還提供了一個(gè)空值判斷的函數(shù):ISNULL(expr)。如果 expr 為空值,該函數(shù)返回 1;否則,返回 0。例如:
SELECT isnull(0), isnull(null);
isnull(0)|isnull(null)|
---------|------------|
0| 1|
另外,MySQL 還提供了一個(gè)支持 NULL 值的比較運(yùn)算符:<=>。例如:
select 0 <=> 0, null <=> null, 0 <=> null;
0 <=> 0|NULL <=> NULL|0 <=> NULL|
-------|-------------|----------|
1| 1| 0|
對(duì)于非空的數(shù)據(jù),<=> 相當(dāng)于普通的 = 運(yùn)算符;對(duì)于兩個(gè) NULL 值,返回 1;對(duì)于一個(gè) NULL 值,返回 0。MySQL 中的 <=> 運(yùn)算符等價(jià)于 SQL 標(biāo)準(zhǔn)中的 IS NOT DISTINCT FROM 運(yùn)算符。
8.3 復(fù)合條件
除了使用單個(gè)查詢條件之外,MySQL 還支持利用邏輯運(yùn)算符將多個(gè)查詢條件進(jìn)行組合:AND,邏輯與運(yùn)算符。當(dāng)兩個(gè)表達(dá)式的值都為真時(shí)結(jié)果才為真;
OR,邏輯或運(yùn)算符。只要有一個(gè)表達(dá)式的值為真結(jié)果就為真;
NOT,邏輯非運(yùn)算符。如果表達(dá)式的值為真,結(jié)果為假;如果表達(dá)式的值為假,結(jié)果為真;如果表達(dá)式的值為 NULL,結(jié)果為 NOT NULL;
XOR,邏輯異或運(yùn)算符。只要有一個(gè)表達(dá)式的值為 NULL,結(jié)果就為 NULL;如果一個(gè)表達(dá)式的值為假,另一個(gè)表達(dá)式為真,結(jié)果就為真;否則結(jié)果為假。
以下查詢返回了 2011 年之后入職的女性員工:
select emp_name, sex, hire_date
from employee
where sex = '女'
and hire_date >= '2011-01-01';
emp_name |sex |hire_date |
---------|----|----------|
趙氏 |女 |2011-11-10|
以下查詢返回了所有女性員工以及 2011 年之后入職的員工:
select emp_name, sex, hire_date
from employee
where sex = '女'
or hire_date >= '2011-01-01';
emp_name |sex |hire_date |
----------|----|----------|
孫尚香 |女 |2002-08-08|
孫丫鬟 |女 |2002-08-08|
關(guān)平 |男 |2011-07-24|
趙氏 |女 |2011-11-10|
關(guān)興 |男 |2011-07-30|
...
以下查詢返回了不是 2002 年入職的員工:
select emp_name, hire_date
from employee
where hire_date not between '2002-01-01' and '2002-12-31';
emp_name|hire_date |
---------|----------|
劉備 |2000-01-01|
關(guān)羽 |2000-01-01|
張飛 |2000-01-01|
諸葛亮 |2006-03-15|
黃忠 |2008-10-25|
NOT 運(yùn)算符可以對(duì)其他運(yùn)算符的結(jié)果取反,例如,NOT IN 運(yùn)算符返回不在列表中的數(shù)據(jù)。
對(duì)于邏輯運(yùn)算符,MySQL 使用短路運(yùn)算(short-circuit)。只要左邊的表達(dá)式可以決定最終的結(jié)果,就不會(huì)計(jì)算右邊的表達(dá)式。例如:
select 1 = 0 and 1 / 0;
1 = 0 and 1 / 0|
---------------|
0|
因?yàn)?1 = 0 的結(jié)果為 False,AND 運(yùn)算符的結(jié)果肯定就是 False;所以不會(huì)計(jì)算 1 / 0,也就不會(huì)返回除零錯(cuò)誤。
8.4 排除重復(fù)值
DISTINCT 是一個(gè)特殊的運(yùn)算符,可以排除查詢結(jié)果中的重復(fù)記錄:
SELECT [ALL | DISTINCT] col1, col2, ...
FROM table_name;
ALL 表示返回全部結(jié)果,DISTINCT 表示返回字段組合結(jié)果中的不同值。默認(rèn)選項(xiàng)為 ALL。
例如:
select sex
from employee;
sex|
----|
男 |
男 |
男 |
男 |
男 |
男 |
...
select distinct sex
from employee;
sex|
----|
男 |
女 |
對(duì)于 DISTINCT 而言,所有的 NULL 值都相同。例如:
select distinct bonus
from employee;
bonus |
--------|
10000.00|
8000.00|
|
5000.00|
6000.00|
2000.00|
1500.00|
很多員工的 bonus 都為空,但是查詢結(jié)果中只返回了一個(gè) NULL 值。DISTINCTROW 是 DISTINCT 的同義詞。
如果你在學(xué)習(xí)過(guò)程中遇到任何問(wèn)題,歡迎留言提問(wèn),不用客氣!
總結(jié)
以上是生活随笔為你收集整理的mysql怎么滤空_《MySQL 入门教程》第 08 篇 过滤条件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: vscode 全项目替换_利用vscod
- 下一篇: mysql版本的索引类型_【mysql】