• 数据库之 MySQL --- 数据处理 之 单行函数、组函数 (四)


    【1】    LOWER : 将字符串中的内容全部转成小写
                 UPPER : 将字符串中的内容全部转成大写

    SELECT LOWER ('abAcD')
    FROM DUAL
    
    SELECT UPPER('abAcd')
    FROM DUAL
    
    SELECT UPPER(first_name)
    FROM employees

    【2】CONCAT : 字符串拼接

             SUBSTR :截取子串,从2的位置开始偏移量为3

             LENGTH :长度

    CONCAT('Hello', 'World')  HelloWorld
    SUBSTR('HelloWorld',1,5)  Hello
    LENGTH('HelloWorld')      10
    INSTR('HelloWorld', 'W')  6
    LPAD(salary,10,'*')       *****24000  
    RPAD(salary, 10, '*')     24000*****
    TRIM('H' FROM 'HelloWorld')  elloWorld
    REPLACE('abcd','b','m')  amcd

    【3】  LPAD (右对齐)| RPAD (左对齐):
               TRIM : 清除字符串左右两端指定的字符
               REPLACE : 替换字符串中指定的某个字符

    SELECT CONCAT ('aaa','bbb','ccc')abc
    FROM DUAL
    
    SELECT CONCAT(first_name,'',last_name) NAME
    FROM employees

    【4】mysql的索引值是从1开始的,截取子串,从2的位置开始偏移量为3

    SELECT SUBSTR('HelloMysql',2,3)
    FROM DUAL
    
    SELECT LENGTH('Hello')
    FROM DUAL
    
    SELECT INSTR('hellolo','lo')
    FROM DUAL
    
    SELECT LPAD(first_name,10,'')
    FROM employees
    
    SELECT TRIM(''FROM 'abc de')
    FROM DUAL
    
    SELECT TRIM('#' FROM '####abc de#####')
    FROM DUAL
    
    SELECT REPLACE('abcdef','a','A')
    FROM DUAL


    【5】数字函数

    ROUND: 四舍五入
    ROUND(45.926, 2)            45.93
    
    TRUNCATE: 截断
    TRUNCATE(45.926)                  45
    
    MOD: 求余
    MOD(1600, 300)                             100
    SELECT ROUND(123.65,1) ,ROUND(123.53,0),ROUND(123.43,-1)
    FROM DUAL
    
    SELECT TRUNCATE(123.65,1),TRUNCATE(123.53,0),TRUNCATE(123.53,-1)
    FROM DUAL
    
    SELECT MOD(5,3),MOD(-5,3),MOD(5,-3),MOD(-5,-3)
    FROM DUAL

    【6】 日期函数  now() : 获取当前时间

    SELECT NOW()
    FROM DUAL

     【7】   通用函数 : ifnull
                 注意 :null和其它值做运算结果仍为null

    SELECT employee_id,salary,12*salary*(1+commission_pct)
    FROM employees;
    
    SELECT salary,commission_pct,salary * commission_pct
    FROM employees
    WHERE employee_id =100
     

    【8】 IFNull(commission_pct,0) :如果commission_pct 的值为null那么就将值设置为0

    
    SELECT employee_id,salary,12*salary*(1 + IFNULL(commission_pct,0))
    FROM employees
    WHERE employee_id = 100

    【11】    练习:查询部门号为 10, 20, 30 的员工信息, 若部门号为 10,
                   则打印其工资的 1.1 倍, 20 号部门, 则打印其工资的 1.2 倍,
                   30 号部门打印其工资的 1.3 倍数

    SELECT first_name,salary,department_id,
       CASE    department_id
       WHEN 10 THEN salary * 1.1
       WHEN 20 THEN salary * 1.2
       WHEN 30 THEN salary * 1.3
       ELSE salary * 1.4 END new_salary
    FROM employees
    
    SELECT first_name,salary,job_id,
        CASE job_id
        WHEN 'IT_PROG' THEN salary*2
        ELSE salary *1.4 END new_salary
    FROM employees
    

    【12】 AVG() : 求平均值
                SUM() :求和
                MAX() : 求最大值
                MIN() : 求最小值
                COUNT() : 求个数

     -- avg只能运算数值(double,int)
     SELECT AVG(salary)
     FROM employees
     
     
     SELECT SUM(salary)
     FROM employees
     
     -- max,min 可以运算数值,字符串,日期
     SELECT MAX(first_name),MAX(salary)
     FROM employees

    SELECT MIN(first_name),MIN(salary)
    FROM employees

    【13】count:统计的个数不包含数值为null

    SELECT COUNT(salary),COUNT(commission_pct)
    FROM employees

    SELECT AVG(salary),SUM(salary)/107,SUM(salary)/COUNT(commission_pct)
    FROM employees

    【14】 需求:求表中的数据有多少

    SELECT COUNT(*),COUNT(1),COUNT(2)
    FROM employees

    SELECT first_name
    FROM employees
    WHERE 1 =1; -- 可以理解为没有条件

    【15】    group by

    ①  需求:求所有员工的平均工资

    SELECT AVG(salary)
    FROM employees
    
    -- 下面的写法是错误的
    SELECT first_name,AVG(salary)
    FROM employees

    ② 需求: 求各部门员工的平局工资

    如果列中出现了组函数和其他的列。那么其他的列必须作为
     group by 后面分组的条件
    
    SELECT department_id,AVG(salary)
    FROM employees
    -- group by 按照什么样的格式来分组
    GROUP BY department_id

    ③需求:求各部门中不同工种的员工的平均工资

    SELECT department_id, job_id,AVG(salary)
    FROM employees
    GROUP BY department_id,job_id
    
    SELECT department_id, job_id,AVG(salary)
    FROM employees
    -- group by 后面的两个列交换顺序是没有区别的
    GROUP BY job_id,department_id

    【16】 having

    ①需求 :求各个部门中最高工资大于10000的部门
    -- 注意 :如果过滤条件中出现了组函数,那么只能放在having后面使用

    SELECT department_id,MAX(salary)
    FROM employees
    GROUP BY department_id
    HAVING MAX(salary)>10000

    ②需求:求 20,30,40部门中最高工资大于10000的部门

    SELECT department_id,MAX(salary)
    FROM employees
    GROUP BY department_id
    HAVING MAX (salary)>10000 AND department_id IN (20,30,40)
    
    -- 下面的方式比上面的好
    SELECT department_id,MAX(salary)
    FROM employees
    WHERE department_id IN(20,30,40)
    GROUP BY department_id
    HAVING MAX(salary)>10000
    
    
    DESC customers
    INSERT INTO customers(NAME,email,birth) VALUES('鲁宾','ccc.@.qq.com','1196-02-56')
  • 相关阅读:
    Angularjs中文教程
    IE兼容性 css处理常见
    手写画板实现并转化成图片
    canvas 最基本简单的示例
    凡科 网站地址
    IOS学习之路二十二(UIAlertView获得文本框内容及添加北京图片)
    IOS学习之路十四(用TableView做的新闻客户端展示页面)
    IOS开发之路二十一(UIWebView加载本地html)
    iOS学习之路十三(动态调整UITableViewCell的高度)
    IOS学习之路十二(UITableView下拉刷新页面)
  • 原文地址:https://www.cnblogs.com/wushaopei/p/11732830.html
Copyright © 2020-2023  润新知