日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql查询数据为0的所有字段6_MySQL8.0 初级学习笔记(六)查询数据

發(fā)布時間:2024/7/19 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql查询数据为0的所有字段6_MySQL8.0 初级学习笔记(六)查询数据 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

MySQL8.0 初級學(xué)習(xí)筆記(六)查詢數(shù)據(jù)

MySQL8.0 初級學(xué)習(xí)筆記(六)查詢數(shù)據(jù)

查詢有多種方法:單表查詢,使用集合函數(shù)查詢,連接查詢,子查詢,合并查詢結(jié)果,為表和字段取別名,使用正則表達式查詢

一、單表查詢

查詢所有字段:SELECT * FROM 表名;

查詢指定字段:(單個字段):SELECT 列名 FROM 表名;

查詢指定字段(多個字段):SELECT 字段名1,字段名2,...,字段名n FROM 表名;

查詢指定記錄:SELECT 字段名1,字段名2,...,字段名n FROM表名 WHERE 查詢條件;

WHERE表達式中運算符的說明如下:

HAVING關(guān)鍵字和WHERE關(guān)鍵字都是用來過濾數(shù)據(jù)的,區(qū)別在于HAVING是在數(shù)據(jù)分組之后進行過濾分組,而WHERE在分組之前來選擇記錄,另外WHERE排除的記錄不再包括在分組中。

3.在GROUP BY 子句中使用WITH ROLLUP:可以在所有查詢出的分組記錄之后增加一條記錄,該記錄計算查詢出所有記錄的總和,即統(tǒng)計記錄數(shù)量。

SELECT 字段名,COUNT(*) AS 新字段名(如total) FROM 表名 GROUP BY 字段名 WITH ROLLUP;

4.多字段分組:SELECT * FROM 表名 GROUP BY 字段名1,字段名n;

5.GROUP BY 和ORDER BY 一起使用:ORDER BY用來對查詢的記錄排序,和GROUP BY一起使用,可以完成對分組的排序。

SELECT 字段名1,集合函數(shù)() as 新字段名1 FROM 表名 GROUP BY 字段名1 HAVING 集合函數(shù)()條件(例如>1) ORDER BY 新字段名1;

運作邏輯:Group by對數(shù)據(jù)進行分組,集合函數(shù)對數(shù)據(jù)進行各種條件的數(shù)據(jù)返回,HAVING子句對分組數(shù)據(jù)進行過濾,最后ORDER BY 子句排序輸出。

6.使用LIMIT限制查詢結(jié)果的數(shù)量:LIMIT[位置偏移量,] 行數(shù)

如顯示表名查詢結(jié)果的前6行:SELECT * FROM 表名 LIMIT 6;

注意:MYSQL8.0中 可以使用"LIMIT 5 OFFSET 4",意思是獲取從第6調(diào)記錄開始后面的4條記錄,和"LIMIT 5,4" 返回結(jié)果相同,其他數(shù)據(jù)同理推論

二,使用集合函數(shù)查詢

COUNT()函數(shù):COUNT(*)計算表中總的行數(shù),不管某列是否有數(shù)值或者為空值

COUNT(字段名)計算指定列下總的行數(shù),計算時將忽略空值的行。

SELECT COUNT(*) AS 字段名 FROM 表名;

注意:count(*)與count(字段名)兩種方式在計算總數(shù)的時候?qū)Υ齨ull 值得方式不同:指定列的值為空的行被count()函數(shù)忽略;如果不指定列,而在count()函數(shù)中使用星號“*”,則所有記錄都不忽略。

SUM()是一個求總和的函數(shù),也可以和GROUP by一起使用,來計算每個分組的總和。

sum()函數(shù)在計算時,忽略列值為null的行。

AVG()函數(shù)通過計算返回的行數(shù)和每一行數(shù)據(jù)的和,求得指定列數(shù)據(jù)的平均值。

可以和GROUP BY 一起使用,來計算每個分組的平均值。

SELECT 字段名,AVG(字段名) AS 新字段名 FROM 表名 GROUP BY 字段名;

MAX()函數(shù)返回指定列中的最大值

可以和GROUP BY一起使用,求每個分組中的最大值。

SELECT 字段名,MAX(字段名) AS 新字段名 FROM 表名 GROUP BY 字段名;

MAX()函數(shù)不僅適用于查找數(shù)據(jù)類型,也可以應(yīng)用于字符類型。

MAX()函數(shù)除了用來找到最大的列值或日期值之外,還可以返回任意列中的最大值,包括返回字符類型的最大值。在對字符類型數(shù)據(jù)進行比較時,按照字符的ASCII碼值大小進行比較,從a~z,a的ASCII碼最小,z的最大。在比較時,先比較第一個字母,如果相等,繼續(xù)比較下一個字符,一直到兩個字符不相等或者字符結(jié)束為止。例如'b'與't'比較時,‘t’為最大值;‘bcd’與'bca‘比較時,'bcd'為最大值。

