国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

MySQL的核心查詢(xún)語(yǔ)句詳解

瀏覽:23日期:2023-06-08 19:37:37
目錄一、單表查詢(xún)1、排序2、聚合函數(shù)3、分組4、limit二、SQL約束1、主鍵約束2、非空約束3、唯一約束4、外鍵約束5、默認(rèn)值三、多表查詢(xún)1、內(nèi)連接1)隱式內(nèi)連接:2)顯式內(nèi)連接:2、外連接1)左外連接2)右外連接四、合并查詢(xún)1、UNION2、UNION ALL五、子查詢(xún)1、where型:2、from型:3、exists型:六、MySQL函數(shù)

本文數(shù)據(jù)分析師必看! 上次講了數(shù)據(jù)庫(kù)和MySQL基礎(chǔ),這回咱們來(lái)學(xué)點(diǎn)MySQL最常用到的—核心查詢(xún)語(yǔ)句。

框住的部分是本節(jié)重點(diǎn)

一、單表查詢(xún)SELECT 字段名 FROM 表名 WHERE 條件 [GROUP BY 字段名 HAVING 條件 ORDER BY 字段名 LIMIT 條數(shù)];1、排序單列排序asc升序(默認(rèn),可不寫(xiě)),desc降序語(yǔ)法格式:SELECT 字段名 FROM 表名 [WHERE 字段 = 值] ORDER BY 字段名 [ASC / DESC]組合排序同時(shí)對(duì)多個(gè)字段進(jìn)行排序, 如果第一個(gè)字段相同就按照第二個(gè)字段進(jìn)行排序,以此類(lèi)推。比如order by 字段1,字段2 desc—代表先按照字段1升序,再按字段2降序。2、聚合函數(shù)

#1 查詢(xún)員工的總數(shù)-- 統(tǒng)計(jì)表中的記錄條數(shù) 使用count()SELECT COUNT(eid) FROM emp; -- 使用某一個(gè)字段 SELECT COUNT(*) FROM emp; -- 使用 *SELECT COUNT(1) FROM emp; -- 使用 1,與 * 效果一樣-- 下面這條SQL 得到的總條數(shù)不準(zhǔn)確,因?yàn)閏ount函數(shù)忽略了空值 -- 所以使用時(shí)注意不要使用帶有null的列進(jìn)行統(tǒng)計(jì)SELECT COUNT(dept_name) FROM emp;#2 查看員工總薪水、最高薪水、最小薪水、薪水的平均值-- sum函數(shù)求和, max函數(shù)求最大, min函數(shù)求最小, avg函數(shù)求平均值 SELECTSUM(salary) AS '總薪水', MAX(salary) AS '最高薪水', MIN(salary) AS '最低薪水', AVG(salary) AS '平均薪水'FROM emp;

count(1)count(*)count(列名)的區(qū)別: count(1)和count(*)統(tǒng)計(jì)所有條數(shù),包括null值; count(列名)統(tǒng)計(jì)所有不為null的條數(shù)。

3、分組

分組往往和聚合函數(shù)一起使用,對(duì)數(shù)據(jù)進(jìn)行分組,分完組之后在各個(gè)組內(nèi)進(jìn)行聚合統(tǒng)計(jì)分析。 語(yǔ)法格式:

SELECT 分組字段/聚合函數(shù) FROM 表名 GROUP BY 分組字段 [HAVING 條件];

代碼示例:

#1.查詢(xún)每個(gè)部門(mén)的平均薪資 SELECTdept_name AS '部門(mén)名稱(chēng)', AVG(salary) AS '平均薪資' FROM emp GROUP BY dept_name;#2.查詢(xún)每個(gè)部門(mén)的平均薪資, 部門(mén)名稱(chēng)不能為null SELECTdept_name AS '部門(mén)名稱(chēng)',AVG(salary) AS '平均薪資'FROM emp WHERE dept_name IS NOT NULL GROUP BY dept_name;

