Mysql基礎編寫sql案例(一)

来源:https://www.cnblogs.com/sdayup/archive/2020/07/12/13289144.html
-Advertisement-
Play Games

資料庫裡面的資料庫sql文件:https://blog.csdn.net/GongmissYan/article/details/102937816 #基礎查詢 /* 語法:、 select 查詢列表 from 表名; 查詢列表可以是,表中的欄位,常量值 表達式,函數 查詢的表格是一個虛擬的表 */ ...


資料庫裡面的資料庫sql文件:https://blog.csdn.net/GongmissYan/article/details/102937816

#基礎查詢
/*
    語法:、
        select 查詢列表
        from 表名;
        
查詢列表可以是,表中的欄位,常量值 表達式,函數
查詢的表格是一個虛擬的表
*/

# 查詢單個欄位
select last_name from employees

# 查詢多個欄位
select last_name ,salary,email from employees

#查詢表中的所有欄位(儘量不要使用*如果欄位明確使用欄位)使用*號的順序是和原始表的順序是一樣的
select * from employees

#查詢常量值
SELECT 100 as 這個是100

#查詢函數
select VERSION()

#起別名(在查詢的時候如果有重名的情況,可以通過別名來區分)
select 100 as 這裡是別名
select 100 這裡是別名
> 如果別名裡面包含了關鍵字最好通過引號引用起來

#去重:通過DISTINCT來去重
SELECT DISTINCT department_id from employees

# +號的作用
#sql中的+號的作用只是做為運算符
/*
* select 100+90兩個操作數都是數值型,則做加法運算
* select '123' + 90 如果一方為字元串類型,字元數值轉換成數值類型
*    如果轉換成功就進行加法運算
*         如果轉換失敗就將字元型數值置為0
* select null + 90 在加法運算中不管那一方為Null結果都是null
*/
SELECT  FROM employees

#字元串拼接(在字元串拼接的時候使用的是CONCAT)
select CONCAT(last_name,first_name) from employees

# 條件查詢
/*
select 查詢列表 From 表名 where 篩選條件
*/

# 按條件表達式篩選
select * from employees where salary > 12000

#查詢員工部門編號不是90的員工我姓名和部門的ID
select CONCAT(last_name,first_name) as 員工名,e.department_id from employees e WHERE department_id <> 90

#查詢工資在10000到20000之間的員工名,工資以及獎金
SELECT
    CONCAT( last_name, first_name ) AS 員工名,
    salary AS 工資,
    commission_pct * salary AS 獎金 
FROM
    employees 
WHERE
    salary > 10000 
    AND salary < 20000
    
# 查詢部門編號不是在90到110之間,或者工資高於15000的員工信息
SELECT
    * 
FROM
    employees 
WHERE
    department_id < 90 AND department_id > 110 
    OR salary > 15000

# 模糊查詢
/*
* like
* between and
* in
* is null |is not null
*/
# LIKE
/*
* %任意多的字元包含0個
* _ 任意單個字元
*/
SELECT
    * 
FROM
    employees 
WHERE
    last_name LIKE ( '%a%' )
#查詢員工名字第三個字元為e每5個字元為a的
SELECT * from employees WHERE last_name LIKE '__e_a%'
#查詢第二個字元是_的
SELECT last_name FROM employees WHERE last_name LIKE '_\_%';
SELECT last_name FROM employees WHERE last_name LIKE '_$_%' ESCAPE '$';

#between and
# 包含兩個臨界值的
# 兩個臨界值不可以互換的
#查詢員工編號在100    到120之間的員工信息
SELECT * FROM employees WHERE department_id BETWEEN 100 and 120

# in
# 查詢員工的工種編號
SELECT
    last_name,
    job_id 
FROM
    employees 
WHERE
    job_id IN ( 'AD_PRES', 'AD_VP', 'IT_PROT' )

# is null
# 案例:查詢沒有獎金的員工名和獎金率
SELECT
    last_name,
    commission_pct 
FROM
    employees 
WHERE
    commission_pct IS NULL
#案例:查詢有獎金的員工名和獎金率
SELECT
    last_name,
    commission_pct 
FROM
    employees 
WHERE
    commission_pct IS NOT NULL
    
# 案例:查詢員工號為176的員工的姓名和部門號和年薪
SELECT
    last_name,
    salary * 12 *(1+IFNULL(commission_pct,0))
    FROM employees
    WHERE employee_id = '176'
    
# 查詢沒有獎金,且工資小於18000的salay,last_name
SELECT
    salary,
    last_name 
FROM
    employees 
WHERE
    commission_pct IS NULL 
    AND salary < 18000
    
# 查詢employees表中,job_id不為'IT'或者工資為12000的員工信息
SELECT
    * 
FROM
    employees 
WHERE
    job_id <> 'IT' 
    OR salary = 12000
    