MIN()函數(shù)返回查詢列中的最小值

可以和GROUP BY一起使用,求每個分組中的最小值。

SELECT 字段名,MIN(字段名) AS 新字段名 FROM 表名 GROUP BY 字段名;

MAX()函數(shù)不僅適用于查找數(shù)據(jù)類型,也可以應(yīng)用于字符類型。

三、連接查詢

1.內(nèi)連接查詢

內(nèi)連接(INNER JOIN)使用比較運算符進行表間某(些)列數(shù)據(jù)的比較操作,并列出這些表中與連接條件相匹配的數(shù)據(jù)行,組合成新的記錄,也就是說,在內(nèi)連接查詢中,只有滿足條件的記錄才能出現(xiàn)在結(jié)果關(guān)系中。

SELECT 表名1.相同字段名,字段名1,字段名n FROM 表名2,表名1 WHERE 表名2.相同字段名 =表名1.相同字段名

SELECT 表名1.相同字段名,字段名1,字段名n FROM 表名2 INNER JOIN 表名1 ON 表名2.相同字段名=表名1.相同字段名;

在這種查詢語句中,兩個表之間的關(guān)系是通過INNER JOIN指定。使用這種語法的時候,連接的條件使用ON子句而不是WHERE,ON 和 WHERE后面指定的條件相同。使用WHERE子句定義連接條件比較簡單明了,而INNER JOIN語法是ANSI SQL的標(biāo)準(zhǔn)規(guī)范,使用INNER JOIN連接語法能夠確保不會忘記連接條件,而且WHERE子句在某些時候會影響查詢的性能。

2.外連接查詢

外連接查詢將查詢多個表中的相關(guān)聯(lián)的行,內(nèi)連接時,返回查詢結(jié)果集合中僅是符合查詢條件的連接條件的行。有時候需要包含沒有關(guān)聯(lián)的行中數(shù)據(jù),即返回查詢結(jié)果集合中不僅包含符合連接條件的行,還包括左表(左外連接或左連接)、右表(右外連接或右連接)或兩個邊接表(全外連接)中的所有數(shù)據(jù)行。外連接分為左外連接或左連接和右外連接或右連接:

LEFT JOIN(左連接):返回包括左表中的所有記錄和右表中連接字段相等的記錄。

RIGHT JOIN (右連接):返回包括右表中的所有記錄和左表中連接字段相等的記錄。

1.左連接的結(jié)果包括LEFT OUTER子句中指定的左表的所有行,而不僅僅是連接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關(guān)的結(jié)果行中,右表的所有選擇列表列均為空值。

SELECT 表名1.字段名,表名2.字段名 FROM 表名1 LEFT OUTER JOIN 表名2 ON 表名1.相同字段名=表名2.相同字段名;

2.右連接是左連接的反向連接,將放回右表的所有行。如果右表的某行在左表中沒有匹配行,左表將返回空值。

SELECT 表名1.字段名,表名2.字段名 FROM 表名1 RIGHT OUTER JOIN 表名2 ON 表名1.相同字段名=表名2.相同字段名;

3.復(fù)合條件連接查詢

復(fù)合條件連接查詢是在連接查詢的過程中,通過添加過濾條件限制查詢的結(jié)果,使查詢的結(jié)果更加準(zhǔn)確

四、子查詢

帶ANY,SOME 關(guān)鍵字的子查詢:這兩個關(guān)鍵字是同義詞,表示滿足其中任一條件,他們允許創(chuàng)建一個表達式對子查詢的返回值列表進行比較,只要滿足內(nèi)層子查詢的任何一個比較條件,就返回一個結(jié)果作為外層查詢的條件。

SELECT 字段名1 FROM 表名1 WHERE 字段名 (比較符)ANY(SELECT 字段名 FROM 表名2);

帶ALL關(guān)鍵字的子查詢:和ANY與SOME不同,使用ALL時需要同時滿足所有內(nèi)層查詢的條件,例如,修改前面的例子,用ALL關(guān)鍵字替換ANY。ALL關(guān)鍵字接在一個比較操作符的后面,表示與子查詢返回的所有值比較為TRUE,則返回TRUE。

SELECT 字段名1 FROM 表名1 WHERE 字段名 (比較符)ALL(SELECT 字段名 FROM 表名2);

帶EXISTS關(guān)鍵字的子查詢:在EXISTS關(guān)鍵字后面的參數(shù)是一個任意的子查詢,系統(tǒng)對子查詢進行運算以判斷它是否返回行,如果至少返回一行,那么EXISTS的結(jié)果為true,此時外層查詢語句將進行查詢;如果子查詢沒有返回任何行,那么EXISTS返回的結(jié)果是false,此時外層語句將不進行查詢。

SELECT * FROM 表名1 WHERE EXISTS (SELECT 字段名 FROM 表名2 WHERE 字段名 = X);

EXISTS和NOT EXISTS的結(jié)果只取決于是否會返回行,而不取決于這些行的內(nèi)容,所以這個子查詢輸入列表通常是無關(guān)緊要的。

