目錄
數據庫查詢(單表查詢)
-
關鍵字執行的優先級(重點)
重點中的重點:關鍵字的執行優先級 1:from #找到表 2:where #使用where指定的條件,去表中取出一條條記錄 3:group by #將取出的數據進行分組,如果沒有指定,則整體作為一組 4:having #將分組的結果按照having指定的條件進行過濾 5:select #指定select查詢 6:distinct #去重 7:order by #將查詢的結果按照order by指定的字段進行排序 8:limit #限制結果的顯示數量
-
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 條件判斷語句
-
where 篩選行語句
1:#范圍查詢 #< > >= <= != <>代表不等於和!=是一個意思 select age from 表名 where age <100 and 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
-
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) < 2; ''' mysql> 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中的表達式的值。(了解就好) '''
-
聚合函數
1:#count 計數 2:#max 求最大值 3:#avg 求平均值 4:#min 求最小值 5:#sum 求和
-
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) < 2;
-
order by 排序
''' 對查詢出來的數據進行排序,可以升序或者降序(desc),可以使用多個條件一起排序,執行順序按照從左到右執行排序 ''' SELECT * FROM employee ORDER BY salary; #默認是升序排列 SELECT * FROM employee ORDER BY salary ASC; #升序 SELECT * FROM employee ORDER BY salary DESC; #降序
-
limit 分頁
''' 可以和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;