having的用法:

# 查詢(xún)平均薪資大于6000的部門(mén)-- 需要在分組后再次進(jìn)行過(guò)濾,使用 having SELECTdept_name ,AVG(salary)FROM emp WHERE dept_name IS NOT NULL GROUP BY dept_name HAVING AVG(salary) > 6000 ;

where 與 having 的區(qū)別:

having要放在where和分組之后

4、limit

語(yǔ)法格式:

SELECT 字段1,字段2... FROM 表名 LIMIT offset,length;

參數(shù)說(shuō)明: offset起始行數(shù),從0開(kāi)始記數(shù),如果省略則默認(rèn)為0。 length返回的行數(shù)。

# 查詢(xún)emp表中的前5條數(shù)據(jù)SELECT * FROM emp LIMIT 5;SELECT * FROM emp LIMIT 0,5;# 查詢(xún)emp表中從第4條開(kāi)始,查詢(xún)6條 -- 起始值默認(rèn)是從0開(kāi)始的SELECT * FROM emp LIMIT 3,6;二、SQL約束

約束的作用: 對(duì)表中的數(shù)據(jù)進(jìn)行進(jìn)一步的限制,從而保證數(shù)據(jù)的正確性、有效性、完整性。 違反約束的不正確數(shù)據(jù)將無(wú)法插入到表中。注意:約束是針對(duì)字段的。

一般數(shù)據(jù)分析師對(duì)數(shù)據(jù)只是查詢(xún),基本沒(méi)有創(chuàng)建修改表的權(quán)限,所以這塊大家了解就好,不用糾結(jié)語(yǔ)法怎么寫(xiě)。在表結(jié)構(gòu)中見(jiàn)到以下約束關(guān)鍵字,知道是對(duì)數(shù)據(jù)的約束就行了。

常見(jiàn)的四種約束

1、主鍵約束

特點(diǎn):不可重復(fù)、唯一、非空

創(chuàng)建主鍵

# 方式1 創(chuàng)建一個(gè)帶主鍵的表 CREATE TABLE emp2(-- 設(shè)置主鍵 唯一 非空 eid INT PRIMARY KEY, ename VARCHAR(20),sex CHAR(1));-- 方式2 創(chuàng)建一個(gè)帶主鍵的表 CREATE TABLE emp3(eid INT ,ename VARCHAR(20), sex CHAR(1),-- 指定主鍵為 eid字段 PRIMARY KEY(eid));

增加主鍵

-- 創(chuàng)建的時(shí)候不指定主鍵,然后通過(guò)DDL語(yǔ)句進(jìn)行設(shè)置 ALTER TABLE emp2 ADD PRIMARY KEY(eid);2、非空約束3、唯一約束4、外鍵約束

主鍵:數(shù)據(jù)表A中有一列,這一列可以唯一的標(biāo)識(shí)一條記錄。 外鍵:數(shù)據(jù)表A中有一列,這一列指向了另外一張數(shù)據(jù)表B的主鍵。

5、默認(rèn)值-- 表示性別這字段,若沒(méi)有數(shù)據(jù)則會(huì)默認(rèn)填女,若有數(shù)據(jù)則顯示該數(shù)據(jù)。CREATE TABLE emp4(eid INT PRIMARY KEY AUTO_INCREMENT,ename VARCHAR(20),sex CHAR(1) DEFAULT '女'); 三、多表查詢(xún)

數(shù)據(jù)分析師在實(shí)際工作中提取數(shù)據(jù),不可能在一張表中就能把所有想要的數(shù)據(jù)都取到,而是關(guān)聯(lián)多張表,從不同的表中拿到不同的目標(biāo)數(shù)據(jù),這就需要掌握表和表連接的知識(shí)了。這塊非常重要?。。?/p>1、內(nèi)連接

