愉快的時光總是過得很快,月亮悠哉游哉爬上了半空遙望著太陽,上一篇中剩余排序還沒回顧,本篇就暫時先來回顧一下排序吧!
特點:
1.ASC 代表升序,DESC代表降序
2.如果不寫默認就是升序
3.ORDER BY 后面支持單個欄位,多個欄位,運算式,函式,別名
4.ORDER BY 子句一般是放在查詢陳述句的最后面,但LIMIT除外,
#案例1:查詢員工資訊,要求工資從高到低排序
SELECT *
FROM employees
ORDER BY salary ASC;

#案例2.查詢部門編號>=90的員工資訊,按入職時間的先后排序,【添加篩選條件】
SELECT *
FROM employees
WHERE department_id >= 90
ORDER BY hiredate ASC;

#案例3.按年薪的高低顯示員工的資訊,【按運算式排序】
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM employees
ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;
=========================================
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM employees
ORDER BY 年薪 DESC;

#案例4.按姓名的長度顯示員工的姓名和作業,【按函式排序】
SELECT LENGTH('john');
======================================
SELECT LENGTH(last_name) AS 位元組長度,last_name,salary
FROM employees
ORDER BY 位元組長度 DESC;
=======================================
SELECT LENGTH(CONCAT(last_name,first_name)) AS 位元組長度,
CONCAT(last_name,first_name) AS 姓名,
salary AS 工資
FROM employees
ORDER BY 位元組長度 ASC;


#案例5.查詢員工資訊,要求先按工資排序,再按員工編號排序,
#【ORDER BY 按多個欄位排序】
SELECT *
FROM employees
ORDER BY salary ASC,employee_id DESC;

在日常的學習中,我們在Mysql資料庫中的查詢會用到一些函式,函式千千萬,今天就來看一看,
#進階4.常見的函式
功能:類似于Java中的方法,
概念:是指將我們實作某個功能的這一組邏輯陳述句封裝到了方法中,對外暴露了一個公開的名字,
然后回頭再用這些邏輯陳述句,只需要呼叫方法名就行了,
好處:
1.隱藏了實作細節,
2.提高代碼的復用性,
呼叫: SELECT 函式名(實參串列) 【FROM 表】;
特點:
①叫什么(函式名)
②干什么(函式功能)
分類:
1.單行函式
如: CONCAT,LENGTH,IFNULL等
2.分組函式
功能:做統計使用,又稱為統計函式,聚合函式,簡稱組函式,
接下來會學習到:字符函式,數學函式,日期函式,其他函式,流程控制函式(下一篇在介紹)
#一.字符函式
#①length 獲取引數數值的位元組個數
SELECT LENGTH('john');

SELECT LENGTH('張三豐haha')

SHOW VARIABLES LIKE '%char%';

#②CONCAT 拼接字串
SELECT CONCAT(last_name,'_',first_name)
FROM employees;
#③UPPER 轉大寫
#④LOWER 轉小寫
SELECT UPPER('john');
SELECT LOWER('JOHN');

#示例:將姓變大寫,名變小寫,然后拼接,【結論:函式可以嵌套,一個函式的回傳值可以做為另一個函式的引數】
SELECT CONCAT(UPPER(last_name),'_',LOWER(first_name)) AS 姓名
FROM employees;

#⑤SUBSTR 字串截取兩個通用,多載有四種
#SUBSTRING
#SQL語言中索引從1開始
SUBSTR(‘字串’,開始位) ,一個引數截取后面全部
SELECT SUBSTR('仁愛為接物之本信義為立業之本',11) AS out_put;

#SUBSTR('字串',開始位,截取數),從指定索引數,指定字符長度的字符 SELECT SUBSTR('仁愛為接物之本信義為立業之本',1,2) AS out_put;

#案例:姓名中首字母大寫,其他字符小寫,然后用_拼接,顯示出來,
SELECT CONCAT(
SUBSTR(UPPER(last_name),1,1),
'_',
SUBSTR(LOWER(CONCAT(last_name,first_name)),2)
)
FROM employees;

