亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL中的聚合查詢和聯(lián)合查詢操作代碼

 更新時(shí)間:2023年03月20日 10:35:45   作者:crazy_xieyi  
這篇文章主要介紹了MySQL中的聚合查詢和聯(lián)合查詢操作代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、聚合查詢(行與行之間的計(jì)算)

1.常見(jiàn)的聚合函數(shù)有:

函數(shù)

說(shuō)明

count

查詢到的數(shù)據(jù)的數(shù)量

sum

查詢到的數(shù)據(jù)的總和(針對(duì)數(shù)值,否則無(wú)意義)

avg

查詢到的數(shù)據(jù)的平均值(針對(duì)數(shù)值,否則無(wú)意義)

max

查詢到的數(shù)據(jù)的最大值(針對(duì)數(shù)值,否則無(wú)意義)

min

查詢到的數(shù)據(jù)的最小值(針對(duì)數(shù)值,否則無(wú)意義)

Select count(*) from student(統(tǒng)計(jì)行數(shù))
Select count(1) from student(統(tǒng)計(jì)第一列數(shù)據(jù)的行數(shù),如果有null則不算行數(shù))
Select sum(math) from student(數(shù)學(xué)成績(jī)總分)
Select sum(math) from student where math > 60(數(shù)學(xué)大于60的總分)
Select avg(math+chinese+english) from student(統(tǒng)計(jì)平均總分)
Select max(math) from student(數(shù)學(xué)最高分)
Select min(math) from student where math >60(數(shù)學(xué)大于60的最低分)

2.group by

select 中使用 group by 子句可以對(duì)指定列進(jìn)行分組查詢。使用  group by 進(jìn)行分組查詢時(shí),select 指定的字段必須是“分組依據(jù)字段”,其他字段若想出現(xiàn)在select 中則必須包含在聚合函數(shù)中。

select column1, sum(column2), .. from table group by column1,column3;
//示例:查詢每個(gè)角色的最高工資、最低工資和平均工資 
Select role,max(salary),min(salary),avg(salary) from emp group by role;

3.having

group by 子句進(jìn)行分組以后,需要對(duì)分組結(jié)果再進(jìn)行條件過(guò)濾時(shí),不能使用 WHERE 語(yǔ)句,而需要用Having

//示例:顯示平均工資低于1500的角色和它的平均工資
select role,avg(salary) from emp group by role having avg(salary)<1500; 

關(guān)于分組查詢指定條件有三種情況:

1.分組之前,指定條件(先篩選,再分組)用where

2.分組之后,指定條件(先分組,再篩選)用having

3.分組之前和分組之后都指定條件(先where后having)

關(guān)于執(zhí)行順序:

59d38a8657c14fcaaef9bdd1f1eb570d.png

二、聯(lián)合查詢(多表查詢)

多表查詢是對(duì)多張表的數(shù)據(jù)取笛卡爾積,笛卡爾積是通過(guò)排列組合算出來(lái)的,因此包含了很多無(wú)效數(shù)據(jù),因此需要加上連接條件,用來(lái)篩選有效的數(shù)據(jù)。

1.進(jìn)行聯(lián)合查詢的步驟:

1.首先計(jì)算笛卡爾積

2.引入連接條件(如:where student.id = score.student_id)

3.再根據(jù)需求,加入必要的條件(where where student.id = score.student_id and student.name=’xxx’)

4.去掉多余的列,只保留需要關(guān)注的列(select student.name,score.score from student,score where where student.id = score.student_id and student.name=’xxx’)

2.內(nèi)連接(from,join on)

語(yǔ)法:

select 字段 from 表1 (as)別名1 [inner] join 表2 (as)別名2 on 連接條件 and 其他條件;

select 字段 from 表1 (as)別名1,表2 (as)別名2 where 連接條件 and 其他條件;

示例:查詢“張三”同學(xué)的成績(jī)

select sco.score from student as stu inner join score as sco on stu.id=sco.student_id
 
and stu.name='張三';

或者

select sco.score from student as stu, score as sco where stu.id=sco.student_id and
 