# 查看Departments結構
DESC departments
    
# 查詢departments表中涉及到了哪些位置的編號
SELECT DISTINCT
    location_id 
FROM
    departments 
WHERE
    location_id IS NOT NULL
    
# 排序查詢
/*
* select 查詢列表 from 表 【where篩選】 order by 排序列表[asc 升序|desc 降序]
* 預設是asc asc可以不寫
*/
# 案例:查詢員工的信息,要求工資從高到低排序
SELECT
    * 
FROM
    employees 
ORDER BY
    salary DESC
    
# 案例:查詢部門編號 >= 90 的員工信息,按入職時間
SELECT * FROM employees WHERE department_id >= 90 
ORDER BY
    hiredate DESC
    
# 案例:按年薪的高低顯示員工的信息和年薪【按表達式】
SELECT
    *,
    salary * 12 + ( 1+ IFNULL( commission_pct, 0 ) ) a 
FROM
    employees 
ORDER BY
    a DESC
    
# 查詢姓名的長度來顯示員工的姓名和工資【按函數排序】
SELECT LENGTH(last_name) a,salary FROM employees ORDER BY a DESC

# 查詢員工信息,要求先按員工資排序,再按員工編號排序
SELECT
    * 
FROM
    employees 
ORDER BY
    salary ASC,
    employee_id DESC
    
# 查詢員工的姓名和部門號和年薪,按年薪降序,按姓名升序
SELECT
    last_name,
    department_id,
    12 * salary + ( 1+ IFNULL( commission_pct, 0 ) ) 年薪
FROM
    employees
ORDER BY 年薪 DESC,last_name ASC

# 選擇工資不在8000到17000的員工的姓名和工資,按工資降序
SELECT
    last_name,
    salary 
FROM
    employees 
WHERE
    !(salary BETWEEN 8000 
    AND 17000)
ORDER BY
    salary DESC
    
# 查詢郵箱中包含e的員工信息,並按郵箱的位元組數降序,再按部門號升序
SELECT
    * 
FROM
    employees 
WHERE
    email LIKE '%e%' 
ORDER BY
    LENGTH( email ) DESC,
    department_id ASC
    
# 常見函數
/*
*    單行函數:
*            字元函數
*                    length、concat、upper、lower、substr、instr、trim、lpad、rpad、replace
*            數學函數
*                    round、ceil、floor、truncate
*            日期函數
*                    now、curdate、curtime、year、day、month、monthname、str_to_date、date_format
*            其它函數
*                    version、database、user
*         流程式控制制函數
*                    if、case
*
*/
# 案例:將姓變大寫,名就能小寫,然後拼接
SELECT CONCAT(UPPER(first_name),'_',LOWER(last_name)) FROM employees;
    
# 姓名中首字母大寫,其它的字元小寫,然後通過_拼接,顯示出來
SELECT
    CONCAT(
    UPPER( SUBSTR( last_name, 1, 1 ) ),
    '_',
    LOWER( SUBSTR( last_name, 1 ) ) 
    ) 
FROM
    employees;
    
# instr用於返回子串在父串裡面的起始索引(第一次出現的索引)
    
# trim 去掉前後面的空格
# 案例去掉字元串裡面的前後的a
SELECT TRIM('a' FROM 'aaaaaaaBaaaa')
    
# lpad 如果字元串的長度不為二參值,就會通過&來填滿左側
SELECT lpad('兔兔',10,'&')
# rpad 如果字元串的長度不為二參值,就會通過&來填滿左側
SELECT rpad('兔兔',10,'&')
#把下麵字元串中的cc替換成zz
SELECT replace('bbccaa','cc','zz')

#四捨五入
SELECT ROUND(-1.5)
#小數點後面保留兩位
SELECT ROUND(-1.5456,2)

