您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關MySQL中常用的查詢子句有哪些的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
對于數據分析,MySQL多采用查詢,如數據的排序、分組、去重、匯總、字符串匹配等。如果查詢的數據涉及多個表,則需要連接這些表。
MySQL中常用的查詢子句:
*1、 *排序:order by
排序是通過順序實現的,例如,從stuinfo表中查詢數據并按年齡排序。sql語句是:
select * from stuinfo order by age;
查詢結果:
可以看到,查詢結果是按照年齡進行升序排列的,如果要實現降序排列,只需要在后面加上desc即可,sql語句為:
select * from stuinfo order by age desc;
查詢結果:
此時的查詢結果按照年齡降序排列。
以上是針對數值型數據排序,如果是字符串,也可以用order by進行排序,例如,按照姓名排序,sql語句為:
select * from stuinfo order by stuname;
查詢結果:
從上面可以看到,字符串排序其實是按照首字母進行升序排列,當然還可以對日期進行排序,請自行思考。
*2、 *分組:group by
分組通過group by子句實現,例如,按照性別分組,sql語句為。
select gender,count(*) from stuinfo group by gender;
查詢結果:
以上sql語句按照性別分組,并給出每組的人數,按照其他字段分組也是類似的。
*3、 *去重:distinct
去重是數據處理中常見的操作,通過distinct子句實現,例如查詢學員所在的所有城市,這就需要去重,因為有些學員在同一個城市。
sql語句為:
select distinct city from stuinfo;
查詢結果:
可以看到,去重就是在去重字段前加上distinct即可。
*4、 *空值:is null/is not null
空值就是判斷某個字段為空或者不為空的記錄,例如,查詢城市為空的記錄,sql語句為:
select * from stuinfo where city is null;
查詢結果:
可以看到,查詢為空的記錄其實就是where條件后跟is null。
反過來,如果查詢城市不為空的記錄,跟上is not null即可,sql語句為:
select * from stuinfo where city is not null;
查詢結果:
*5、 *匯總:計數、最值、求和、均值
匯總其實就是計數、求最大值/最小值、求和、求均值等。
最常用的統計表中有多少記錄,通過count實現,sql語句為:
select count(*) from stuinfo;
查詢表中某個字段的最大值/最小值,通過max/min實現,例如查詢最大年齡,sql語句為:
select max(age) from stuinfo;
查詢結果:
接下來的一個問題:查詢年齡最大的學員的姓名,sql語句怎么寫?
這是一個條件查詢,條件就是年齡要等于最大的年齡,按照這個思路,寫出sql語句:
select stuname,age from stuinfo where age=(select max(age) from stuinfo);
查詢結果:
從上面可以看到,其實是把最大的年齡查詢出來作為條件,再查詢對應的姓名和年齡。
留個思考題: 如何查詢年齡最小的學員姓名?
求和,用sum即可,一定是對數值型數據求和,跟count類似,這樣不做演示。
最后是均值,用avg,例如,查詢所有學員的平均年齡,sql語句為:
select avg(age) from stuinfo;
查詢結果:
*6、 *別名:as
別名,就是as,意為用作,例如,查詢出年齡的最大值、最小值和均值,sql語句為:
select max(age),min(age),avg(age) from stuinfo;
查詢結果:
這樣顯示字段名不太好看,我們可以用as起一個別名,sql語句為:
select max(age) as age_max,min(age) as age_min,avg(age) as age_avg from stuinfo;
查詢結果:
*7、 *表的連接
當要查詢的記錄涉及兩個或者兩個以上的表時,就需要表的連接。
表的連接有三種:內連接、左連接和右連接。
(1)內連接:inner join
內連接相當于兩個表的交集,如下圖所示。
例如,有兩個表:學員信息表和成績表,有一個共同的列:學號。
現在想查詢出每個學員的姓名和成績,查詢結果如下圖所示。
以上查詢結果中的姓名需要從第一個表中提取,成績需要從第二個表中提取,這叫表的連接。
因為學號是共同的列,所以根據學號連接,以上的這種連接方式是獲取兩個表中學號相同的記錄,叫作內連接。
具體的sql語句為:
select sname,score fromtb1 inner join tb2 on tb1.sid=tb2.sid;
查詢結果:
需要注意的是,連接條件用on。
(2)左連接:left join
左連接是以左表為基準,去匹配右表中的記錄,如果右表中沒有對應匹配記錄則為空。
左連接用集合中的文氏圖表示如下。
還是用以上提到的學員信息表和成績表,左連接的示意圖如下。
左連接的sql語句為:
select sname,score fromtb1 left join tb2 on tb1.sid=tb2.sid;
查詢結果:
(3)右連接:right join
右連接是以右表為基準,去匹配左表中的記錄,如果左表中沒有對應匹配記錄則為空。
右連接用集合中的文氏圖表示如下。
還是用以上提到的學員信息表和成績表,右連接的示意圖如下。
右連接的sql語句為:
select sname,score fromtb1 right join tb2 on tb1.sid=tb2.sid;
查詢結果:
*8、 *字符串匹配:like
有時候在字符串查找時,需要查找符合某個匹配模式的字符串。
例如,在表stuinfo中,查找城市中含有字符串‘an’的記錄,sql語句為:
select * from stuinfo where city like '%an%';
注意:匹配模式中的%表示匹配任意長度的任意字符串。
*9、 *集合:in
查找屬于某個集合的記錄用in。
例如,查找城市為北京或者天津的記錄,sql語句為:
select * from stuinfo where city in('Beijing','Tianjin');
查詢結果:
*10、 *條件語句:having
這里說的條件語句是having,跟where類似,但是一般和統計函數連用。
比如,查找平均年齡小于25歲的城市,sql語句為:
select city from stuinfo group by city having avg(age)<25;
查詢結果:
以上sql語句先按照城市分組,再跟條件語句having。
*11、 *區間查找:between and
between and用于查找符合某個區間(包含兩個邊界的值)的記錄。
例如,查找年齡介于20到30歲之間的記錄,sql語句為:
select * from stuinfo having age between 20 and 30;
查詢結果:
*12、 *聯結:union
聯結,也叫聯合,用于連接兩個查詢的結果,并且去重。
例如,兩個表中都有學號,用sql語句分別從這兩個表中查詢出學號,然后聯結。
select sid from tb1unionselect sid from tb2;
查詢結果:
以上sql語句相當于將兩個select語句的查詢結果用union合并,并且是去重合并。
如果不想去重,用union all即可,sql如下。
select sid from tb1union allselect sid from tb2;
查詢結果:
*13、 *日期格式化:date_format
在SQL中,對于日期時間的處理也是很常見的問題。
例如,按照年份、月份或者日期等對數據進行分組匯總,就需要從日期時間中提取年份、月份及日期等。
舉個例子,獲取每個學員的出生年份,sql語句為:
select date_format(birthdate,'%Y') as birth_year from stuinfo;
查詢結果:
獲取出生月份也是如此,只是參數用'%m',sql語句為:
select date_format(birthdate,'%m') as birth_year from stuinfo;
查詢結果:
獲取到年份、月份后,就可以按照年份、月份進行分組查詢統計了。
*14、 *條件分支:case語句
條件分支是數據統計中的一個很重要的應用,在MySQL中用case語句表達條件分支,case語句有以下兩種用法。
用法一:
例如,根據學員所處的城市,將記錄標記為一線城市及其他,sql語句為:
select distinct city, case city when 'Beijing' then '一線城市' when 'Shanghai' then '一線城市' else '其他' end as city_level from stuinfo;
查詢結果:
從上面看到,case后面跟的是要判斷的字段,when后跟的是不同的情況,then則是不同情況對應的類別,最后的else表示其他情況。
整個case語句相當于給原來的表增加一個字段:city_level,然后我們可以根據這個字段進行分組查詢。
用法二:
例如,根據學員的年齡進行分層,青年、中年及其他,sql語句為:
select stuname,age, case when age<30 then '青年' when age>=30 and age<35 then '中年' else '其他' end as age_level from stuinfo;
查詢結果:
從上面可以看到,case后面跟的是條件when,即年齡滿足什么條件時,將其劃分到對應的類別,最后的else表示其他情況。
整個case語句相當于給原來的表增加一個字段:age_level,然后我們可以根據這個字段進行分組查詢。
*15、 *變量
最后,談談MySQL中的變量,當然,MySQL中的變量有好幾種類型,這里只說用戶變量,像@var這種。
例如,我們希望根據學員的年齡計算出每個人到35歲還有幾年,這里可以定義一個變量并賦值為35,然后利用這個變量減去年齡就得到結果。
首先,定義變量var,sql語句為:
set @var:=35;
接著,使用這個變量,sql語句為:
select @var-age as age_gap from stuinfo;
查詢結果:
當然,關于變量還有很多更復雜的用法,多用于計算連續登陸天數這種問題或者存儲過程中。
感謝各位的閱讀!關于“MySQL中常用的查詢子句有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。