stu.name='張三';

3.外連接(left/right join on)

外連接分為左外連接和右外連接。如果聯(lián)合查詢,左側(cè)的表完全顯示我們就說(shuō)是左外連接;右側(cè)的表完全顯示我們就說(shuō)是右外連接。

語(yǔ)法:

左外連接,表1完全顯示

select 字段名  from 表名1 left join 表名2 on 連接條件;

右外連接,表2完全顯示

select 字段 from 表名1 right join 表名2 on 連接條件;

4.自連接

自連接是指在同一張表中連接自身進(jìn)行查詢。

示例:顯示所有“數(shù)學(xué)”成績(jī)比“語(yǔ)文”成績(jī)高的學(xué)生成績(jī)信息

先查詢“數(shù)學(xué)”和“語(yǔ)文”課程的id

select id,name from course where name='數(shù)學(xué)' or name='語(yǔ)文';

數(shù)學(xué)id=1;

語(yǔ)文id=2;

再查詢成績(jī)表中,“數(shù)學(xué)”成績(jī)比“語(yǔ)文”成績(jī) 好的信息

select s1.* from score s1,score s2 where s1.student_id = s2.student_id and s1.score > s2.score and s1.course_id = 1 and s2.course_id = 2;

5.子查詢

子查詢是指嵌入在其他sql語(yǔ)句中的select語(yǔ)句,也叫嵌套查詢。

單行子查詢:返回一行記錄的子查詢

select * from student where classes_id=(select classes_id from student where name='張三');

多行子查詢:返回多行記錄的子查詢

1.使用(not) in 關(guān)鍵字

使用 in 

select * from score where course_id in (select id from course where

name='語(yǔ)文' or name='英文');

使用not in

select * from score where course_id not in (select id from course where

name!='語(yǔ)文' and name!='英文');

1.使用(not) exists 關(guān)鍵字

使用 exists 

select * from score sco where exists (select sco.id from course cou

where (name='語(yǔ)文' or name='英文') and cou.id = sco.course_id);

使用 not exists

select * from score sco where not exists (select sco.id from course cou

where (name!='語(yǔ)文' and name!='英文') and cou.id = sco.course_id);

在from子句中使用子查詢,把一個(gè)子查詢當(dāng)做一個(gè)臨時(shí)表使用。(not)in是放在內(nèi)存中的,如果查詢的數(shù)據(jù)太大,內(nèi)存中放不下,此時(shí)就需要使用(not)exists。exists本質(zhì)上就是讓數(shù)據(jù)庫(kù)執(zhí)行多個(gè)查詢操作,并把結(jié)果放在磁盤(pán)中,因此對(duì)于exists來(lái)說(shuō),執(zhí)行效率大大低于in,而且可讀性也不是很好,這種比較適合處理一些特殊的場(chǎng)景。

6.合并查詢

合并查詢本質(zhì)上就是把兩個(gè)查詢結(jié)果集合并成一個(gè),但是要求這兩個(gè)結(jié)果集的列一樣,才能合并。即:

為了合并多個(gè)select的執(zhí)行結(jié)果,可以使用集合操作符 union,union all。使用union和union all時(shí),前后查詢的結(jié)果集中,字段需要一致。

1.union關(guān)鍵字

用于取得兩個(gè)結(jié)果集的并集。當(dāng)使用該操作符時(shí),會(huì)自動(dòng)去掉結(jié)果集中的重復(fù)行。

示例:

select?* from?course where?id<3 union select?* from?course where?name='英文';

或者使用or來(lái)實(shí)現(xiàn)

select?* from?course where?id<3 or?name='英文';

2.union all關(guān)鍵字

用于取得兩個(gè)結(jié)果集的并集。當(dāng)使用該操作符時(shí),不會(huì)去掉結(jié)果集中的重復(fù)行。

示例:

可以看到結(jié)果集中出現(xiàn)重復(fù)數(shù)據(jù)

select?* from?course where?id<3 union?all select?* from?course where?name='英文';

