MySQL基礎 [六] - 內置函數+復合查詢+表的內連和外連

內置函數一般要用select調用

內置函數

日期函數

current_date函數

current_date函數用于獲取當前的日期。如下:?

current_time函數

current_time函數用于獲取當前的時間。如下:

now函數

now函數用于獲取當前的日期時間。如下:

?date函數

date函數用于獲取當前的日期時間。如下:

date_add函數?

date_add函數用于在日期的基礎上添加日期或時間。如下:

如果在date_add函數中添加的日期/時間為負值,則相當于在日期的基礎上減去日期/時間。如下:

date_sub函數

date_sub函數用于在日期的基礎上減去日期或時間。如下:

如果在date_sub函數中減去的日期/時間為負值,則相當于在日期的基礎上添加日期/時間。如下:

datediff函數

datediff函數用于獲取兩個日期的差,單位是天。如下:

綜合案例?

創建一個評論表,表中包含自增長的主鍵id、昵稱、評論內容和評論時間。如下:

向表中插入一些數據,插入時直接通過now函數指明評論時間。如下:

在顯示評論信息時,如果只想顯示評論的日期而不顯示評論的時間,可以在查詢sendtime字段時,通過date函數截取sendtime的日期部分進行顯示。如下:

再不定時向表中插入一些數據。如下:

在顯示評論信息時,如果要查詢2分鐘內發布的評論信息,實際就是要篩選出評論時間加上2分鐘后大于當前時間的評論,這時需要同時借助date_add和now函數。如下:

字符串函數

charset函數

現有如下員工表,要求獲取員工表中ename列使用的字符集。如下:

在查詢員工表中的信息時,使用charset函數獲取ename列使用的字符集即可。如下:

?concat函數

現有如下成績表,要求以“XXX的語文是XX分,數學是XX分,英語是XX分”的格式顯示成績表中的信息。如下:

在查詢成績表中的信息時,使用concat函數按要求進行字符串連接即可。如下:

instr函數

?instr函數用于獲取一個字符串在另一個字符串中首次出現的位置,如果沒有出現則返回0。如下:

ucase函數

ucase函數用于獲取轉換成大寫后的字符串。如下:

lcase函數

lcase函數用于獲取轉換成小寫后的字符串。如下:

left函數

left函數用于從字符串的左邊開始,向后截取指定個數的字符。如下:

length函數

length函數用于獲取字符串占用的字節數。如下:

說明一下:?對于多字節字符來說,不同編碼中一個字符所占的字節個數是不同的,比如utf8中一個字符占用3個字節,而gbk中一個字符占用2個字節。

replace函數

replace函數用于將字符串中的指定子字符串替換成另一個字符串,例如將員工表中所有名字中的“S”替換成“上海”。如下:

strcmp函數

strcmp函數用于逐字符按照ASCII碼比較兩個字符串的大小,兩個字符串大小相等返回0,前者大返回1,后者大返回-1。如下:

需要注意的是,strcmp函數在比較時是不區分大小寫的。如下:

ltrim、rtrim和trim函數

數學函數

其他函數

復合查詢(重點)

基本查詢

對同一張表做笛卡爾積

all關鍵字;顯示工資比部門30的所有員工的工資高的員工的姓名、工資和部門號?

先用基本的方法寫?

?

多列子查詢?

單行子查詢是指子查詢只返回單列,單行數據;多行子查詢是指返回單列多行數據,都是針對單列而言的,而多列子 查詢則是指查詢返回多個列數據的子查詢語句

查詢和SMITH的部門和崗位完全相同的所有雇員,不含SMITH本人??

查詢思路:先查詢SMITH屬于哪個部門的,然后再用多列子查詢,查詢出來和SMITH的部門和崗位完全相同的所有雇員,最后再排除SMITH本人

mysql> select ename from EMP where (deptno, job)=
(select deptno, job from EMP where ename='SMITH') and ename <> 'SMITH';

