mysql 函数列表(从零开始mysql知识点归纳总结)
【1】字符串处理函数(1)LOWER : 将字符串中的内容全部转成小写,我来为大家科普一下关于mysql 函数列表?下面希望有你要的答案,我们一起来看看吧!
mysql 函数列表
【1】字符串处理函数
(1)LOWER : 将字符串中的内容全部转成小写
SELECT LOWER('abAcD')
FROM DUAL
(2)UPPER : 将字符串中的内容全部转成大写
SELECT UPPER('abAcd')
FROM DUAL
SELECT UPPER(first_name)
FROM employees
(3)CONCAT : 字符串拼接
CONCAT('Hello', 'World') 输出 HelloWorld
SELECT CONCAT ('aaa','bbb','ccc')abc
FROM DUAL
SELECT CONCAT(first_name,'',last_name) NAME
FROM employees
(4)SUBSTR :截取子串,从2的位置开始偏移量为3
SUBSTR('HelloWorld',1,5) 输出 Hello
SELECT SUBSTR('HelloMysql',2,3)
FROM DUAL
(5)LENGTH :长度
LENGTH('HelloWorld') 长度 输出 10
SELECT LENGTH('Hello')
FROM DUAL
(6)INSTR('HelloWorld', 'W') 是否在字符串之中 第六位 6
instr(field, str) 函数,第一个参数 field 是字段,第二个参数 str 是要查询的串,返回串 str 的位置,没找到就是0
SELECT INSTR('hellolo','lo')
FROM DUAL
(7)LPAD (右对齐)| RPAD (左对齐):
LPAD(salary,10,'*') *****24000
LPAD(str,len,padstr)
返回字符串str,将其左填充字符串padstr至len个字符的长度。 如果str大于len,则返回值缩短为len个字符。
RPAD(salary, 10, '*') 24000*****
RPAD(str,len,padstr)
返回字符串str,将其右填充字符串padstr至len个字符的长度。 如果str大于len,则返回值缩短为len个字符。
SELECT LPAD(first_name,10,'*')
FROM employees
SELECT RPAD(first_name,10,'*')
FROM employees
(8)TRIM('H' FROM 'HelloWorld') 修剪字符串 elloWorld
TRIM : 清除字符串左右两端指定的字符
SELECT TRIM('#' FROM '####abc de#####')
FROM DUAL
SELECT TRIM(''FROM 'abc de')
FROM DUAL
(9)REPLACE('abcd','b','m') 替换 输出 amcd
REPLACE : 替换字符串中指定的某个字符
SELECT REPLACE('abcdef','a','A')
FROM DUAL
【5】数字函数
ROUND: 四舍五入
ROUND(45.926, 2) 45.93
SELECT ROUND(123.65,1) ,ROUND(123.53,0),ROUND(123.43,-1)
FROM DUAL
TRUNCATE: 截断
TRUNCATE(45.926) 45
SELECT TRUNCATE(123.65,1),TRUNCATE(123.53,0),TRUNCATE(123.53,-1)
FROM DUAL
MOD: 求余
MOD(1600, 300) 100
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 倍数
case when then 有点类似 switch() case
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
也可以当做 if else来处理
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
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com