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

个人博客网:https://wushaopei.github.io/    (你想要这里多有)

 

【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')

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值