**特點(diǎn):**通過(guò)指定的條件去匹配兩張表中的數(shù)據(jù),匹配上就顯示,匹配不上就不顯示。

1)隱式內(nèi)連接:SELECT 字段名 FROM 左表, 右表 WHERE 連接條件;

示例代碼:

SELECT p.pname, p.price, c.cnameFROM products p , category c WHERE p.category_id = c.cid;2)顯式內(nèi)連接:SELECT 字段名 FROM 左表 [INNER] JOIN 右表 ON 條件 -- inner 可以省略

示例代碼:

SELECT * FROM products p INNER JOIN category c ON p.category_id = c.cid;2、外連接1)左外連接

特點(diǎn): 以左表為基準(zhǔn),匹配右邊表中的數(shù)據(jù),如果匹配的上就展示匹配到的數(shù)據(jù); 如果匹配不到,左表中的數(shù)據(jù)正常展示,右邊的展示為null。

語(yǔ)法格式:

SELECT 字段名 FROM 左表 LEFT [OUTER] JOIN 右表 ON 條件

示例代碼:

-- 左外連接查詢(xún)SELECT * FROM category c LEFT JOIN products p ON c.cid= p.category_id;2)右外連接

特點(diǎn): 以右表為基準(zhǔn),匹配左邊表中的數(shù)據(jù),如果匹配的上就展示匹配到的數(shù)據(jù); 如果匹配不到,右表中的數(shù)據(jù)正常展示,左邊的展示為null。

語(yǔ)法格式:

SELECT 字段名 FROM 左表 RIGHT [OUTER ]JOIN 右表 ON 條件

示例代碼:

-- 右外連接查詢(xún)SELECT * FROM products p RIGHT JOIN category c ON p.category_id = c.cid;

各種連接方式的總結(jié):

四、合并查詢(xún)1、UNION

UNION 操作符用于合并兩個(gè)或多個(gè)SELECT語(yǔ)句的結(jié)果集,并消除重復(fù)行。 注意,UNION內(nèi)部的SELECT 語(yǔ)句必須擁有相同數(shù)量的列。列也必須擁有相似的數(shù)據(jù)類(lèi)型。 同時(shí),每條 SELECT 語(yǔ)句中的列的順序必須相同。

代碼示例:

SELECT id,name,amount,dateFROM customersLEFT JOIN orders on customers.Id = orders.customers_idUNIONSELECT id,name,amount,datefrom customersRIGHT JOIN orders on customers.Id = orders.customers_id;

注意:

1. 選擇的列數(shù)必須相同;

2. 所選列的數(shù)據(jù)類(lèi)型必須在相同的數(shù)據(jù)類(lèi)型組中(如數(shù)字或字符);

3. 列的名稱(chēng)不必相同;

4. 在重復(fù)檢查期間,NULL值不會(huì)被忽略;

2、UNION ALL

UNION ALL 運(yùn)算符用于將兩個(gè) SELECT 語(yǔ)句的結(jié)果組合在一起,重復(fù)行也包含在內(nèi)。 UNION ALL 運(yùn)算符所遵從的規(guī)則與UNION一致。

總結(jié): UNION和UNION ALL關(guān)鍵字都是將兩個(gè)結(jié)果集合并為一個(gè),也有區(qū)別。

1、重復(fù)值:UNION在進(jìn)行表連接后會(huì)篩選掉重復(fù)的記錄,而UNION All不會(huì)去除重復(fù)記錄。

2、UNION ALL只是簡(jiǎn)單的將兩個(gè)結(jié)果合并后就返回。

3、在執(zhí)行效率上,UNION ALL 要比UNION快很多。因此,若可以確認(rèn)合并的兩個(gè)結(jié)果集中不 包含重復(fù)數(shù)據(jù),那么就使用UNION ALL。

五、子查詢(xún)

定義:一條select 查詢(xún)語(yǔ)句的結(jié)果, 作為另一條select語(yǔ)句的一部分。

