1. 程式人生 > 其它 >MySQL學習筆記(三)

MySQL學習筆記(三)

資料處理函式,分組函式(多行處理函式)

資料處理函式

B站老杜——MySQL入門

  • 又被稱為單行處理函式

  • 特點:一個輸入對應一個輸出

  • 和單行處理函式相對的是:多行處理函式(特點:多個輸入,對應一個輸出)

  • 常見單行處理函式:

    // 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;
    
謹以此文,用來記錄這些犯錯的青春