您好,登錄后才能下訂單哦!
select語句執行流程:
START------>1.FROM
------>2.WHERE(選擇,合適的行)
------>3.GROUP BY(分組)
------>4.HAVING(對分組進行過濾)
------>5.ORDER BY(排序)
------>6.SELECT(投影,合適的字段)
------>7.LIMIT ------>end result
select單表查詢:
關鍵字:
DISTINCT #數據去重 例:select DISTINCT gender from students; VARIABLES #mysql服務器自身內置變量 例:select variables like 'query%'; AS #顯示時使用別名 例:select name as stuname from students; IN 例:select name,age from students where age in (18,19,25); IS NULL #取值為空,IS NOT NULL: 取值不為空 like #%任意長度任意字符 _任意單個字符 RLIKE #使用正則表達式 GROUP #根據指定的條件把查詢結果進行分組以用于做聚合運算 內置函數:avg() , max() , min() , count() , sum() order by #根據指定字段對查詢結果進行排序 升序:ASC(默認) 降序:DESC LIMIT [[offset,]row_count] #對查詢的結果進行輸出行數數量的限制 對查詢結果中的數據請求施加‘鎖’: FOR UPDATE :寫鎖,獨占鎖,排他鎖 LOCK IN SHARE MODE :讀鎖,共享鎖
例:查看男女同學的平均年齡
select avg(age),gender from students group by gender ;
例:查看平均年齡大于20的性別
select avg(age),gender as '年齡' from students group by gender having 年齡>20;
例:查看姓名,年齡以年齡倒序排序
select name,age from students order by age desc;
例:年齡從小到大查看排名11至20的同學的姓名
select name,age from students order by age limit 10,10 ;
練習題:
1. 在students表中,年齡大于25,且為男性的同學的姓名和年齡
select name,age from students where gender='m' and age>25;
2. 以classID為分組依據,顯示每組的平均年齡
select avg(age),classID from students where classID is not null group by classID;
3. 顯示第二題中平均年齡大于30的分組及平均年齡
select avg(age),classID from students group by classID having avg(age)>30;
4. 顯示名字以L開頭的同學的相關信息
select * from students where name like 'L%';
5. 顯示teacherID非空的同學的相關信息
select * from students where teacherID is not null;
6. 以年齡排序后顯示年齡最大的前10位同學的信息
select * from students order by age DESC limit 10;
7. 查詢年齡大于等于20歲,小于等于25歲的同學的信息,用三種方法
select * from students where age>=20 and age<=25; select * from students where age between 20 and 25; select * from students where age in (20,21,22,23,24,25);
select多表查詢:
交叉連接:又稱笛卡爾乘積,結果兩表行數相乘(不常用)。 例:select * from table1,table2; 內連接: 等值連接求交集,讓兩張或多張表按“等值”建立連接關系(常用) 外連接: 又分左連接(顯示所有左邊給定所有字段和右邊與左邊指定字段內容相同的),右連接。
例:
select * from students,teachers where students.teacherID=teachers.TID ; #相當于內連接 select s.name,c.class from students as s,classes as c where s.classID=c.classID;
不等值連接:
自然連接:
自連接:一張表中一個字段的值等于另一個字段的值。
例:
select s.name,t.name from students as s,teacher as t where s.TeacherID=t.stuID;
外連接:
左外連接:以左側表為準,以某一字段等值建立連接關系,如左表有的右表也有就一一對應,如左表有右表沒有左表顯示所有,右表留空對應。(顯示左表所有,右表有的就對應沒有就留空)
使用方法:FROM tb1 LEFT JOIN tab2 ON tab1.col1=tab2.col;
例:
select s.name,c.class from students as s LEFT JOIN classes as c ON s.classID=c.classID;
右外連接:
使用方法:FROM tb1 RIGHT JOIN tab2 ON tab1.col1=tab2.col
子查詢:在查詢語句中嵌套著查詢語句(mysql支持不好,少用)
基于某語句結果再次進行查詢
用在where子句中的子查詢:
(1) 用在比較表達式中的子查詢,子查詢僅能返回單個值:
例查找大于平均年齡的同學名字和年齡:
select name,age from students where age>(select avg(age) from students);
(2)用在IN中的子查詢:子查詢應該單鍵查詢并返回一個或多個值構成列表
例:查找老師年齡和同學年齡相等的
select name,age from students where age in (select age from teachers);
(3)用于EXISTS
用于from子句中的子查詢:
例查找平均年齡是30的班級:
select s.aage,s.classID from (select avg(age) as aage,classID from students where classID is not null group by classID) as s where s.aage=30;
聯合查詢:把兩個表查詢的結果合并成一個。以前面表的字段為準,后面的表填充內容。
例:
select name,age from students UNION select name,age from teachers;
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。