#向上取整
SELECT ceil(1.10)
#向下取整
SELECT FLOOR(1.1)
# truncate 截斷
SELECT TRUNCATE(1.8999,1)
# mod取餘
SELECT MOD(10,3)
# now返回當前系統日期+時間
SELECT now();
# curdate返回當彰系統的日期 不包含時間
SELECT CURDATE()
#curtime 返回當前的時間,不包含日期
SELECT CURTIME()
#可以獲取指定的部分
SELECT year(NOW())
SELECT MONTH(NOW()
SELECT DAY(now())
SELECT MONTHNAME(NOW())

# 將字元串的日期轉換成date格式
SELECT STR_TO_DATE('2020-07-9','%Y-%c-%d')
#將日期轉換成字元
SELECT DATE_FORMAT(NOW(),'%y年%c月%d日')
#查詢有獎金的員工名和入職日期(xx月/xx日 xx年)
    SELECT
        last_name,
        DATE_FORMAT( hiredate, '%m月/%d日 %Y年' ) 
    FROM
        employees 
    WHERE
        commission_pct IS NOT NULL

    # 查詢員工是否有獎金有就顯示有沒有就顯示沒有
    SELECT
        last_name,
        commission_pct,
    IF
        ( commission_pct, '有', '沒有' ) 
    FROM
    employees
    
# 查詢員工名,姓名,工資,以及工資提高百分之20%後的結果
SELECT last_name,salary,salary * 1.2 FROM employees 
# 將員工的姓名按首字元排序,並寫出姓名的長度(length)
    SELECT
        last_name
    FROM
        employees ORDER BY SUBSTR( last_name, 1, 1 ) ASC
#分組函數
/*
* 功能:用作統計使用,又稱為聚合函數或統計函數或組函數
*	分類:
*			sum求和 avg 平均 Max min count
*			sum avg 不可以放字元類型 日期也不可以
*			max min 是可以使用字元的  日期也支持
*     count 計算不為null個數,支持所有的類型 myisam存儲引擎下效率最高,因為它有一個內部的計數器
*/
# 查詢員工表中的最大入職時間和最小入職時間,並計算出它們的相差的天數
SELECT
	DATEDIFF( MAX( hiredate ), MIN( hiredate ) ) 
FROM
	employees;
# 查詢員工編號為90的員工個數
SELECT
	COUNT( * ) 
FROM
	employees 
WHERE
	department_id = 90;
	
# 分組查詢
#查詢每個部門的平均工資
SELECT
	AVG( salary ) 平均工資,
	department_id 部門編號 
FROM
	employees 
GROUP BY
	department_id;
# 查詢每個工種的最高工資
SELECT
	MAX( salary ) 最高工資,
	job_id 
FROM
	employees 
GROUP BY
	job_id
#查詢郵箱中包含a字元的,每個部門的平均工資
SELECT
	AVG( salary ),
	department_id
FROM
	employees 
WHERE
	email LIKE '%a%'
GROUP BY department_id
#查詢有獎金的每個領導手下員工的最高工資
SELECT
	MAX( salary ),
	manager_id
FROM
	employees 
WHERE
	commission_pct IS NOT NULL
GROUP BY manager_id
	
# 查詢那個部門的員工個數大於2
SELECT
	count( * ) a,
	department_id 
FROM
	employees 
GROUP BY
	department_id 
HAVING
	a > 2
# 查詢每個工種有獎金的員工的最高工資>12000的工種編號和最高工資
# 1. 查詢每個工種有獎金的員工的最高工資
SELECT
	MAX( salary ),
	job_id 
FROM
	employees 
	WHERE
commission_pct is not NULL
GROUP BY
	job_id
# 在1的基礎上結果上篩選 最高工資大於12000的
SELECT
	MAX( salary ) a,
	job_id 
FROM
	employees 
WHERE
	commission_pct IS NOT NULL 
GROUP BY
	job_id 
HAVING
	a > 12000
# 查詢領導編號>102的每個領導手下的最低工資>5000的領導編號是哪個,
#以及其最低工資
SELECT
	MIN( salary ) a,
	manager_id 
FROM
	employees 
WHERE
	manager_id > 102 
GROUP BY
	manager_id 
HAVING
	a > 5000
	
# 案例:按員工姓名的長度分組,查詢每一組的員工個數,
# 篩選員工個數大於5的有那些
SELECT
	count(*) c,LENGTH(last_name)
FROM
	employees 
GROUP BY
	LENGTH( last_name )
HAVING c > 5
	
# 查詢每個部門每個工種的員工的平均工資
SELECT AVG(salary) a,department_id,job_id
FROM employees
GROUP BY department_id,job_id
# 查詢每個部門每個工種的員工的平均工資 根據平均工資的高低來排序
SELECT AVG(salary) a,department_id,job_id
FROM employees
GROUP BY department_id,job_id
ORDER BY a DESC
#查詢各job_id的員工工資的最大值,最小值,平均值,總和,並按job_id升序
SELECT
	MAX( salary ),
	MIN( salary ),
	AVG( salary ),
	SUM( salary ),
	job_id
FROM
	employees 
GROUP BY
	job_id
ORDER BY job_id
	
# 查詢員工最高工資和最低工資的差距
SELECT MAX(salary) - MIN(salary) FROM employees;
#查詢各管理者手下員工的最低工資,其中最低工資不能低於6000
# 沒有管理者的員工不能計算在內
SELECT
	MIN( salary ) m,
	manager_id 
FROM
	employees 
WHERE
	manager_id IS NOT NULL 
GROUP BY
	manager_id 
HAVING
	m > 6000
	
# 查詢所有部門的編號,員工數量和工資平均值,並按平均工資降序
SELECT
	department_id,
	COUNT( * ) , AVG( salary ) a
FROM
	employees 
GROUP BY
	department_id 
ORDER BY
	a DESC
# 選擇具有各個job_id 的員工人數
SELECT
	COUNT(*) 
FROM
	employees 
GROUP BY
	job_id
#自連接
# 查詢 員工名和上級的名稱
SELECT
	e.last_name,
	m.last_name
FROM
	employees e,
	employees m
WHERE e.manager_id = m.employee_id

# 顯示員工表的最大工資,工資平均值
SELECT MAX(salary),AVG(salary) FROM employees
#查詢員工表的employee_id,job_id,
# last_name 按department_id降序,按salay升序
SELECT
	employee_id,
	job_id,
	last_name 
FROM
	employees 
ORDER BY
	department_id DESC,
	salary ASC
#查詢員工表的Job_id包含,a和e的,並且a在e前面
SELECT * FROM employees WHERE job_id like '%a%e%'
	
# 顯示當前的日期,以及去前後空格,截取字元串的函數
SELECT TRIM(NOW()) 
#查詢90號部門員工的job_id和90號部門的Location_id
SELECT
	e.job_id,
	d.location_id 
FROM
	employees e,
	departments d 
WHERE
	e.department_id = d.department_id 
	AND e.department_id = 90
# 顯示所有有獎金的員工的last_name,
#department_name.location_id,city
SELECT
	e.last_name,
	d.department_name,
	d.location_id,
	l.city 
FROM
	employees e,
	departments d,
	locations l 
WHERE
	e.commission_pct IS NOT NULL 
	AND e.department_id = d.department_id
	and d.location_id = l.location_id
#內連接
#查詢部門的個數>3的城市名和部門個數
SELECT
	city,
	COUNT( * ) c 
FROM
	departments d
	INNER JOIN locations l ON d.location_id = l.location_id 
GROUP BY
	city 
HAVING
	c > 3

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 動態引入技術的設計,對我們來說非常重要。 同時也說明動態語言的使用對我們來說也是非常重要。 沒有動態語言的支撐,有些想法可能不容易實現,或者有替代方案,可能會花更大的代價。 前端開發框架我們規劃設計了 apis文件夾 這個文件夾是用來存放所有的api定義的 規範要求 所有的api定義都是名動詞 同時 ...
  • 最近GRPC很火,感覺整RPC不用GRPC都快跟不上時髦了。 gRPC設計 gRPC是一種與語言無關的高性能遠程過程調用 (RPC) 框架。剛好需要使用一個的RPC應用系統,自然而然就盯上了它,但是它真能夠解決所有問題嗎?不見得,先看看他的優點: gRPC的主要優點: 現代高性能輕量級 RPC 框架 ...
  • 瞭解到了OrchardCore主要由兩個中間件(ModularTenantContainerMiddleware和ModularTenantRouterMiddleware)構成,下麵開始瞭解ModularTenantContainerMiddleware中間件第一行代碼。 瞭解asp.net co ...
  • 什麼是設計模式 ​ 要瞭解設計模式,首先得清楚什麼是模式。什麼是模式?模式即解決一類問題的方法論,簡單得來說,就是將解決某類問題的方法歸納總結到理論高度,就形成了模式。 ​ 設計模式就是將代碼設計經驗歸納總結到理論高度而形成的。其目的就在於:1)可重用代碼,2)讓代碼更容易為他人理解,3)保證代碼的 ...
  • [ 導讀] 本文通過閱讀內核代碼,來梳理一下I2C子系統的整體視圖。在開發I2C設備驅動程式時,往往缺乏對於系統整體的認識,導致沒有一個清晰的思路。所以從高層級來分析一下I2C系統的設計思路,將有助於設計調試具體的驅動程式。 I2C/SMBUS基礎 I2C是一種晶元間通訊匯流排技術,最早由Philip ...
  • 容器是一種清理級、可移植、自包含的軟體打包技術,使應用程式可以在幾乎任何地方以相同的方式運行。 ...
  • 目前CSDN,博客園,簡書同步發表中,更多精彩歡迎訪問我的gitee pages Hadoop簡介和安裝及偽分散式 大數據概念 大數據概論 大數據(Big Data): 指無法在一定時間範圍內用常規軟體工具進行捕捉,管理和處理的數據集合,是需要新處理模式才能具有更強的決策力,洞察發現力和流程優化能力 ...
  • 愉快的時光總是過得很快,月亮悠哉游哉爬上了半空遙望著太陽。上一篇中剩餘排序還沒回顧,本篇就暫時先來回顧一下排序吧! 特點: 1.ASC 代表升序,DESC代表降序 2.如果不寫預設就是升序 3.ORDER BY 後面支持單個欄位,多個欄位,表達式,函數,別名 4.ORDER BY 子句一般是放在查詢 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...