?也可以用?in 把?和SMITH的部門和崗位完全相同的所有雇員?看成一對?

總結:目前全部的子查詢,全部都在where子句中,充當判斷條件。任何時刻,查詢出來的臨時結構,本質在邏輯上也是表結構。MySQL中一切皆表

在from子句中使用子查詢

顯示每個高于自己部門平均工資的員工的姓名、部門、工資、平均工資

思路過程:第一步:先查找所有部門的平均薪資,然后再分組查找每個部門的平均薪資,最后再把每個部門的平均薪資的結果充當個臨時表,搭配from。注意要起別名

第二步:有些數據是沒意義的,就好比SMITH是20號部門的,你給她個10號部門的平均薪資,是沒有意義的,所以我們要用笛卡爾積給去除掉

?最后在進行篩選大于平均工資的

附加條件:順便顯示在哪個地方工作?

部門的工作地點是在dept中,所以是先用笛卡爾積,我們上面按照需要篩選出來的員工跟部門表進行合并,起個別名為t1

然后去掉無效信息

再按照所要求的信息。需要符合要求的員工名稱,部門地點,部門

查找每個部門工資最高的人的姓名、工資、部門、最高工資???

select EMP.ename, EMP.sal, EMP.deptno, ms from EMP, 
(select max(sal) ms, deptno from EMP group by deptno) tmp where EMP.deptno=tmp.deptno and EMP.sal=tmp.ms;

肯定是先聚合,先把每個部門工資的薪資先找到

?把這個結果作為臨時表與emp表進行笛卡爾積組合

?然后進行篩選去掉無效信息

最后按照要求

?顯示每個部門的信息(部門名,編號,地址)和人員數量

??方法1:使用多表(不推薦,因為為了要照顧group by語法結構,還需要對多個數據進行分組)

select DEPT.dname, DEPT.deptno, DEPT.loc,count(*) '部門人數' from EMP, DEPT
where EMP.deptno=DEPT.deptno
group by DEPT.deptno,DEPT.dname,DEPT.loc;

過程:先統計每個部門有多少人,然后按照部門分組

然后進行笛卡爾積,把兩個表放在一起,去除無效信息

最后再按照要求

?方法2:使用子查詢

先進行分組計算每個部門的人數,然后進行聚合

最后再按照要求?

解決多表問題的本質:想辦法將多表轉換成單表,所以mysql中,所有select的問題全部都可以轉換成單表問題(多表查詢的指導思想)

合并查詢(用得不多)

在實際應用中,為了合并多個select的執行結果,可以使用集合操作符 union,union all

union

該操作符用于取得兩個結果集的并集。當使用該操作符時,會自動去掉結果集中的重復行。

將工資大于2500或職位是MANAGER的人找出來 ?

mysql> select ename, sal, job from EMP where sal>2500 union -> select ename, sal, job from EMP where job='MANAGER';//去掉了重復記錄

步驟如下,union會幫你去重

union all

該操作符用于取得兩個結果集的并集。當使用該操作符時,不會去掉結果集中的重復行。

案例:將工資大于25000或職位是MANAGER的人找出來

mysql> select ename, sal, job from EMP where sal>2500 union all -> select ename, sal, job from EMP where job='MANAGER';

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/75969.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75969.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/75969.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CS內網滲透 - 如何通過冰蝎 Webshell 上線 Weblogic 服務器到 Cobalt Strike 并繞過殺軟檢測(360、火絨)?

目錄 1. 冰蝎連接上 Weblogic 服務器如何上線到 Cobalt Strike 2. 服務器安裝殺毒工具如何繞過殺軟上線到 Cobalt Strike 2.1 殺軟對 Webshell 命令執行的檢測及繞過 2.2 殺軟對 Cobalt Strike 上線木馬的檢測及繞過 2.3 殺軟對這兩方面的限制及綜合繞過 3. 如何生成免殺…

[ctfshow web入門] web10

