一、基本查詢語句 select的基本語法格式如下: select 屬性列表 from 表名和視圖列表 [ where 條件表達式1 ] [ group by 屬性名1 [ having 條件表達式2 ] ] [ order by 屬性名2 [ asc | desc ] ] 屬性列表參數表示需要查詢的字段名; 表名和視圖列表參數表示從此處指定的表或者視圖中查詢數據,表和視圖可以有多個; 條件表達式1參數指定查詢條件; 屬性名1參數指按照該字段的數據進行分組; 條件表達式2參數滿足該表達式的數據才能輸出; 屬性名2參數指按照該字段中的數據進行排序;排序方式由asc和desc這兩個參數指出; asc參數表示升序,這是默認參數,desc表示降序;(升序表示從小到大) 對記錄沒有指定是asc或者desc,默認情況下是asc; 如果有where子句,就按照“條件表達式1”指定的條件進行查詢;如果沒有where子句,就查詢所有記錄; 如果有group by子句,就按照“屬性名1”指定的字段進行分組,如果group by后面帶having關鍵字,那么只有 滿足“條件表達式2”中知道的條件才能輸出。group by子句通常和count()、sum()等聚合函數一起使用; 如果有order by子句,就按照“屬性名2”指定的字段進行排序,排序方式由asc和desc兩個參數指出;默認情況下是asc;
前提准備:
create table student( sid varchar(50), sname varchar(50), sage varchar(50), ssex varchar(50) ); insert into student( sid,sname,sage,ssex ) values('1','zhaolei','1990-01-01','nan'); insert into student values('2','qiandian','1990-12-21','nan'); insert into student values('3','sunfeng','1990-05-20','nan'); insert into student values('4','liyun','1990-08-06','nan'); insert into student values('5','zhoumei','1991-12-01','nv'), ('6','wulan','1992-03-01','nv'), ('7','zhenzu','1989-07-01','nv'), ('8','wangju','1990-01-20','nv'); select * from student;
一、查詢所有字段
(1)、列出表的所有字段
(2)、使用 ‘ * ’ 查詢所有字段:select * from 表名;
select sid,sname,sage,ssex from student; select * from student;
二、查詢指定字段
查詢數據時,可以在select語句的‘屬性列表’中列出 所有查詢的指定字段。這種方式可以指定需要查詢的字段,而不需要查詢出所有的字段;
查詢出來的字段的順序與select中給出的字段的排列順序相同。
select sid,sname,ssex,sage from student;
示例02:
select sid,sname from student;
三、查詢指定記錄
即按照條件進行查詢: where 條件表達式;
查詢的結果必須滿足查詢條件。
where子句可以用來指定查詢條件 語法格式:where 條件表達式 其中條件表達式參數指定select語句的查詢條件; where子句常用的查詢條件又很多種,如下表示: 比較 =、<、>、<=、>=、…… 指定范圍 between and、not between and 指定集合 in、not in 匹配字符 like 、 not like 是否為空值 is null 、 is not null 多個查詢條件 and、or
執行語句:
select * from student where sid = '1';
四、帶in關鍵字的查詢
in關鍵字可以判斷某個字段的值是否在指定的集合中。
語法格式:[not] in (元素1,元素2,……元素n);
注釋:各個元素之間用逗號隔開
執行語句:
select * from student where sid in ('2','3','5') select * from student where sid not in ('2','3','5')
五、帶between and的范圍查詢
between and關鍵字可以判斷某個字段的值是否在指定范圍內。
語法格式:[not] between 取值1 and 取值2;
其中not是可選參數,加上not表示不在指定范圍內滿足條件;
“取值1”表示范圍的起始值;“取值2”表示范圍的終止值;
執行語句:
select * from student where sid BETWEEN '2' and '5'; select * from student where sid not BETWEEN '2' and '5';
六、帶like的字符匹配查詢
like關鍵字可以匹配字符串是否相等。
語法格式:[not] like '字符串';
not是可選參數,加上not表示與指定的字符串不匹配時滿足條件;
字符串表示指定用來匹配的字符串,該字符串必須添加單引號或者雙引號。
字符串參數的值可以是一個完整的字符串,也可以是包含%或者_的通配符;
%可以代表任意長度的字符串,長度可以為0,
舉例:b%k表示以字母b開頭,以字母k結尾的任意長度的字符串;該字符串可以代表bk,buk,book,break等字符串;
_只能代表單個字符;
舉例:b_k表示以字母b開頭,以字母k結尾的長度為3的字符串。中間的_可以代表任意一個字符串;
舉例:select * from employee where name like 'aric';
此處查詢出name='aric'的記錄,這里like相當於=
注意一個漢字是2個字符串,要用2個--
執行語句:
select * from student where sname like 'zhao%'; select * from student where sname not like 'zhao%';
七、查詢空值
is null關鍵字可以用來判斷字段的值是否為空值。
語法格式:is [not] null;
執行語句:
select * from student where sname is null; select * from student where sname is not null;
八、帶and的多條件查詢
and關鍵字可以聯合多個條件進行查詢,使用and關鍵字時,只有同時滿足所有查詢條件的記錄才會被查詢出來;
語法格式:條件表達式1 and 條件表達式2 […… and 條件表達式n]
執行語句:
select * from student where sid < 4 and ssex = 'nan';
九、帶or的多條件查詢
使用or關鍵字時,只要滿足這幾個查詢條件中的一個,這樣的記錄將會被查詢出來,如果不滿足這些查詢條件的任何一個,這樣的記錄將會被排除
語法格式:條件表達式1 or 條件表達式2 [ ……or 條件表達式n ]
注意:and 和 or 關鍵字一起使用時,and比or要先運算,and關鍵字前后的條件先結合,然后再與or關鍵字的條件結合。
執行語句:
select * from student where sid < 4 or ssex = 'nan';
十、查詢結果不重復
如果表中的某些字段沒有唯一性約束,這些字段可能存在着重復的值。
select語句中可以使用distinct關鍵字來消除重復的記錄;
語法格式: select distinct 屬性名
select distinct ssex from student;
十一、對查詢結果排序
使用order by關鍵字對記錄進行排序
語法格式:order by 屬性名 [ asc|desc ]
屬性名參數表示按照該字段進行排序;
asc參數表示按照升序的順序進行排序;
desc參數表示按照降序的順序進行排序;
默認情況下按照asc方式進行排序;
舉例:select * from employee order by age desc;
注意:如果記錄中存在一條記錄,其age字段的值是空值(null),則這條記錄將會顯示為第一條記錄,因為按照升序排序時,
含空值的記錄將最先顯示,可以理解為空值是該字段的最小值;而按照降序排序時,age字段為空值的記錄將最后顯示;
MYSQL中,可以指定按照多個字段進行排序,
舉例:select * from employee order by d_id asc,age desc;
查詢employee表中的所有記錄,按照d_id字段的升序方式和age字段的降序方式進行排序
查詢結果排序時,先按照d_id字段的升序方式進行排序,如果有多個d_id字段的值相同,則這幾個記錄再按照age字段進行降序排列;
執行語句:
select * from student order by sid desc;
十二、用limit限制查詢結果的數量
limit關鍵字可以指定查詢結果從哪條記錄開始顯示,還可以指定一共可以顯示多少條記錄。
limit關鍵字有兩種使用方式。分別是不指定出事位置和指定初始位置。
(1)不指定初始位置
limit關鍵字不指定初始位置時,記錄從第一條記錄開始顯示。顯示的記錄條數由limit關鍵字指定
語法格式:limit 記錄數
記錄數參數表示顯示記錄的條數
注釋:如果“記錄數”的值小於查詢結果的總記錄數,將會從第一條記錄開始顯示,顯示指定條數的記錄;
如果“記錄數“的值大於查詢結果的總記錄數,數據庫系統會顯示查詢出的所有記錄
舉例:select * from employee limit 2;
舉例:select * from employee limit 10;
雖然limit關鍵字指定了10條記錄,但是查詢結果中只有4條記錄,因此數據庫系統會顯示全部4條記錄;
(2)指定初始位置
limit關鍵字可以指定從哪條記錄開始顯示,並且可以指定顯示多少條記錄
語法格式:limit 初始位置,記錄數
初始位置指定從哪條記錄開始顯示;
記錄數表示顯示記錄的條數;
第一條記錄的位置是0,第二條記錄的位置是1,后面以此類推;
執行語句:不指定初始位置
select * from student limit 3;
執行語句:指定初始位置
select * from student limit 1,3;