1、where型:

子查詢(xún)的結(jié)果作為查詢(xún)條件

SELECT 查詢(xún)字段 FROM 表 WHERE 字段=(子查詢(xún));

代碼示例:

-- 查詢(xún)價(jià)格最高的商品信息SELECT * FROM products WHERE price = (SELECT MAX(price) FROM products);2、from型:

將子查詢(xún)的結(jié)果作為一張表

SELECT 查詢(xún)字段 FROM (子查詢(xún))表別名 WHERE 條件;

代碼示例:

-- 查詢(xún)商品中,價(jià)格大于500的商品信息,包括商品名稱(chēng)、商品價(jià)格、商品所屬分類(lèi)名稱(chēng)SELECT p.pname, p.price, c.cnameFROM products p-- 子查詢(xún)作為一張表使用時(shí)要起別名,才能訪問(wèn)表中字段 INNER JOIN (SELECT * FROM category) c ON p.category_id = c.cid WHERE p.price > 500;3、exists型:

子查詢(xún)結(jié)果是單列多行

SELECT 查詢(xún)字段 FROM 表 WHERE 字段 IN (子查詢(xún));

代碼示例:

--查詢(xún)價(jià)格小于2000的商品,來(lái)自于哪些分類(lèi)SELECT * FROM categoryWHERE cid in (SELECT DISTINCT category_id FROM products WHERE price < 2000);

總結(jié):

1. 子查詢(xún)?nèi)绻槌龅氖且粋€(gè)字段(單列),那就在where后面作為條件使用。 單列單行 = 單列多行 in

2. 子查詢(xún)?nèi)绻樵?xún)出的是多個(gè)字段(多列),就當(dāng)做一張表使用(要起別名)。

六、MySQL函數(shù)

函數(shù)常用的就這些了,不用硬記,不會(huì)的百度查就行了,寫(xiě)著寫(xiě)著就記住了。

1、數(shù)學(xué)函數(shù)

2、字符串函數(shù)

3、日期和時(shí)間函數(shù)(必學(xué))

4、條件判斷函數(shù)(這個(gè)必須掌握?。。。?/p>

5、系統(tǒng)信息函數(shù)(可忽略)

到此這篇關(guān)于MySQL的核心查詢(xún)語(yǔ)句詳解的文章就介紹到這了,更多相關(guān)MySQL的核心查詢(xún)內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: MySQL 數(shù)據(jù)庫(kù)
相關(guān)文章:
主站蜘蛛池模板: 台湾三级 | 久草视频免费在线观看 | 国产精品日韩欧美在线第3页 | 成年人在线视频网站 | 国产精品自拍在线观看 | 三级网站免费观看 | 久久久久久久久久毛片精品美女 | 欧美一级免费大片 | 日本午夜视频 | 成年人黄国产 | 久久免费视屏 | 亚洲日本高清 | 无遮挡一级毛片私人影院 | 欧美日韩一级片在线观看 | 久久久久久久久久久福利观看 | 美国一级片免费 | 18视频免费网址在线观看 | 国产成人丝袜网站在线看 | 中国一级毛片欧美一级毛片 | 京野结衣免费一区二区 | 怡红院免费在线视频 | 欧美成人免费一级人片 | 孕妇xxxx视频在线 | 免费国产精品视频 | 国产在线观看网址在线视频 | 免费观看亚洲视频 | 亚洲精品久久久久午夜三 | 国语精品视频在线观看不卡 | 日本理论在线播放 | 精品欧美一区二区在线看片 | 久久久久久尹人网香蕉 | 欧美精品免费在线 | 牛人盗摄一区二区三区视频 | 成人国产午夜在线视频 | 一区视频在线播放 | 爽爽视频在线观看 | 香蕉久久精品 | 白白在线观看永久免费视频 | 日本在线理论片 | 欧美成人观看视频在线 | 欧美日韩精品一区二区三区不卡 |