最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL查詢進(jìn)階操作從函數(shù)到表連接的使用

 更新時(shí)間:2022年08月02日 11:05:16   作者:微涼秋意  
這篇文章主要介紹了MySQL查詢進(jìn)階從函數(shù)到表連接的使用,包括mysql函數(shù)的使用,MySQL的分組分頁及查詢關(guān)鍵字的執(zhí)行順序,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下

前言

書接上文,今天學(xué)習(xí)查詢的進(jìn)階操作,包括函數(shù)、分組、分頁、子查詢和表連接。內(nèi)容比較實(shí)用,建議收藏或者訂閱專欄方便學(xué)習(xí)和復(fù)習(xí)。

一、MySQL函數(shù)的使用

  • mysql中內(nèi)置了很多函數(shù),每個(gè)函數(shù)都代表一個(gè)特定功能

1、單行函數(shù)

  • 特點(diǎn):每行數(shù)據(jù)都會(huì)產(chǎn)生一個(gè)對(duì)應(yīng)的結(jié)果

表中有多少行,就會(huì)有多少行的結(jié)果

  • 位置:select之后,from之前 或作為篩選條件

1.concat(…,列名,…,列名)
用來拼接多列的值

例如:以firstname+lastname的形式顯示所有員工的姓名

select concat(first_name,last_name) as 全名 from employees

2.mod(值1,值2)
求值1和值2的取余結(jié)果 ,相當(dāng)于數(shù)學(xué)運(yùn)算中的 %(值1%值2)

  • 標(biāo)準(zhǔn)SQL規(guī)范中不存在%取余的寫法,所以取余操作應(yīng)該使用mod()
  • 例如:select mod(10,3) from dual

注: dual虛擬表,作用為使當(dāng)前SQL符合語法規(guī)范,不寫時(shí)會(huì)做自動(dòng)填充

3.length(列名|數(shù)據(jù))
獲取長(zhǎng)度

查詢所有firstname長(zhǎng)度>6的員工信息

select * from employees where length(first_name)>6

4.now() | sysdate()
獲取系統(tǒng)當(dāng)前時(shí)間

select now()
select SYSDATE()
select now() from dual

2、多行函數(shù)(組函數(shù))

  • 以組為單位獲取結(jié)果,一組得到一個(gè)結(jié)果
  • 如果未手動(dòng)進(jìn)行分組,則默認(rèn)整張表為一組

1.sum(列名)

求某一列的總和

2.avg(列名)

求某一列的平均值

3.max(列名)

求某一列的最大值

4.min(列名)

求某一列的最小值

5.count(列名)

求某一列值的個(gè)數(shù)(非空)

示例:

-- 組函數(shù)操作salary
select 
SUM(salary) 總和,AVG(salary) 平均值,MAX(salary) 最大值,min(salary) 最小值,COUNT(salary) 非空值的數(shù)量
from employees
-- 計(jì)算表中績(jī)效列不為空的員工數(shù)量
select COUNT(commission_pct) from employees
-- 求表中的行數(shù)
select COUNT(*) from employees
select COUNT(employee_id) from employees

二、MySQL的分組

在MySQL中一個(gè)組就是一個(gè)操作單位

1.簡(jiǎn)單分組

select 列名 from 表名 group by 列名

以部門為單位求每個(gè)部門的平均薪資

select department_id,AVG(salary) 平均薪資 from employees group by department_id

2.where + 分組

-- 查詢部門id為10、20、30的部門的平均薪資、
select department_id,AVG(salary) 平均薪資 
from employees
where department_id in(10,20,30) -- 先篩選
GROUP BY department_id -- 后分組查詢

3.having + 分組

select department_id,AVG(salary) 平均薪資 
from employees
group by department_id -- 先分組
having department_id in(10,20,30)  -- 后篩選

4.分組中 where 和 having 的區(qū)別

  • where是在分組前執(zhí)行,having是在分組后執(zhí)行
  • where不能在分組時(shí)使用組函數(shù),但是having可以
  • 當(dāng)兩者都可使用時(shí),優(yōu)先使用where,效率更高

三、分頁以及查詢關(guān)鍵字的執(zhí)行順序

1.limit:用來限制顯示的查詢結(jié)果條數(shù),通常用于分頁查詢

select 列名 from 表名 limit 顯示的起始下標(biāo),顯示條數(shù)

查詢所有員工數(shù)據(jù)的前十條

select * from employees limit 0,10
select * from employees limit 10 下標(biāo)為0時(shí)可以省略

下標(biāo)為0時(shí)可以省略

  • 當(dāng)limit和其他查詢關(guān)鍵字聯(lián)用時(shí),limit一定最后執(zhí)行

查詢的執(zhí)行順序:

語法順序		執(zhí)行順序
select			5
from			1
where			2
group by		3
having			4
order by		6
limit			7