前置知識 cookie Cookie是網站存儲在瀏覽器中的小數據片段&#xff0c;用于識別用戶、保持登錄狀態或記住偏好設置。 也就是說&#xff0c;我以會員A的身份登錄了網站&#xff0c;網站會發送一段cookie(會員卡)給我&#xff0c;上面寫著會員卡A&#xff0c;下一次我再訪問&am…

藍橋杯:日期統計

文章目錄 問題描述解法一遞歸解法二&#xff1a;暴力破解 問題描述 首先我們要了解什么是子序列&#xff0c;就是一個序列之中可以忽略元素但是不能改變順序之后獲得的序列就叫做子序列。 如"123"就是"11234"的子序列而不是"11324"的子序列 解法…

藍橋杯 C/C++ 組歷屆真題合集速刷(一)

一、1.單詞分析 - 藍橋云課 &#xff08;模擬、枚舉&#xff09;算法代碼&#xff1a; #include <bits/stdc.h> using namespace std;int main() {string s;cin>>s;unordered_map<char,int> mp;for(auto ch:s){mp[ch];}char result_charz;int max_count0;fo…

重塑知識的引擎:人工智能如何改變知識的生產與傳播

一、引言&#xff1a;知識的邊界正在被人工智能重構 千百年來&#xff0c;人類對于“知識”的獲取方式一直遵循著某種路徑依賴&#xff1a;感知現實 → 歸納總結 → 文字表達 → 教育傳承 → 學術沉淀。這一過程復雜而緩慢&#xff0c;需要經過代際的努力才能實現知識的積累與…

list的底層:

我們之前講解了list&#xff0c;今天我們來看一下list的底層&#xff1a; list底層是一個雙向帶頭循環的鏈表&#xff0c;之前我們學習數據結構的時候&#xff0c;我們就學過。 迭代器的封裝&#xff1a; 我們看這個圖片&#xff0c;我們的鏈表的指針可以達到鏈表的迭代器能力…

遵循IEC62304YY/T0664:確保醫療器械軟件生命周期合規性

一、EC 62304與YY/T 0664的核心定位與關系 IEC 62304&#xff08;IEC 62304&#xff09;是國際通用的醫療器械軟件生命周期管理標準&#xff0c;適用于所有包含軟件的醫療器械&#xff08;如嵌入式軟件、獨立軟件、移動應用等&#xff09;&#xff0c;其核心目標是確保軟件的安…

【next函數python】`next()`函數

在Python中&#xff0c;next()函數結合生成器表達式用于高效地查找序列中第一個符合條件的元素。以下是如何理解和編寫類似代碼的步驟&#xff1a; 1. 生成器表達式 生成器表達式&#xff08;如 (e for e in energy3 if e ! 0)&#xff09;是一種惰性計算的迭代結構。它不會一…

[創業之路-364]:穿透表象:企業投資的深層邏輯與誤區規避

前言&#xff1a; 透過現象看本質 企業一生與人生相似 看企業如同看人 三歲看大&#xff0c;七歲看老 三十年河東&#xff0c;三十年河西 企業也有品行、文化、氣質、性格、賺錢、生命周期與賺錢曲線 投資公司的目的是未來賺錢&#xff0c;賺未來賺錢。投資創業中的企業主要看…

【C++】Stack Queue 仿函數

&#x1f4dd;前言&#xff1a; 這篇文章我們來講講STL中的stack和queue。因為前面我們已經有了string、vector和list的學習基礎&#xff0c;所以這篇文章主要關注一些stack和queue的細節問題&#xff0c;以及了解一下deque&#xff08;縫合怪&#xff09;和priority_queue &am…

[實戰] 天線陣列波束成形原理詳解與仿真實戰(完整代碼)

天線陣列波束成形原理詳解與仿真實戰 1. 引言 在無線通信、雷達和聲學系統中&#xff0c;波束成形&#xff08;Beamforming&#xff09;是一種通過調整天線陣列中各個陣元的信號相位和幅度&#xff0c;將電磁波能量集中在特定方向的技術。其核心目標是通過空間濾波增強目標方…

