愉快的時光總是過得很快,月亮悠哉游哉爬上了半空遙望著太陽。上一篇中剩餘排序還沒回顧,本篇就暫時先來回顧一下排序吧! 特點: 1.ASC 代表升序,DESC代表降序 2.如果不寫預設就是升序 3.ORDER BY 後面支持單個欄位,多個欄位,表達式,函數,別名 4.ORDER BY 子句一般是放在查詢 ...
愉快的時光總是過得很快,月亮悠哉游哉爬上了半空遙望著太陽。上一篇中剩餘排序還沒回顧,本篇就暫時先來回顧一下排序吧!
特點:
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;
#⑩replaca 替換
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);
ELECT FLOOR(-9.99);
SSELECT 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.........!!!精彩回顧且聽下篇慢慢到來。