四、子查詢

  • 當(dāng)一個(gè)SQL需要借助于另一個(gè)SQL的執(zhí)行結(jié)果,在當(dāng)前SQL中嵌套另一個(gè)SQL,該寫法稱為子查詢

1、where子查詢

1.1、單值子查詢

嵌套的子SQL只會(huì)返回一行一列的結(jié)果

-- 查詢員工id為100的員工的部門id
select department_id from employees where employee_id=100

-- 子查詢::查詢員工id為100的員工所在的部門信息
select * from departments 
where department_id=(select department_id from employees where employee_id=100)
  • 優(yōu)先執(zhí)行內(nèi)層SQL,再執(zhí)行外層SQL
  • 子SQL需寫入小括號(hào)

1.2、多值子查詢 嵌套的子SQL會(huì)返回多個(gè)結(jié)果

--查詢firstname中包含s的員工所在的部門信息
select * from departments 
where department_id in(select department_id from employees where first_name like '%s%')

2、from子查詢

將子SQL的查詢結(jié)果臨時(shí)看做一張表進(jìn)行后續(xù)操作

-- 獲取薪資最高的前十個(gè)員工的平均薪資
-- 先獲取薪資最高的前十名員工的薪資
select salary from employees ORDER BY salary desc LIMIT 10
-- 子查詢:再根據(jù)子SQL的查詢結(jié)果臨時(shí)通過別名構(gòu)建一張數(shù)據(jù)表進(jìn)行查詢
select avg(salary) from (select salary from employees ORDER BY salary desc LIMIT 10) as e

五、表連接

  • 當(dāng)查詢結(jié)果需要從多張表中獲取時(shí),則需要將多張表連接起來進(jìn)行查新操作

表連接的前提:

  • 多張表之間必須存在關(guān)聯(lián)關(guān)系(外鍵)
  • 外鍵通常連接的是另一張表的主鍵
  • 在進(jìn)行表連接時(shí)作為連接條件使用

1、內(nèi)連接

語法:

select 表1.列名,表2.列名,... 
from 表1 inner join 表2
on 連接條件
  • 特點(diǎn):對(duì)兩張表同時(shí)進(jìn)行約束,只有當(dāng)所有表都符合連接條件,才會(huì)顯示信息
  • 使用:inner可省

2、(左)外連接

語法:

select 表1.列名,表2.列名,... 
from 表1(左表) left outer join 表2(右表)
on 連接條件
  • 特點(diǎn):只對(duì)右表做約束,左表中的數(shù)據(jù)都會(huì)顯示,右表中只有符合連接條件的才會(huì)顯示
  • 使用:outer可省
  • 左外連接和右外連接就是leftright的不同,位置不同,通常用左外連接
  • 使用:
-- 查詢所有的員工信息及符合連接條件的部門信息
select e.*,d.*
from employees e LEFT JOIN departments d
ON e.department_id=d.department_id

全外連接:

  • 將兩個(gè)查詢結(jié)果進(jìn)行合并顯示

查詢語句1 union 查詢語句2

  • 使用:
-- 內(nèi)連接
select e.*,d.*  
from employees e inner join departments d
on  e.department_id=d.department_id

union -- 對(duì)內(nèi)連接和左連接的查詢結(jié)果進(jìn)行合并

-- 左連接
select e.*,d.*
from employees e LEFT JOIN departments d
ON e.department_id=d.department_id
  • union會(huì)對(duì)合并結(jié)果進(jìn)行去重
  • union all不會(huì)對(duì)結(jié)果去重
  • 特點(diǎn):合并雙方都不做約束
  • 合并雙方的查詢結(jié)果字段的個(gè)數(shù)、順序必須一致

實(shí)際開發(fā)中,使用頻率較高的是內(nèi)連接和左外連接

3、自連接

  • 概念:是特殊的表連接,參與連接的是同一張表

具體使用:

表中的某兩個(gè)字段之間存在關(guān)聯(lián)關(guān)系

-- 查詢:?jiǎn)T工id、員工姓名-firstname、直接領(lǐng)導(dǎo)的id、直接領(lǐng)導(dǎo)的姓名
select e1.employee_id 員工id,e1.first_name 員工姓名,e2.employee_id 領(lǐng)導(dǎo)id,e2.first_name 領(lǐng)導(dǎo)姓名
from employees e1 LEFT JOIN employees e2-- e1代表獲取員工信息的表,e2代表獲取領(lǐng)導(dǎo)信息的表
ON e1.manager_id=e2.employee_id -- 把兩個(gè)有關(guān)聯(lián)關(guān)系的字段作為連接條件

判斷同一字段,作為連接條件

-- 查詢工資相同的員工信息
select e1.employee_id 員工1的id,e1.salary 員工1的工資,e2.employee_id 員工2的id,e2.salary 員工2的工資
from employees e1 LEFT JOIN employees e2
on e1.salary=e2.salary -- 連接條件
where e1.employee_id<e2.employee_id -- 防止判斷的雙方是同一個(gè)人,并去重