深圳漫云科技戶外公園實景兒童劇本殺小程序:開啟親子互動新紀元

在親子娛樂需求日益增長的當下&#xff0c;深圳漫云科技推出的戶外公園實景兒童劇本殺小程序&#xff0c;憑借其創新玩法與豐富功能&#xff0c;為親子家庭帶來全新體驗。該小程序融合戶外探險、角色扮演與邏輯推理&#xff0c;不僅滿足孩子好奇心&#xff0c;更提升其思維能力…

HOW - 如何測試 React 代碼

目錄 一、使用 React 測試庫&#xff1a;testing-library/react二、使用測試演練場&#xff1a;testing-playground.com三、使用 Cypress 或 Playwright 進行端到端測試四、使用 MSW 在測試中模擬網絡請求 一、使用 React 測試庫&#xff1a;testing-library/react testing-li…

COBOL語言的網絡安全

COBOL語言與網絡安全&#xff1a;傳統語言的新挑戰 引言 COBOL&#xff08;Common Business-Oriented Language&#xff09;是一種早期編程語言&#xff0c;最初于1959年被開發出來&#xff0c;主要用于商業、金融和行政系統的處理。盡管年代久遠&#xff0c;COBOL在大型機系…

通過世界排名第一的免費開源ERP,構建富有彈性的智能供應鏈

概述 現行供應鏈模式的結構性弱點凸顯了對整個行業進行重塑的必要性。正確策略和支持可以幫助您重塑供應鏈&#xff0c;降低成本&#xff0c;實現業務轉型。開源智造&#xff08;OSCG&#xff09;所推出的Odoo免費開源ERP解決方案&#xff0c;將供應鏈轉化為具有快速響應能力的…

Android 開發中compileSdkVersion 和 targetSdkVersion

在 Android 開發中&#xff0c;compileSdkVersion 和 targetSdkVersion 是 build.gradle 文件中的兩個關鍵配置&#xff0c;它們分別控制應用的編譯行為和運行時兼容性。以下是它們的詳細區別和用途&#xff1a; 1. compileSdkVersion&#xff08;編譯版本&#xff09; 作用&a…

Qt QComboBox 下拉復選多選

Qt 中&#xff0c;QComboBox 默認只支持單選&#xff0c;但實際使用過程中&#xff0c;我們經常會碰到需要多選的情況&#xff0c;但是通過一些直接或者曲折的方法還是可以實現的。 1、通過 QListWidget 間接實現 這種方式是網上搜索最多的一種方式&#xff0c;也是相對來說比…

Selenium自動化:玩轉瀏覽器,搞定動態頁面爬取

嘿&#xff0c;各位爬蟲愛好者和自動化達人們&#xff01;是不是經常遇到這種情況&#xff1a;信心滿滿地寫好爬蟲&#xff0c;requests一把梭&#xff0c;結果抓下來的HTML里&#xff0c;想要的數據空空如也&#xff1f;定睛一看&#xff0c;原來數據是靠JavaScript動態加載出…

天梯賽 L2-023 圖著色問題

使用vector<vector<int>> g(N)去存儲邊&#xff0c;然后每次判斷每個節點的鄰節點是不是相同的顏色&#xff0c;需要注意的是不同的顏色一定需要為K種&#xff0c;不能多也不能少。 #include<bits/stdc.h> using namespace std; int main(){int n,m,k;cin&g…

在ubuntu24上裝ubuntu22

實驗室上有一臺只裝了ubuntu24的電腦&#xff0c;但是項目要求在22上進行 搞兩個ubuntu系統&#xff01; 步驟一&#xff1a;制作22的啟動盤 步驟二&#xff1a;進入bios安裝界面 步驟三&#xff1a;選擇try or install ubuntu 步驟四&#xff1a;選擇try ubuntu 步驟五&…