MYSQL---查詢數據

查詢數據

1.基本查詢語句
select 屬性列表
from 表名和視圖列表
[where 條件表達式1]
[group by 屬性名1[having 條件表達式2]]
[order by 屬性名2[ASC|DESC]]
where子句表示按指定條件查詢;沒有的話就查詢所有記錄。
group by是按照屬性名指定的字段進行分組,如果有having關鍵字,則只輸出符合條件表達式2的信息。
order by是按照屬性名指定的字段進行排序。排序方式由ASC和DESC指定。
ASC表示按升序排列,DESC表示按降序排列,缺省是升序排列。
這裏寫圖片描述
2.單表查詢(只從一張表上查詢)

1)查詢所有字段

a)列出所有字段 select 屬性名1 屬性名2 屬性名3….from 表名 //可以改變字段的排列順序
b)使用查詢所有字段 select from 表名 //不能改變字段的排列順序

2)查詢指定字段(查詢的字段必須包含在表中)

在select的屬性列表中列出所要查詢的字段。select 屬性名1 屬性名2 from 表名

3)查詢指定記錄

where語句用來指定查詢條件,where子句中用到的查詢條件很多,如圖。
條件表達式設置的條件越多,查詢出來的記錄就越少,就越接近我們想查詢到的結果。

4)帶IN關鍵字的查詢

可以判斷某個字段的值是否在指定的集合中。在則會被查詢出來,不在則不會被查詢出來。
[not] IN (元素1,元素2…..)
eg:select * from employee where id [not] in (001,007);

5)帶between and 的範圍查詢(大於等於起始值,小於等於終止值)
判斷某個字段的值是不是在指定的範圍內,
[not]between 取值1(起始值) and 取值2(終止值);
eg:select * from employee where age [not] between 15 and 25;

6)帶LIKE的字符匹配查詢。可以匹配字符串是否相等。
[not] like ‘字符串’;
字符串可以是一個完整的字符串,也可以是包含 % 和 _ 的通配字符。
% 代表任意長度的字符。長度可以爲0;
_ 只能代表單個字符;

eg:select * from employee where name like ‘huan’;
相當於select * from employee where name=’huan’;
如果字符串中包含了通配符,就不能這樣(=)替換了。
需要匹配的字符串需要加引號,可以是雙引號也可以是單引號,如果匹配的時候是一個漢字,需要用兩個_來匹配。一個漢字是兩個字符。

7)查詢空值

is [not] null 來判斷字段的值是否爲空值。
eg:select * from employee where name is null;
is null是一個整體不能用=來替換is或 !=替換 is not null

8)帶and的多條件查詢

聯合多個條件進行查詢。只有同時滿足所有查詢條件的記錄會被查詢出來,如果不滿足這些查詢條件中的任意一個,則不會被查詢出來。
and可以連接兩個條件表達式,可以同時使用多個and關鍵字。
條件表達式1 and 條件表達式2 [and 條件表達式n……]
eg:select * from employee where name like ‘huan’ and sex=’女’;

9)帶or的多條件查詢

聯合多個條件進行查詢。只要同時滿足其中一個查詢條件的記錄會被查詢出來。
or可以連接兩個條件表達式,可以同時使用多個or關鍵字。
條件表達式1 or 條件表達式2 [or 條件表達式n……]
eg:select * from employee where name like ‘huan’ or sex=’男’;

or 和 and 可以一起使用,and 運算優先於or。and關鍵字前後的表達式先結合,再和or關鍵字的條件結合。

10)查詢結果不重複

如果某些字段沒有唯一性約束,就會有重複的值產生。可以使用distinct來消除字段中的重複記錄。

eg:select distinct id from employee

11)對查詢結果排序,對記錄進行排序。

order by 屬性名 [asc|desc]
eg: select * from employee order by age asc;年齡升序排列;
若存在age字段爲空值,升序則最先顯示,降序則在最後顯示。
可以指定多個字段進行排序,當年齡相等時,把年齡相等的記錄按id排序。
eg: select * from employee order by age asc ,id asc;

12)對查詢結果分組

1)單獨使用group by 關鍵字來分組。
將查詢結果按某個字段或者多個字段進行分組。字段中值相等的爲一組。
group by 屬性名 [having 條件表達式] [with rollup];
屬性名是指按照字段的值分組
Having 用來限制分組後的顯示,滿足表達式的結果將會被顯示
with rollup將會在所有記錄的最後加上一條記錄。該記錄是上面所有記錄之和。
group by 經常和集合函數 count(),sum(),avg(),max(),min()一起使用.
如果不與上述函數一起使用,則查詢結果就是字段取值的分組。
eg: select * from employee group by sex;
group by 單獨使用時,只查詢出每個分組的一條記錄。使用的意義不大,因此一般和集合函數一起使用。

2)group by與 group_contact()函數一起使用。每個分組中指定的字段值都會顯示出來。
eg: select sex group_contact(name) from employee group by sex;
取值爲女的是一組,取值爲男的是一組,並且每個人姓名都顯示出來。

3)與集合函數一起使用。可以計算出分組中的總記錄,最大值,最小值等。

eg: select sex count(sex) from employee group by sex;分別查詢出男女不同記錄數目。

4)與having 一起使用,輸出符合條件的記錄,限制查詢結果的顯示。
eg: select sex count(sex) from employee group by sex having count(sex)>3;查詢出記錄數目大於3的分組。
where字句用來限制表和視圖的結果顯示,Having用於分組後的記錄,選擇滿足條件的組。

5)按多個字段進行分組。

當某一個字段相等時,再按另一個字段分組。
eg: select * from employee group by sex,age;

6)group by 與with rollup一起使用

with rollup將會在所有記錄的最後加上一條記錄。該記錄是上面所有記錄之和。
select sex count(sex) from employee group by sex with rollup;

7)使用limit限制查詢結果的數量。

查詢數據時,可能會查出很多的記錄,但用戶需要的記錄只是很少的一部分,這樣就需要來限制查詢結果的數量。
limit關鍵字有兩種使用方式,一種是指定初始位置,一種是不指定初始位置。

a)不指定初始位置
不指定初始位置的時候,從第一條記錄開始顯示,顯示記錄的條數由limit關鍵字指定。
limit 記錄數;
當記錄數 > 查詢結果的總記錄數,顯示所有查詢到的記錄;
當記錄數 < 查詢結果的總記錄數,顯示指定條數的記錄;
eg: select * from employee limit 2;//顯示前兩條記錄

b)指定初始位置
可以指定查詢結果從從哪條記錄開始顯示,顯示多少條記錄。
limit 初始位置,記錄數;
eg: select * from employee limit 0,2;//顯示前兩條記錄

limit關鍵字是MYSQL特有的。0表示第一條記錄。
比如,如果需要查詢成績前十名的同學,我們可以用order by將成績降序排列,再用limit輸出前十條記錄。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章