MySQL學習筆記(三)
阿新 • • 發佈:2021-11-01
資料處理函式,分組函式(多行處理函式)
資料處理函式
-
又被稱為單行處理函式
-
特點:一個輸入對應一個輸出
-
和單行處理函式相對的是:多行處理函式(特點:多個輸入,對應一個輸出)
-
常見單行處理函式:
// 1.lower() 轉換小寫 select lower(ename) from emp; // 2.upper() 轉換大寫 select upper(ename) from emp; // 3.substr() 取子串( substr(被擷取的字串,起始下標,擷取的長度) ) select substr(ename, 1, 1) from emp; //找出員工名字第一個字母是A的員工資訊 //第一種:模糊查詢 select ename from emp where ename like 'A%'; //第二種:substr()函式 select ename from emp where substr(ename, 1, 1) = 'A'; // 4.concat() 字串拼接 select concat(empno, ename) from emp; //員工中首字母大寫為A的員工資訊 select concat(substr(ename,1,1),lower(substr(ename,2,length(ename)-1)) as result from emp; // 5.length() 字串長度 select length(ename) enamelength from emp; // 6.trim() 去空格 select * from emp where ename = ' king'; // 7.str_to_date() 將字串varchar型別轉換為日期date型別 //通常使用在插入insert方面,因為插入的時候需要一個日期型別的資料, //需要通過該函式將字串轉換成date。 //如果提供的日期字串是如下格式,str_to_date函式可以不需要 insert into t_user(id,name,birth) value(1,'zhangsan','1990-10-01'); str_to_date('字串日期','日期格式') mysql的日期格式: %Y 年 %m 月 %d 日 %h 時 %i 分 %s 秒 insert into t_user(id,name,birth) value(1,'zhangsan',str_to_date('1990-01-10','%Y-%m-%d')); // 8.date_format 將date型別轉換成具有一定格式的varchar字串型別 //date_format(日期型別資料, '日期格式'); //這個函式可以將日期型別轉換成特定格式的字串.設定展示的日期格式 select id,name,date_format(birth,'%m/%d/%Y') as birth from t_user; // 9.format() 格式化數字 select emp,format(sal, '$999.999') as sal from emp; // 10.round() 四捨五入 select round(1234.5677, 0) as result from emp;//保留整數位 select round(1234.5677, 1) as result from emp;//保留一位小數 select round(1234.5677, -1) as result from emp;//保留到十位 // 11.rand() 生成隨機數 select rand() from emp; // 12.ifnull(資料, 被當作哪個值) 可以將null轉換成一個具體值 // 如果'資料'為null的時候,把這個資料結構當做哪個值 // 空處理函式,專門處理空的 // 計算每個員工的年薪 // select ename, (sal + ifnull(comm, 0)) * 12 from emp; //13. case..when..then..when..then..else..end // 當員工的工作崗位是manager的時候,工資上調10%,當工作崗位是salesman的時候,工資上調50%(注意:不修改資料庫,只是將查詢結果顯示進行修改) select ename,job,sal, (case job when 'manager' then sal*1.1 when 'salesmen' then sal*1.5 else sal end) as newsal from emp; //條件函式:if(x=n,a,b):表示如果x=n,則返回啊,否則返回b // 14. now() 函式,獲取系統當前時間:時分秒資訊
-
注意:
- substr()中下標是從1開始的,沒有0
- 在所有資料庫中,只要有null參與的數學運算,最終結果一定是null
分組函式(多行處理函式)
-
多行處理函式特點:輸入多行,最終輸出一行
-
常見多行處理函式(使用前先分組)
// max() 最大值 select max(sal) from emp; // min() 最小值 select min(sal) from emp; // sum() 求和 //計算工資和 select sum(sal) from emp; // avg() 求平均和 select avg(sal) from emp; // count() 統計 select count(ename) from emp;
-
注意:
- 分組函式在使用的時候必須先進行分組,然後才能使用
- 如果沒有對資料進行分組,則預設整張表為一個分組
- 分組函式自動忽略null,不需要提前對null進行處理
- 分組函式中count(*) 和count(具體欄位)的區別
- count(具體欄位):表示統計該欄位下所有不為null的元素的總數
- count(*):統計表當中的總行數。(只要有一行資料,count則++)因為每一行記錄不可能都為null,一行資料中有一列不為null,則這行資料就是有效的
- 分組函式不能直接使用在where子句中
- 所有的分組函式可以組合起來一起用
去除重複記錄-distinct
-
distinct只能出現在所有欄位的最前面
//表示兩個欄位聯合起來去重 select distinct job,deptno from emp; //統計工作崗位數量 select count(distinct job) from emp;