MySQL avanzado en análisis de datos

El artículo anterior introdujo la clasificación de sql y algunos conocimientos básicos. Este blog presentará el uso de funciones y consultas avanzadas en mysql. Blog anterior: Portal .

1. Función

1.1 Funciones de una línea
  • Función matemática
 # 绝对值
 abs()
 
 # 向上取整,最接近并且大于等于该值的整数值
 ceiling()/ceil()
 
 # 向下取整,最接近并且小于等于该值的整数值
 floor()
 
 # 取模运算(取余)
 mode(m,n)
 
 # 求PI值
 PI()
 
 # 求幂运算
 pow(m,n)
 
 # 随机数
 rand()  
 
 # 四舍五入
 round(m,n)
 
 # 截取m小数点后n位
 truncate(m,n)
  • Función de carácter
 # 获取str的ascii码值
 ascii(str)

 #大小写主要用在验证码问题上
 # 将字符串转换为小写
 lower(字段|表达式)
 # 将字符串转换为大写
 upper(字段|表达式)
 
 # 拼接字符串
 concat(str1,str2…)
 
 # 获取字符串长度
 length(字段|表达式)
 
 # 截取字符串,pos开始位置,从1开始;len表示长度
 substr(str,pos,len)
 
 # 在str中搜索old,使用new代替
 replace(str,old,new)
 
 # str长度不够len,使用s左侧填充
 lpad(str,len,s)
 
 # str长度不够len,使用s右侧填充
 rpad(str,len,s)
 
 # 去除左右两侧的空格,字符串里面的空格不能去除
 trim()
  • Función de fecha
 # 获取当前日期时间
 NOW()/SYSDATE()/CURRENT_TIMESTAMP()
 # 获取当前系统日期
 CURRENT_DATE()/CURDATE()
 # 获取当前系统时间
 CURRENT_TIME()/CURTIME()
 # 获取天数
 DAY(date)
 # 获取月份
 MONTH(date)
 # 获取年份
 YEAR(date)
 # 返回一年中的周数
 week(date)
 # 返回一周中的第几天(0-6)
 weekday(date)
 # 日期计算
 DATE_ADD(date,INTERVAL expr unit)
1.2 Funciones agregadas
# 平均值
avg()
# 获取总数
sum()
# 获取最大值
max()
# 获取最小值
min()
# 统计数目
count()   统计记录数或者统计某个非空字段的个数

#注意在select字句中不能出现除聚合函数外的任意字段(没有分组)
#where字句中不能出现聚合函数(聚合函数的执行在where的后面)
1.3 Función de agrupación
GROUP BY
 	用于将信息划分为更小的组
 	每一组行返回针对该组的单个结果
HAVING子句
 	用于指定 GROUP BY 子句检索行的条件
#查询平均工资大于2000的部门编号
select deptno,avg(sal) avg from emp group by deptno having avg>=2000

Aquí para explicar la diferencia entre tener y dónde, ambos se usan para filtrar, dónde está al frente del grupo por y tener después del grupo por
dónde es filtrar la fuente de datos, y tener es filtrar los resultados de la consulta, que es tiempo de donde es antes que tener

1.4 Función de cifrado
分为可逆和不可逆:
可逆:加密/解密   如:java: BASE64.encode()/decode()     python: 爬虫 encode()/decode()

不可逆:只能加密不能解密
select md5('root');
select sha('root');
select password('root');
1.5 Función de proceso
如果expr1是真, 返回expr2, 否则返回expr3
IF(expr1,expr2,expr3)	

如果expr1不是NULL,返回expr1,否则返回expr2
IFNULL(expr1,expr2)	

如果value是真, 返回result1,否则返回default
CASE WHEN [value1] THEN[result1]ELSE[default] END	

如果expr等于value1, 返回result1,否则返回default
CASE [expr] WHEN [value1] THEN[result1]ELSE[default] END	

2. Consulta avanzada

2.1 Consulta de conexión
  • Producto cartesiano

Combine todos los pares de registros ordenados posibles en varias tablas

  • Conexión interna

Los registros que coinciden con varias tablas están conectados y se muestran en el conjunto de resultados.

No hay distinción entre tablas maestra y esclava, independientemente del orden de conexión

# 查询所有雇员及其部门信息
select * from emp,dept where emp.deptno = dept.deptno;
select * from emp inner join dept on emp.deptno = dept.deptno;
select * from emp inner join dept using(deptno); #字段名称必须一致,会自动去除重复列
  • Conexión natural

Las conexiones naturales son conexiones iguales

Los campos con nombres de campo iguales en la tabla están conectados y las columnas duplicadas se eliminarán automáticamente

select * from emp natural join dept;
  • Unión externa

Según la tabla inicial, los registros se comparan en la tabla coincidente a su vez, si coinciden, se conectan y se muestran en el conjunto de resultados; de lo contrario, se rellenan con nulos

Hay una tabla maestro-esclavo, que está relacionada con la secuencia de conexión.

unión izquierda / derecha [externa]… en…

select * from emp 
LEFT JOIN dept
on emp.deptno = dept.deptno
  • Auto-conexión

Conectarse a sí mismo como un espejo (conectarse a sí mismo)

# 查询员工及其领导的名称
select e1.ename 名称,e2.ename 领导
from emp e1,emp e2
where e1.mgr = e2.empno
2.2 Subconsulta

Consulta anidada, una consulta que utiliza un resultado de consulta como otra condición de consulta o parte de la consulta.

# 单行子查询
  #查询工资大于7788号员工的所有员工信息
  select * from emp where sal >(select sal from emp where empno =7788);
# 多行子查询
  返回多值可以使用anyall来修饰。
  =any相当于in,<any小于最大值,>any大于最小值;
  <>all相当于not in,>all大于最大值,<all小于最小值。
  
# 查询超过所在部门平均工资的员工信息
select * from emp e1 where sal > 
(select avg(sal) from emp e2 where e1.deptno = e2.deptno);

#查询薪水大于2000的部门名称
select dname from dept d where deptno in
(select deptno from emp e where sal > 2000);select dname from dept d where EXISTS 
(select * from emp e where sal > 2000 and d.deptno=e.deptno);
# in和exists的区别
in先执行子查询,在执行主查询;exists先执行主查询;
exists子查询不返回具体结果,返回true值出现在结果集,否则不出现。
2.3 Consulta conjunta

union: union, se consultan todos los contenidos y se muestran repetidamente
union all: union, se muestran todos los contenidos, incluidos los duplicados

select * from emp where deptno = 20
UNION ALL
select * from emp where sal <=2000

3. Resumen

Aquí hay algunas funciones y métodos de consulta que deben dominarse en sql

Supongo que te gusta

Origin blog.csdn.net/weixin_45696161/article/details/106384059
Recomendado
Clasificación