[TOC=1,4]
>[success] # 條件查詢解釋
>數據庫表中一般包含大量的數據,很少需要查詢表中所有行,通常只會根據 特定的需要提取表中的一部分數據。這個時候需要指定查詢條件,即過濾條 件。
在 select 語句中,數據庫根據 where 子句中指定的查詢條件進行過濾。where 子句位于表名之后。
格
>[danger] #### 條件語法-where
`select * from 表 where 條件;`
<br>
* * * * *
>[danger] #### 條件的操作符號- between
| 符號 |含義 |
| --- | --- |
| = | 等于 |
| != | 不等于|
| < | 小于 |
| <= | 小于等于 |
| > | 大于 |
| > = | 大于等于 |
| is null | 是否為空 |
| Between....and... | 在兩者之間 |
**用法:**
```
1.select * from 列 where 列=1
2.select * from 列 where 列 between 值 and 值
3.select * from 列 where 列 is null
```
**注**:
1.between and 是包含臨界值的查詢
2.NULL 表示無值,它與字段包含 0、空字符串或空格是不同的。
<br>
* * * * *
>[danger] #### 條件操作符-AND/OR
`select * from 表 where 條件 and 條件 ;`
`select * from 表 where 條件 or 條件 ;`
**注:**
AND 的優先級高于 OR,當 AND/OR 中有多個條件的時候,需要使用()把 各個條件明確的分組,防止條件的錯誤組合導致返回的結果不正確。
**注明的例子講解**:
```
查詢1002或者1003 價格>=10的數據
1.SELECT prod_name,prod_price ,vend_id FROM products
WHERE (vend_id =1002 OR vend_id=1003) AND prod_price>=10;
查詢1002 和 1003中價格大于等于10的,根據and的優先大于 or
2..SELECT prod_name,prod_price ,vend_id FROM products
WHERE vend_id =1002 OR vend_id=1003 AND prod_price>=10;
```
<br>
* * * * *
>[danger] #### 條件操作符-in
>IN 操作符用來指定條件范圍,范圍中的每個條件都可以進行匹配。IN 取值包 含在圓括號中,以逗號分隔。
` select * from 表 where id in (11,22,33);`
`select * from 表 where id in (select nid from 表)`
**in 和 or 既然都表現其中一個滿足,那優缺點?**
```
a) IN 操作符的語法清晰直觀;
b) 計算次序容易管理;
c) IN 操作符一般比 OR 操作符執行速度更快;
d) IN 可以包含其他 select 語句,使得能夠動態地建立 where 子句。
```
<br>
* * * * *
>[danger] #### 條件操作符-not
>Where 子句中的 NOT 操作符只有一個功能,即否定它之后所跟的任何條件。
使用 NOT 很容易找出與條件列表不匹配的行。
| 組合 |解釋 |
| --- | --- |
| NOT IN |不在規定的范圍的數據 |
| NOT BETWEEN AND |不在兩者之間的數據 |
| IS NOT NULL |不為空 |
<br>
* * * * *
>[danger] #### 模糊查詢-like 和通配符 %/_
` select * from 表 where name like 'w%' - %開頭的所有(多個字符串)`
`select * from 表 where name like 'w_' - w開頭的所有(一個字符)`
**注解:**
1.% 匹配多個字符 %a% 匹配內容中有a的字符,前后不限字符
2.% 匹配多個字符 %a 匹配開頭任意字符,結尾a
3.% 匹配多個字符 a% 匹配開頭a,結尾任意字符
4._ 下滑線只匹配一個字符,兩個就雙下滑下一次類推
**注意**:
```
使用通配符會比沒有通配符更消耗數據庫執行查詢的時候
,應該在需 要使用通配符的地方才使用
```
<br>
* * * * *