<SQL>《Comandos SQL (incluidas oraciones de ejemplo) Edición bien organizada (2)》

Saltar a "Comandos SQL (incluyendo oraciones de ejemplo) versión bien organizada (1)

8 funciones

8.1 Funciones de procesamiento de texto

función ilustrar
IZQUIERDA() (o use la función de subcadena) devuelve los caracteres a la izquierda de la cadena
LONGITUD() (También use DATALENGTH() o LEN()) Devuelve la longitud de la cadena
MÁS BAJO() (Access usa LCASE()) para convertir la cadena a minúsculas
LTRIM() Eliminar espacios de la izquierda de la cadena.
BIEN() (o use la función de subcadena) devuelve los caracteres a la derecha de la cadena
RTRIM() Eliminar espacios de la derecha de la cadena.
SOUNDEX() Devuelve el valor SOUNDEX de una cadena
SUPERIOR() (Access usa UCASE()) para convertir cadenas a mayúsculas

8.2 Funciones de procesamiento numérico

función ilustrar
ABDOMINALES() devuelve el valor absoluto de un número
COS() Devuelve el coseno de un ángulo.
EXP() Devuelve el valor del exponente de un número.
PI() volver pi
PECADO() Devuelve el seno de un ángulo.
SQRT() Devuelve la raíz cuadrada de un número
BRONCEARSE() Devuelve la tangente de un ángulo.

8.3 Funciones de procesamiento de tiempo

función ilustrar
ahora() fecha actual fecha
curdate() fecha actual
horario de atención() tiempo actual
Diferencia horaria DATE_ADD() # Agrega el intervalo de tiempo especificado a la fecha
DATE_SUB() # Resta el intervalo de tiempo especificado de la fecha
Por ejemplo: DATE_SUB(curdate(), INTERVAL 7 DAY) menos siete días desde la fecha actual
Función de diferencia horaria
timestampdiff

Sintaxis: timestampdiff(unit, begin, end)
begin y end pueden ser de tipo DATE o DATETIME, y los parámetros pueden ser de tipos mixtos.

8.3.1 Convertir marca de tiempo a formato personalizado from_unixtime

función ilustrar
Formato from_unixtime(timestamp(timestamp a convertir),'%Y-%m-%d %h:%i:%s')
%Y años 4to lugar, 2023
%y año, 2 dígitos, 23
%METRO nombre del mes
%metro mes, valor (00-12)
%D dia del mes con prefijo ingles
%d Día del mes, valor (00-31)
%Su 00:00:00

8.3.2 Convertir formato de hora CONVERT()

función ilustrar
Formato CONVERT(expr,tipo)
expr: el valor a convertir
tipo: el tipo de datos a convertir
FECHA Convertir expr al formato 'YYYY-MM-DD'
FECHA Y HORA Convertir expr al formato 'YYYY-MM-DD HH:MM:SS'
TIEMPO Convertir expr al formato 'HH:MM:SS'
CARBONIZARSE Convierta el formato expr a CHAR (cadena de caracteres de longitud fija)
FIRMADO Convertir expr a formato INT (entero con signo)
NO FIRMADO Convertir expr a formato INT (entero sin signo)
DECIMAL Convertir expr a formato FLOAT (coma flotante)
BINARIO Convertir expr a formato binario

8.3.3 Obtener la hora del sistema

función ilustrar
SGBD función/variable
Acceso AHORA()
DB2 FECHA ACTUAL
mysql FECHA ACTUAL()
Oráculo FECHA DEL SISTEMA
postgresql FECHA ACTUAL
servidor SQL OBTENER LA FECHA()
SQLite Fecha('ahora')

8.4 función agregada (función agregada)

función ilustrar
PROMEDIO() devuelve el promedio de una columna
CONTAR() Devuelve el número de filas en una columna
MÁX.() devuelve el valor máximo de una columna
MIN() devuelve el valor mínimo de una columna
SOL() Devuelve la suma de los valores de una columna
Ejemplo: composición de funciones agregadas SELECT COUNT(*) AS num_items,
MIN(prod_price) AS price_min,
MAX(prod_price) AS price_max,
AVG(prod_price) AS price_avg
FROM Products

COALESCE

按顺序对其参数求值并返回第一个非NULL值。仅当所有参数均为NULL时结果才为NULL。
为消息中可能不存在的字段提供缺省值。
表达式:COALESCE(Body.Salary,0) ,如果消息中有SALARY字段,将返回它的值,如果该字段不存在,将返回0.

9 子查询

9.1 子查询

子句 说明 是否必须使用
SELECT 要返回的列或表达式
FROM 从中检索数据的表 仅在从表选择数据时使用
WHERE 行级过滤
GROUP BY 分组说明 仅在按组计算聚集时使用
HAVING 组级过滤
ORDER BY 输出排序顺序

9.2 GROUP BY & ORDER BY

在这里插入图片描述
例1:SELECT vend_id,count() AS num_prods FROM Products GROUP BY vend_id
例2:SELECT cust_id,count() AS orders FROM Orders GROUP BY cust_id HAVING COUNT() >=2

9.3 分组排序 (row_number()over())

(1)对查询结果进行排序(无分组)

SELECT empno,WORKDEPT,SALARY,Row_Number() OVER (partition by workdept ORDER BY salary desc) rank FROM employee
empno WORKDEPT SALARY Row_Number()
000010 A00 152750 1
000110 A00 66500 2
000120 A00 49250 3
200010 A00 46500 4
200120 A00 39250 5
000020 B01 94250 1
000030 C01 98250 1
000130 C11 73800 2

(2)对查询结果进行排序(无分组)

SELECT empno,WORKDEPT,SALARY,Row_Number() OVER (ORDER BY salary desc) rank FROM employee
empno WORKDEPT SALARY Row_Number()
000010 A00 152750 1
000030 C01 98250 2
000070 D21 96170 3
000020 B01 94250 4
000090 E11 89750 5
000100 E21 86150 6
000050 E01 80175 7
000130 C11 73800 8
000060 D11 72250 9

小结:row_number() over()和rownum差不多,功能更强一点。(可以在各个分组内从1开始排序)

(3)rank() over() 是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)

SELECT  WORKDEPT,SALARY,rank() OVER (partition by workdept ORDER BY salary ) as dense_rank_order FROM emp order by workdept
WORKDEPT SALARY rank()
A00 39250 1
A00 46500 2
A00 49250 3
A00 66500 4
A00 152750 5
B01 94250 1
C01 68420 1
C01 68420 1
C01 73800 3

(4)dense_rank() over() 是连续排序,有两个第二名时仍然跟着第三名。相比之下,row_number是没有重复值的

SELECT  WORKDEPT,SALARY,dense_rank() OVER (partition by workdept ORDER BY salary ) as dense_rank_order FROM emp order by workdept
WORKDEPT SALARY dense_rank()
A00 39250 1
A00 46500 2
A00 49250 3
A00 66500 4
A00 152750 5
B01 94250 1
C01 68420 1
C01 68420 1
C01 72420 2
C01 73800 3

Supongo que te gusta

Origin blog.csdn.net/tangcoolcole/article/details/130809015
Recomendado
Clasificación