#一.字符函式
#⑥INTSTR 查起始索引,回傳子串第一次出現的索引,如果找不到就回傳0
#INSTR(字串,substr)
SELECT INSTR('仁愛為接物之本信義為立業之本','仁愛') AS out_put;

SELECT INSTR('為接物之本信義為立業之本,堯立孝慈仁愛','仁愛') AS out_put;

SELECT INSTR('仁愛為接物之本信義為立業之本','親愛精誠') AS out_put;

#⑦TRIM 去除空格
#去除指定的前后字符
SELECT LENGTH(' 親愛精誠 ') AS out_put;
SELECT LENGTH(TRIM(' 親愛精誠 ')) AS out_put;

SELECT TRIM('a' FROM 'aaaaa親aaa愛aaaa精誠aaaaaaaaa') AS out_put;
===============================================================
SELECT TRIM('aa' FROM 'aaaaa親aaa愛aaaa精誠aaaaaaaaa') AS out_put;

#⑧LAPD用指定的字符實作左填充指定的長度
SELECT LPAD('親愛精誠','10','a') AS out_put;
SELECT LPAD('親愛精誠','2','a') AS out_put;

#⑨RAPD用指定的字符實作右填充指定的長度
SELECT RPAD('親愛精誠',6,'c') AS tou_pus;
SELECT RPAD('親愛精誠',2,'c') AS tou_pus;

#⑩replace 替換
SELECT REPLACE('太陽當空照,花兒對我笑','花兒','白云') AS out_put;

#二.數學函數
#①ROUND 四舍五入,保留小數
SELECT ROUND(1.45);
SELECT ROUND(1.65);
SELECT ROUND(1.578,2)

#②CAIL向上取整,回傳大于等于該引數的最小整數
SELECT CEIL(1.003);
SELECT CEIL(1.000);
SELECT CEIL(-1.003);

#③FLOOR向下取整,回傳<=該引數的最大整數
SELECT FLOOR(9.99);
SELECT FLOOR(9.23);
SELECT FLOOR(-9.99);
SELECT FLOOR(-9.23);

#④TRUNCATE 截斷 (小數,位數)
SELECT TRUNCATE(1.65,1);
SELECT TRUNCATE(1.759,1);

#⑤MOD 取余
被除數如果是正,則結果為正,被除數如果為負,那結果為負
SELECT MOD(10,3);
SELECT MOD(-10,3);
SELECT MOD(7,-3);
SELECT 10%3;

#三.日期函式
#NOW 回傳當前系統日期+時間
SELECT NOW();

#CURDATE 回傳當前系統日期,不包含時間
SELECT CURDATE();

#CURTIME 回傳當前的時間,不包含日期
SELECT CURTIME();

#可以獲取指定的部分,年,月,日,小時,分鐘,秒
YEAR()
SELECT YEAR(NOW()) AS 年;
SELECT YEAR('1998-1-1') AS 年;
SELECT YEAR(hiredate) 年 FROM employees;

SELECT MONTH(NOW()) 月;
SELECT MONTHNAME(NOW()) 月英文;

STR_TO_DATE 將日期格式的字符轉換成指定格式的日期
DATE_FORMAT 將日期轉換成字符
SELECT STR_TO_DATE('07-12-2020','%m-%d-%Y');
SELECT DATE_FORMAT('2020/07/12','%Y年%m月%d日');


#查詢入職日期為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');

#案例:查詢有獎金的員工名和入職日期(XX月/XX日 XX年)
SELECT last_name,DATE_FORMAT(hiredate,'%m月/%d日 %Y年')
FROM employees
WHERE commission_pct IS NOT NULL;

#四.其他函式
SELECT VERSION(); #查看版本號
SELECT DATABASE(); #查看當前的資料庫
SELECT USER(); #查看當前的用戶
日常學習中的函式就暫時介紹到這里,各位看官可能有疑問你的流程控制函式能?
這emmmm.........!!!精彩回顧且聽下篇慢慢到來,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/8722.html
標籤:MySQL
