【編測編學】MySQL數據庫基礎知識2

一、常見函數:
字符函數:length concat substr instr trim upper lower lpad rpad replace
數學函數: round ceil floor truncate mod
日期函數:now curdate curtime year month monthname day hour minute second str_to_date date_format
1、 字符函數
#length 獲取參數值的字節個數
SELECT LENGTH('john');#4
SELECT LENGTH('張三丰hahaha');#15,utf8一個漢字佔3個字節
#concat 拼接字符串(用下劃線拼接)
SELECT CONCAT(lastname,'',first_name) FROM manba;
#upper,lower SELECT UPPER('john');#變大寫SELECT LOWER('JOHN');#變小寫
#示例:將姓變大寫,名變小寫,拼接
SELECT CONCAT(UPPER(last_name),LOWER(first_name)) AS 姓名 FROM manba;
#substr,substring
#注意索引從1開始,下語句輸出:和李四
#截取從指定索引處後面所有字符
SELECT SUBSTR('張三和李四',3) out_put;
#截取從指定索引處指定字符長度的字符
#下面語句輸出:張三
SELECT SUBSTR('張三和李四',1,2) out_put;
#案例:姓名中首字符大寫,其他字符小寫,用_拼接,顯示出來
SELECT CONCAT(UPPER(SUBSTR(lastname,1,1)),'',LOWER(SUBSTR(last_name,2))) output FROM manba;
#instr
#返回子串的起始索引,找不到返回0
SELECT INSTR('楊不悔愛上了殷六俠','殷六俠') AS out_put
#trim 去掉首尾的
#輸出張翠山
SELECT LENGTH(TRIM(' 張翠山 ')) AS out_put;
#輸出張aaaa翠山
SELECT TRIM('a' FROM 'aaaa張aaaa翠山aaaaaaaa') AS out_put;
#lpad 用指定的字符實現左填充指定長度
#輸出***殷素素
SELECT LPAD('殷素素',10,'') AS out_put;
#輸出:殷素
SELECT LPAD('殷素素',2,'

') AS out_put;
#rpad 用指定的字符實現右填充指定長度
#輸出:殷素素ababababa
SELECT RPAD('殷素素',12,'ab') AS out_put;
#replace 替換
SELECT REPLACE('張無忌愛上了周芷若','周芷若','趙敏') AS out_put;




































2、 數字函數
#round四捨五入
SELECT ROUND(1.65);#2
SELECT ROUND(-1.45);#-1
SELECT ROUND(1.567,2);#1.57,小數點後保留2位
#ceil向上取整(返回>=該參數的最小整數)
SELECT CEIL(-1.02);#-1
SELECT CEIL(1.00);#1
#floor 向下取整,返回<=該參數的最大整數
SELECT FLOOR(-9.99);#-10
#truncate 截斷
SELECT TRUNCATE(1.65,1);#1.6;
#mod 取餘
mod(a,b) : a-a/bb
mod(-10,-3) : -10-(-10)/(-3)
(-3)=-1;
SELECT MOD(10,-3);#1













3、 日期函數
#now:返回當前系統日期加時間
SELECT NOW();
#curdate 返回當前系統日期,不包含時間
SELECT CURDATE();
#curtime() 返回當前時間,不包含日期
SELECT CURTIME();
#可以獲取指定的部分,年,月,日,小時,分,秒
SELECT YEAR(NOW()) AS 年;
SELECT YEAR('1998-1-1') 年;
SELECT YEAR(hiredate) 年 FROM employees;
SELECT MONTH(NOW()) 月;
SELECT MONTHNAME(NOW()) 月;#顯示英文月份
#str_to_date 將日期格式的字符轉換成指定格式的日期
%Y 四位的年份
%y 2位的年份
%m 月份 (01,02,...12)
%c 月份(1,2,..., 12)
%d 日
%H小時(24)%h(12)
%i 分鐘 %s秒
SELECT STR_TO_DATE('9-13-1999','%m-%d-%Y') 日期;#1999-09-13
SELECT STR_TO_DATE ('2020-4-17','%Y-%c-%d') AS output;#2020-4-17
#查詢入職日期爲1992-4-3的員工信息
SELECT FROM employees WHERE hiredate='1992-4-3';
SELECT
FROM employees WHERE hiredate=STR_TO_DATE('4-3 1992','%c-%d %Y');
#date_format 將日期轉換成字符
SELECT DATE_FORMAT(NOW(),'%y年%m月%d日') AS output;#20年4月17日
#查詢有獎金的員工名和入職日期(xx月/xx日 xx年)
SELECT last_name,DATE_FORMAT(hiredate,'%m月/%d日 %Y年') 入職日期
FROM employees
WHERE commission_pct IS NOT NULL;





























4、 聚合函數
#簡單的使用
SELECT SUM(salary) FROM manba;
SELECT SUM(salary) 和,ROUND(AVG(salary),2) 平均 FROM manba;
SELECT MAX(salary) 最高,MIN(salary) 最低 FROM manba;
SELECT MIN(salary) FROM manba;
SELECT COUNT(salary) FROM manba;
#參數支持哪些類型
SELECT SUM(last_name),AVG(last_name) FROM manba;
SELECT SUM(hiredate),AVG(hiredate) FROM manba;
#無意義,不這樣用
SELECT MAX(last_name),MIN(last_name) FROM manba;
SELECT MAX(hiredate),MIN(hiredate) FROM manba;
#支持
SELECT COUNT(last_name) FROM manba;#計算非空的值 107 SELECT COUNT(commission_pct) FROM manba;#35
#是否忽略null
SELECT SUM(commission_pct),AVG(commission_pct) FROM manba;
#和distinct搭配
SELECT SUM(DISTINCT salary), SUM(salary) FROM manba;
SELECT COUNT(DISTINCT salary), COUNT(salary) FROM manba;
#count函數的詳細介紹
SELECT COUNT(salary) FROM manba;
SELECT COUNT(*) FROM manba;#統計每一列的數目,即所有行數
SELECT COUNT(1) FROM manba;#和上一語句效果一樣
#6、和分組函數一同查詢的字段有限制
SELECT AVG(salary),manba _id FROM manba;#這個員工id查出來沒有意義
























二、分組查詢
語法select分組函數(max,min等),列(要求出現在group by後面)fro表
【where 篩選條件】group by 分組的列表【order by】子句
注意:查詢列表必須特殊,要求是分組函數和group by後出現的字段
#簡單的分組查詢
#案例1:查詢每個工種的最高工資
SELECT MAX(salary),job_id
FROM manba
GROUP BY job_id;
#案例2:查詢每個位置上的部門個數
SELECT COUNT(),location_id
FROM departments
GROUP BY location_id;
#添加分組前篩選條件
#案例1:查詢郵箱中包含a字符的,每個部門的平均工資
SELECT AVG(salary),department_id
FROM manba
WHERE email LIKE '%a%'
GROUP BY department_id;
#案例2:查詢有獎金的每個領導手下員工的最高工資
SELECT MAX(salary),manager_id
FROM manba
WHERE commission_pct IS NOT NULL
GROUP BY manager_id;
#添加分組後的篩選條件
#案例1:查詢哪個部門的員工個數大於2
#①查詢每個部門的員工個數
SELECT COUNT(
















),department_id
FROM manba
GROUP BY department_id;
#②根據1的結果進行篩選
SELECT COUNT(),department_id
FROM manba
GROUP BY department_id
HAVING COUNT(


)>2;
#案例2:查詢每個工種有獎金的員工的最高工資>12000的 工種編號和其最高工資
#①查詢每個工種有獎金的員工的最高工資
SELECT MAX(salary),job_id
FROM manba
WHERE commission_pct IS NOT NULL
GROUP BY job_id;
#②根據1的結果繼續篩選,最高工資>12000
SELECT MAX(salary),job_id
FROM manba
WHERE commission_pct IS NOT NULL
GROUP BY job_id
HAVING MAX(salary)>12000;
#案例3:查詢領導編號>102的每個領導手下的最低工資>5000的領導編號
#①查詢領導編號>102的每個領導手下的最低工資
SELECT MIN(salary),manager_id
FROM manba
WHERE manager_id>102
GROUP BY manager_id;
#②在1的基礎上,最低工資>5000
SELECT MIN(salary),manager_id
FROM manba
WHERE manager_id>102
GROUP BY manager_id
HAVING MIN(salary)>5000
#按表達式或函數分組
#案例:按員工姓名的長度分組,查詢每一組的員工個數,篩選員工個數>5的
SELECT COUNT(),LENGTH(last_name) len_name
FROM manba
GROUP BY len_name
HAVING COUNT(


)>5;
#按多個字段分組
#案例:查詢每個部門每個工種的員工的平均工資
SELECT AVG(salary),department_id,job_id
FROM manba
GROUP BY department_id,job_id;
#添加排序
##案例:查詢每個部門每個工種的員工的平均工資,並將>10000的按高低排序
SELECT AVG(salary) a,department_id,job_id
FROM manba
GROUP BY department_id,job_id
HAVING a>10000
ORDER BY AVG(salary) DESC;
三、鏈接查詢(又稱多表查詢,當查詢的字段來自多個表,就會用到連接查詢)
語法:select 查詢列表
from 表1 別名 【連接類型】
join 表2 別名 on 【連接條件】
on 連接條件
【where 篩選條件】
【group by 分組】
【having 篩選條件】
【order by 排序列表】
分類:內連接:inner
外連接:左外 left 【outer】
右外 right 【outer】
全外 full 【outer】
交叉連接:cross
1、 內連接(等值連接、非等值連接、自連接)
#等值連接
#案例1:查詢哪個部門的部門員工個數>3的部門名,和員工個數,並按個數進行降序
SELECT COUNT(),department_name
FROM manba e
INNER JOIN departments d
ON e.department_id=d.department_id
GROUP BY department_name
HAVING COUNT(




)>3
ORDER BY COUNT() DESC;
#案例2:查詢員工名、部門名、工種名,並按部門名降序(三表連接)
SELECT last_name,department_name,job_title
FROM manba e
INNER JOIN departments d
ON e.department_id=d.department_id
INNER JOIN jobs j
ON e.job_id=j.job_id
ORDER BY department_name DESC;
#非等值
#查詢工資的個數>20的級別個數,並且按工資級別降序
SELECT COUNT(










),grade_level
FROM manbae
INNER JOIN job_grades g
ON e.salary BETWEEN g.lowest_sal AND g.highest_sal
GROUP BY grade_level
HAVING COUNT()>20
ORDER BY grade_level DESC;
#自連接
#查詢員工的名字,上級的名字
SELECT e.last_name,m.last_name
FROM manba e
JOIN manba m
ON e.manager_id=m.manba_id;
#加篩選:姓名中包含字符k的員工名字、上級名字
SELECT e.last_name,m.last_name
FROM manba e
JOIN manba m
ON e.manager_id=m.manba _id
WHERE e.last_name LIKE '%k%';
2、外連接
#查詢男朋友不在男生表的女生名
#左外連接
SELECT be.name,bo.

















FROM beauty be
LEFT OUTER JOIN boys bo
ON be.boyfriend_id=bo.id
WHERE bo.id IS NULL;
#右外連接
SELECT be.name,bo.*
FROM boys bo
RIGHT OUTER JOIN beauty be
ON be.boyfriend_id=bo.id
WHERE bo.id IS NULL;






















































































四、子查詢(出現在其他語句內部的select語句,稱爲子查詢或內查詢
外部的查詢語句,稱爲主查詢或外查詢)
1.查詢和Zlotkey相同部門的員工姓名和工資
SELECT last_name,salary
FROM manba
WHERE department_id=(
SELECT department_id
FROM manba
WHERE last_name='Zlotkey');
#2、查詢工資比公司平均工資高的員工的員工號,姓名,工資
SELECT last_name,employee_id,salary
FROM manba
WHERE salary>(SELECT AVG(salary)FROM manba);
#3、查詢各部門中工資比本部門平均工資高的員工號,姓名,工資
SELECT employee_id,last_name,salary,e.department_id
FROM manba e INNER JOIN(SELECT AVG(salary) ag,department_id
FROM manba
GROUP BY department_id)avg_dep
ON e.department_id=avg_dep.department_id
WHERE salary>avg_dep.ag;


















#4、查詢,和姓名中包含字母u的員工在相同部門的員工,的員工號和姓名
SELECT last_name,manba_id
FROM manba
WHERE department_id IN(
SELECT DISTINCT department_id
FROM manba
WHERE last_name LIKE '%u%');
#5、查詢在部門的location id爲1700的部門工作的員工的員工號
SELECT employee_id
FROM manba
WHERE department_id=ANY(
SELECT department_id
FROM departments
WHERE location_id=1700);
#6、查詢管理者是king的員工姓名和工資
SELECT last_name,salary
FROM manba
WHERE manager_id IN(
SELECT employee_id
FROM manba
WHERE last_name='K_ing');
#7、查詢工資最高的員工的姓名,要求first和last_name顯示爲一列,列名爲姓名
SELECT CONCAT(first_name,last_name) "姓名"
FROM manba WHERE salary=(SELECT MAX(salary)
FROM manba























【編測編學】MySQL數據庫基礎知識2

【編測編學】 教學內容爲:

測試基礎知識、項目實戰、測試管理、敏捷測試、探索式測試、APP測試、Linux、數據庫、測試環境搭建、Python編程、WEB端UI自動化測試、APP端UI自動化、接口功能測試、性能測試、接口自動化測試、Jenkins持續集成 等內容。

通過學習,學員能 掌握軟件測試企業最新技術,對標一線互聯網企業項目要求,使學員達到中高級測試工程師的水平,畢業後可快速融入企業實際工作中。

不管你是 文科生、專科生、0基礎、女同學 都可以輕鬆學會!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章