到此這篇關(guān)于MySQL查詢進(jìn)階從函數(shù)到表連接的使用的文章就介紹到這了,更多相關(guān)MySQL函數(shù)表連接內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL數(shù)據(jù)庫分區(qū)概念及使用

    MySQL數(shù)據(jù)庫分區(qū)概念及使用

    本文主要介紹了數(shù)據(jù)庫分區(qū)的基本概念,分區(qū)類型以及如何在MySQL中實(shí)現(xiàn)分區(qū),可以提高查詢性能和管理效率,實(shí)現(xiàn)分區(qū)需要根據(jù)具體的業(yè)務(wù)需求選擇合適的分區(qū)類型,感興趣的可以了解一下
    2024-10-10
  • MySQL數(shù)據(jù)庫大小寫敏感的問題

    MySQL數(shù)據(jù)庫大小寫敏感的問題

    今天小編就為大家分享一篇關(guān)于MySQL數(shù)據(jù)庫大小寫敏感的問題,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • MySQL轉(zhuǎn)換Oracle的需要注意的七個(gè)事項(xiàng)

    MySQL轉(zhuǎn)換Oracle的需要注意的七個(gè)事項(xiàng)

    有很多應(yīng)用項(xiàng)目, 剛起步的時(shí)候用MySQL數(shù)據(jù)庫基本上能實(shí)現(xiàn)各種功能需求,隨著應(yīng)用用戶的增多,數(shù)據(jù)量的增加,MySQL漸漸地出現(xiàn)不堪重負(fù)的情況:連接很慢甚至宕機(jī),于是就有MySQL轉(zhuǎn)換Oracle的需求,應(yīng)用程序也要相應(yīng)做一些修改。
    2010-12-12
  • 解決mysql登錄錯(cuò)誤:''Access denied for user ''root''@''localhost''

    解決mysql登錄錯(cuò)誤:''Access denied for user ''root''@''localhost''

    這篇文章主要介紹了mysql登錄錯(cuò)誤:'Access denied for user 'root'@'localhost',本文給出了操作過程及注意事項(xiàng),需要的朋友可以參考下
    2019-11-11
  • 導(dǎo)致MySQL索引失效的一些常見寫法總結(jié)

    導(dǎo)致MySQL索引失效的一些常見寫法總結(jié)

    這篇文章主要給大家介紹了關(guān)于導(dǎo)致MySQL索引失效的一些常見寫法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • MySQL詳解進(jìn)行JDBC編程與增刪改查方法

    MySQL詳解進(jìn)行JDBC編程與增刪改查方法

    JDBC是指Java數(shù)據(jù)庫連接,是一種標(biāo)準(zhǔn)Java應(yīng)用編程接口( JAVA API),用來連接 Java 編程語言和廣泛的數(shù)據(jù)庫。從根本上來說,JDBC 是一種規(guī)范,它提供了一套完整的接口,允許便攜式訪問到底層數(shù)據(jù)庫
    2022-06-06
  • MySQL命令行導(dǎo)出導(dǎo)入數(shù)據(jù)庫實(shí)例詳解

    MySQL命令行導(dǎo)出導(dǎo)入數(shù)據(jù)庫實(shí)例詳解

    這篇文章主要介紹了MySQL命令行導(dǎo)出導(dǎo)入數(shù)據(jù)庫實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • mysql 5.7.14 安裝配置簡(jiǎn)單教程

    mysql 5.7.14 安裝配置簡(jiǎn)單教程

    這篇文章主要為大家分享了mysql 5.7.14安裝配置方法圖文教程,一看就會(huì)的mysql 5.7.14安裝教程,感興趣的朋友可以參考一下
    2016-08-08
  • 淺談mysql可有類似oracle的nvl的函數(shù)

    淺談mysql可有類似oracle的nvl的函數(shù)

    下面小編就為大家?guī)硪黄獪\談mysql可有類似oracle的nvl的函數(shù)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • MySQL幾點(diǎn)重要的性能指標(biāo)計(jì)算和優(yōu)化方法總結(jié)

    MySQL幾點(diǎn)重要的性能指標(biāo)計(jì)算和優(yōu)化方法總結(jié)

    下面小編就為大家?guī)硪黄狹ySQL幾點(diǎn)重要的性能指標(biāo)計(jì)算和優(yōu)化方法總結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03

最新評(píng)論

罗源县| 新乐市| 宣武区| 育儿| 石门县| 陇南市| 慈溪市| 云梦县| 蓬安县| 娱乐| 香河县| 龙游县| 滕州市| 郓城县| 绿春县| 中江县| 姜堰市| 赤峰市| 合水县| 年辖:市辖区| 高邮市| 内乡县| 通化县| 改则县| 新郑市| 尚义县| 新邵县| 长海县| 汶川县| 东乌珠穆沁旗| 门头沟区| 米泉市| 长乐市| 黔江区| 鲁山县| 青海省| 杭州市| 夏津县| 全南县| 连州市| 永年县|