數據庫單表查詢的方法:1、select查詢操作,篩選列;2、where語句,篩選行;3、group by分組;4、having過濾條件,是針對組做過濾條件,是放在group by后面執行的;5、order by排序,對查詢出來的數據排序。
數據庫單表查詢的方法:
1、關鍵字執行的優先級(重點)
重點中的重點:關鍵字的執行優先級 1:from?#找到表 2:where?#使用where指定的條件,去表中取出一條條記錄 3:group?by?#將取出的數據進行分組,如果沒有指定,則整體作為一組 4:having?#將分組的結果按照having指定的條件進行過濾 5:select?#指定select查詢 6:distinct?#去重 7:order?by?#將查詢的結果按照order?by指定的字段進行排序 8:limit?#限制結果的顯示數量
2、select查詢操作(篩選列)
1:#select?查詢操作 ''' 注意所有select?查詢后面右加括號的方法,比如,select?user()這種帶括號的都是mysql的?內置方法,select本身就是查詢操作,from只是說明從哪查, ''' select?*?from?表名;?#查詢表中所有的數據??*代表所有 select?字段名?from?表名;#查詢表中某一個字段的數據 select?字段名,字段名,字段名?from?表名;#查詢表中多個字段的數據 select?database();#查詢返回當前操作的數據庫 select?user();#查詢當前登陸的用戶 select?now;#查詢返回當前的時間 =========================================================== 2:#distinct?去重操作 ''' 當使用select查詢表某些字段數據的時候,這個字段中可能出現多個重復的數據,就可以使用distinct對查詢出來的數據進行去重操作,distinct也可以對多個字段的數據進行聯合去重 ''' select?dictinct?字段名?from?表名;#對查出來的字段數據進行去重 select?distinct?字段名,字段名?from?表名;#對多個字段查詢的數據進行聯合去重 =========================================================== 3:#四則運算 ''' 使用select?查詢某個字段的數據的時候,對數值類型的字段數據,可以進行四則運算,四則運?算包括加減乘除等操作 ''' select?字段名*12?from?表名;#對查詢出來的數據乘以12,返回結果,>>字段名要是數值類型 =========================================================== 4:#concat字符串拼接和concat_ws指定分割符進行拼接(自定義顯示的格式) ''' concat內置函數可以對查詢出來的字段數據進行字符串拼接 ''' select?concat('姓名:',name)?from?表名;#對查詢出來的姓名字段的數據前面都加上一??個字符串姓名,能夠友好的顯示查詢出來的數據的意思,其實就是字符串拼接 select?concat(name,':',salary)as?info?from?表名;#concat還可以將兩個字段的數據拼接,,產生一個新的字段數據顯示出來,as是個這個字段重命名 ''' concat_ws()函數也只是字符串拼接,不過concat_ws的憑借方式是類似與python?join拼接????的方式,就是以某個元素對多個字段的數據進行拼接 ''' ????select?concat_ws('_','姓名:',name,'性別:',sex)as?info?from?表名; ========================================================== 5:#case?end?語句?對查詢出來的每一個數據進行加工和顯示 ''' case語句的作用是,對表中數據進行查詢時,對于查詢出來的語句進行進一步的加工,并且顯示出來,case?end語句有點像python里的if語句,不過sql的case語句需要表明開始和結束,case代表開始,end代表結束.when代表的就是if條件,else就是其他,當有多個when的時候,從第二個when開始就代表的類似于elif的意思,,,,,知道了解就好>>>>>> ''' select( case ????when?name='田少崗'?concat(name,'逗比') ????when?name='田彩'?concat(name,'女神') ????else? ????concat(name,'邊玩去') ???end )as?now_name?from?表名; ========================================================== 6:#select的相關總結; ????可以查一個,多個,*所有 ????調用函數:now(),database(),concat(),concat_ws() ????可以四則運算 ????可以去重?distinct ????可以使用case?end?條件判斷語句
3、where 篩選行語句
1:#范圍查詢 ????#?>=?代表不等于和!=是一個意思? ????select?age?from?表名?where?age?20;(多條件查詢) ????#between?1?and?10?找尋1到10之間的 ????select?age?from?表名?where?between?1?and?100;?>>注意包含1和100 ????#in?(1,2,3,4)?多選一 ????select?age?from?表名?where?age?in?(10,20,30,40); ????#將age=10和age=20的都能取出來 ????select?age?from?表名?where?age=10?or?age=20; 2:#模糊查詢 ????#like ????like的表現形式是,'%a'查詢以a結尾的,'a%'查詢以a開始的,'%a%'查詢包含a的 ????select?name?from?表名?where?name?like?'田%';>>>查詢出姓田的所有人 ????like還有一種形式,'_a','a_','a__'一個劃線代表一個字符,%代表的是任意長度 ????select?name?from?表名?where?name?'like?'田_';>>>查詢出以田開頭的兩個字的姓名 ????#regexp?可以使用正則匹配(記一下正則表達式) 3:#is?is?not? ????is?null?is?not?null?一般用來判斷是不是空, 4:#邏輯運算 ????and?or?not
4、group by(分組)
'''group?by可以對某個字段的值進行分組,這個字段有多少種值就分多少組,group?by還有一個特性就是去重,一旦使用group?by對數據分組了,就不能對某一條數據進行操作,永遠都是這一組數據''' group_concat()函數(只用來做最終的顯示,不做中間數據的操作)可以顯示當前這一組的所有信息,拼在一起顯示 select?post,group_concat(name),count(id)?from?employee?group?by?post?having?count(id)??set?global?sql_mode='STRICT_TRANS_TABLES,ONLY_FULL_GROUP_BY'; ONLY_FULL_GROUP_BY的語義就是確定select?target?list中的所有列的值都是明確語義,簡單的說來,在ONLY_FULL_GROUP_BY模式下,target?list中的值要么是來自于聚集函數的結果,要么是來自于group?by?list中的表達式的值。(了解就好) '''
5、聚合函數
1:#count?計數 2:#max??求最大值 3:#avg??求平均值 4:#min??求最小值 5:#sum??求和
6、having 過濾條件
''' having是針對一個組做的過濾條件,是放在group?by?后面執行的,他的意思和where是一樣的 where?group?和?having的執行順序是,where>group?by>having,所以having一般都是和having一起用的 ''' select?post,group_concat(name),count(id)?from?employee?group?by?post?having?count(id)?<p><strong>7、order by 排序</strong></p><pre class="brush:php;toolbar:false">''' 對查詢出來的數據進行排序,可以升序或者降序(desc),可以使用多個條件一起排序,執行順序按照從左到右執行排序 ''' SELECT?*?FROM?employee?ORDER?BY?salary;?#默認是升序排列 SELECT?*?FROM?employee?ORDER?BY?salary?ASC;?#升序 SELECT?*?FROM?employee?ORDER?BY?salary?DESC;?#降序
8limit 分頁
''' 可以和order?by一起使用,先排序再分頁取幾個,還可以指定刪選的范圍,limit?m,n這個意思是從m+1開始取n條數據,不如limit?0,6,就是從1開始取六條數據,然是limit分頁時,只適合做小數據的分頁,當數據量過大時,效率就會非常慢,limit還有一種語法是:limit?n?offset?m,這個意思也是從m+1開始,取n條,這個語法知道就行, ''' #默認初始位置為0,從第一條開始順序取出三條? SELECT?*?FROM?employee?ORDER?BY?salary?DESC?LIMIT?3; #從第0開始,即先查詢出第一條,然后包含這一條在內往后查5條 ????SELECT?*?FROM?employee?ORDER?BY?salary?DESC ????????LIMIT?0,5;?? ##從第5開始,即先查詢出第6條,然后包含這一條在內往后查5條 ????SELECT?*?FROM?employee?ORDER?BY?salary?DESC ????????LIMIT?5,5;
相關學習推薦:mysql視頻教程
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END