帶IN關(guān)鍵字的子查詢:IN關(guān)鍵字進行子查詢時,內(nèi)層查詢語句僅僅返回一個數(shù)據(jù)列,這個數(shù)據(jù)列里的值將提供給外層查詢語句進行比較操作。例如:

SELECT 字段名1 FROM 表名1 WHERE 字段名2 IN (SELECT 字段名2 FROM 表名2 WHERE 字段名3條件);

帶比較運算符的子查詢:帶ANY、ALL關(guān)鍵字的子查詢時使用了“>"比較運算符,子查詢時還可以使用其他的比較運算符,如”="和“!=”等。

五、合并查詢結(jié)果

利用UNION關(guān)鍵字,可以給出多條SELECT語句,并將它們的結(jié)果組合成單個結(jié)果集。合并時,兩個表對應(yīng)的列數(shù)和數(shù)據(jù)類型必須相同。各個SELECT語句之間使用UNION或UNION ALL關(guān)鍵字分隔。UNION不使用關(guān)鍵字ALL,執(zhí)行的時候刪除重復(fù)的記錄,所有返回的行都是唯一的;使用關(guān)鍵字ALL的作用是不刪除重復(fù)行也不對結(jié)果進行自動排序

SELECT字段名1,字段名n FROM 表名1 UNION[ALL] SELECT 字段名1,字段名n FROM 表名2

六、為表和字段取別名

為表取別名:當(dāng)表名字很長或者執(zhí)行一些特殊查詢時,為了方便操作或者需要多次使用相同的表時,可以為表指定別名,用這個別名代替原來的名稱。為表取別名的基本語法為:

表名 [AS] 表別名

“表名”為數(shù)據(jù)庫中儲存的數(shù)據(jù)表的名稱,“表別名”為查詢時指定的表的新名稱,AS關(guān)鍵字為可選參數(shù)。

為字段取別名:在使用SELECT語句顯示查詢結(jié)果時,MYSQL會顯示每個SELECT后面指定的輸出列,在有些情況下,顯示的列的名稱會很長或者名稱不夠直觀,MYSQL可以指定列別名,替換字段或者表達式。語法如下:

列名[AS] 列別名

“列名”為表中字段定義的名稱,“列別名”為字段新的名稱,AS關(guān)鍵字為可選參數(shù)。

七、使用正則表達式查詢

正則表達式通常被用來檢索或替換那些符合某個模式的文本內(nèi)容,根據(jù)指定的匹配模式匹配文本中符合要求的特殊字符串。比如:從一個文本文件中提取電話號碼,查找一篇文章中重復(fù)的單詞或者替換用戶輸入的某些敏感詞語等,這些地方都可以使用正則表達式。正則表達式強大而且靈活,可以應(yīng)用于非常復(fù)雜的查詢。

MYSQL中使用REGEXP關(guān)鍵字指定正則表達式的字符匹配模式

注意:LIKE運算符也可以匹配指定的字符串,但是和REGEXP正則表達式不同,LIKE匹配的字符串如果在文本中間出現(xiàn),則找不到它,相應(yīng)的行也不會返回。REGEXP在文本內(nèi)進行匹配,如果被匹配的字符串在文本中出現(xiàn),REGEXP將會找到它,相應(yīng)的行也會被返回。

6.匹配指定字符中的任意一個:放括號”[]“指定一個字符集合,只匹配其中任何一個字符,即為所查找的文本。方括號還可以指定數(shù)值集合。

SELECT * FROM 表名 WHERE 字段名 REGEXP ’[789]';(這里的數(shù)字代表的是該字段中包含了7,8,或9的記錄,也可以用[7-9]來表示,意在指定集合區(qū)間。

7.匹配指定字符以外的字符:“[^字符集合]”匹配不在指定集合中的任何字符。

SELECT * FROM 表名 WHERE 字段名 REGEXP '[^a-e1-9]';(這里面的數(shù)據(jù)表示包含a~e和數(shù)字1~9以外的記錄)

8.使用{n,}或者{n,m}來指定字符串連續(xù)出現(xiàn)的次數(shù)

”字符串{n,}"表示至少匹配n次前面的字符;“字符串{n,m}”表示匹配前面的字符串不少于n次,不多于m次。例如,a{8,}就表示字母a連續(xù)出現(xiàn)至少8次,也可以大于8次;a{3,7}表示字母a連續(xù)出現(xiàn)最少3次,最多不能超過7次。

SELECT * FROM 表名 WHERE 字段名 REGEXP' x{3,}'; (表示查詢該字段值出現(xiàn)字母x至少3次的記錄)

MySQL8.0 初級學(xué)習(xí)筆記(六)查詢數(shù)據(jù)相關(guān)教程

總結(jié)

以上是生活随笔為你收集整理的mysql查询数据为0的所有字段6_MySQL8.0 初级学习笔记(六)查询数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。