到此這篇關(guān)于MySQL中的聚合查詢和聯(lián)合查詢的文章就介紹到這了,更多相關(guān)mysql聚合查詢和聯(lián)合查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql提示[Warning] Invalid (old?) table or database name問(wèn)題的解決方法

    mysql提示[Warning] Invalid (old?) table or database name問(wèn)題的解決方

    今天一個(gè)朋友的上服務(wù)器出現(xiàn)[Warning] Invalid (old?) table or database name問(wèn)題,通過(guò)分析binlog日志發(fā)現(xiàn),在以下sql語(yǔ)句中出現(xiàn)問(wèn)題,由于涉及敏感內(nèi)容,用sql語(yǔ)法表示
    2012-07-07
  • windows無(wú)法啟動(dòng)MySQL服務(wù)報(bào)錯(cuò)1067的解決方法

    windows無(wú)法啟動(dòng)MySQL服務(wù)報(bào)錯(cuò)1067的解決方法

    這篇文章主要為大家詳細(xì)介紹了windows無(wú)法啟動(dòng)MySQL服務(wù)報(bào)錯(cuò)1067的3種解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Mysql隔離性之Read View的用法說(shuō)明

    Mysql隔離性之Read View的用法說(shuō)明

    這篇文章主要介紹了Mysql隔離性之Read View的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • 解決Mysql5.7.17在windows下安裝啟動(dòng)時(shí)提示不成功問(wèn)題

    解決Mysql5.7.17在windows下安裝啟動(dòng)時(shí)提示不成功問(wèn)題

    這篇文章主要介紹了解決Mysql5.7.17在windows下安裝啟動(dòng)時(shí)提示不成功問(wèn)題,需要的朋友可以參考下
    2017-03-03
  • MySQL ORDER BY 的實(shí)現(xiàn)分析

    MySQL ORDER BY 的實(shí)現(xiàn)分析

    總的來(lái)說(shuō),在 MySQL 中的ORDER BY有兩種排序?qū)崿F(xiàn)方式,一種是利用有序索引獲取有序數(shù)據(jù),另一種則是通過(guò)相應(yīng)的排序算法,將取得的數(shù)據(jù)在內(nèi)存中進(jìn)行排序
    2012-07-07
  • mysql在項(xiàng)目中怎么選事務(wù)隔離級(jí)別

    mysql在項(xiàng)目中怎么選事務(wù)隔離級(jí)別

    Mysql默認(rèn)的事務(wù)隔離級(jí)別是可重復(fù)讀,那互聯(lián)網(wǎng)項(xiàng)目中Mysql也是用默認(rèn)隔離級(jí)別,但在項(xiàng)目中呢,下面我們就一起來(lái)了解一下
    2021-05-05
  • 詳解一條update語(yǔ)句是怎樣執(zhí)行原理解析

    詳解一條update語(yǔ)句是怎樣執(zhí)行原理解析

    這篇文章主要為大家介紹了詳解一條update語(yǔ)句是怎樣執(zhí)行原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Mac下MySQL初始化密碼操作

    Mac下MySQL初始化密碼操作

    個(gè)人在Mac上操作數(shù)據(jù)庫(kù),遇到的啟動(dòng)數(shù)據(jù)庫(kù)問(wèn)題的簡(jiǎn)單記錄。接下來(lái)通過(guò)本文給大家介紹Mac下MySQL初始化密碼操作,需要的朋友參考下
    2017-03-03
  • MySQL分區(qū)之HASH分區(qū)詳解

    MySQL分區(qū)之HASH分區(qū)詳解

    hash分區(qū)的目的是將數(shù)據(jù)按照某列進(jìn)行hash計(jì)算后更加均勻的分散到各個(gè)分區(qū),下面這篇文章主要給大家介紹了關(guān)于MySQL分區(qū)之HASH分區(qū)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • MySQL8.x msi版安裝教程圖文詳解

    MySQL8.x msi版安裝教程圖文詳解

    這篇文章主要介紹了MySQL8.x msi版安裝教程 ,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05

最新評(píng)論