Parte básica 2 de Oracle (pseudocolumnas/tablas, funciones individuales, procesamiento de valores nulos, conversión fila-columna, funciones analíticas, operaciones de conjuntos)

Parte básica 2 de Oracle (pseudocolumnas/tablas, funciones individuales, procesamiento de valores nulos, conversión fila-columna, funciones analíticas, operaciones de conjuntos)

1 Pseudo columna, pseudo tabla

1.1 Pseudo columnas

ID de fila : ID de fila es una pseudocolumna que se utiliza para marcar de forma única filas en una tabla. Es la dirección interna de los datos de la fila en la tabla física. Contiene dos direcciones: una es la dirección del archivo de datos almacenado en el bloque que contiene la fila en la tabla de datos y la otra es la fila que puede ubicar directamente la fila de datos en sí en el bloque de datos dirección en .
El ID de fila de cada registro es único, excepto que puede no serlo dentro del mismo grupo. Se puede entender que Rowid es único.

Rownum : Rownum es el número que el sistema Oracle asigna secuencialmente a las filas devueltas por la consulta. A la primera fila devuelta se le asigna 1 y a la segunda fila devuelta se le asigna 2. Este campo se puede utilizar para limitar el número total de filas devueltas. por la consulta. Y Rownum no puede tener como prefijo el nombre de ninguna tabla.

1.2 Pseudotabla

dual : dual es de hecho una tabla, una tabla con un solo campo y una fila de registros. Sus campos y registros no tienen sentido. Normalmente lo llamamos "pseudo tabla". dual significa que viene con el sistema y es una tabla del sistema, su estructura de tabla no se puede eliminar ni modificar.
Insertar descripción de la imagen aquí

2 funciones únicas

2.1 Funciones de cadena de uso común

2.1.1 longitud () Consulta la longitud del carácter especificado

Sintaxis: longitud (cadena)
Explicación: Calcula la longitud de los caracteres ocupados por la cadena

select length('ABCD') from dual

El resultado es 4

2.1.2 substr() se utiliza para interceptar cadenas

Sintaxis: substr(string string, int a[, int b]);
Explicación: la cadena necesita ser interceptada, a intercepta la posición inicial de la cadena (Nota: cuando a es igual a 0 o 1, la intercepción comienza desde la primera posición ) , b La longitud de la cadena que se va a interceptar (se omite interceptar hasta el final)

select substr('ABCD',2,2) from dual

El resultado es BC

2.1.3 concat() para concatenación de cadenas

Sintaxis: Concat (expresión 1, expresión 2)
Explicación: Utilice el valor de la expresión 1 y el valor de la expresión 2 para la visualización de empalme.

select concat('A','B') from dual 

El resultado es AB.

También existen otros métodos de empalme.

select concat(concat('A','B'),'C') from dual  -- concat只能拼接两个字符串,需要拼接多个需要嵌套

select 'A' || 'B' || 'C' from dual  -- 可以使用 || 进行字符串的拼接

2.2 Funciones numéricas de uso común

2.2.1 redondeo () redondeo

Sintaxis: ROUND (número[,decimales])
Explicación: número es el valor que se va a interceptar y decimales especifica el número de dígitos después del punto decimal que se deben retener. Opcional, omítalo para truncar todas las partes decimales y redondear. Si es un número negativo, representa el número de dígitos a la izquierda del punto decimal, el número entero correspondiente se completa con 0 y se elimina el decimal. Cabe señalar que, a diferencia de la función trunc, los números interceptados deben redondearse.

select round(100.456,2) from dual  -- 100.46

2.2.2 interceptación digital trunc (para número)

Sintaxis: TRUNC (número[,decimales])
Explicación: número es el valor que se interceptará; decimales especifica el número de dígitos después del punto decimal que se conservarán. Es opcional. Si se ignora, se truncarán todas las partes decimales.
Nota : los datos no se redondean al interceptar

select trunc(100.456,2) from dual  -- 100.45

2.2.2 módulo mod()

Sintaxis: mod(m,n)
Explicación: (1) MOD devuelve el resto de m dividido por n. Si n es 0, devuelve m; (2) Esta función toma cualquier tipo de datos numéricos o cualquier tipo de datos no numéricos como parámetro, se puede convertir implícitamente a un tipo de datos numérico.

select mod(10,3) from dual  -- 1

2.3 Funciones de fecha comunes

2.3.1 fecha y hora actuales del sistema

Sintaxis: sysdate
Explicación: Devuelve la fecha y hora actuales

select sysdate from dual  -- 2023-04-11 22:02:30

2.3.2 add_months() función para agregar meses

Sintaxis: add_months(times,months)
Explicación: Se utiliza para calcular el valor de tiempo después de sumar meses a los tiempos. Si el valor de los meses es un número negativo, es el valor de tiempo entre este punto de tiempo (este tiempo-meses meses)

select add_months(sysdate,2) from dual  -- 2023-06-11 22:06:04

2.3.3 LAST_DAY() El último día del mes

Sintaxis: last_day(time)
Análisis: Devuelve el último día del mes donde se encuentra la fecha especificada

select last_day(sysdate) from dual -- 2023-04-30 22:08:30

2.3.4 Intercepción de fecha TRUNC (para fechas)

Sintaxis: TRUNC(fecha[,fmt])
Explicación: la fecha es un valor de fecha; formato de fecha fmt; la fecha será interceptada de acuerdo con el formato de fecha especificado; ignórelo e interceptelo desde la última fecha

select trunc(sysdate,'mi') from dual -- 按分钟截取(把秒截掉,显示当前日期的分钟)
select trunc(sysdate,'hh') from dual -- 按小时截取(把分钟截掉,显示当前日期的小时)
select trunc(sysdate) from dual -- 按日截取(把时间截掉)
select trunc(sysdate,'mm') from dual -- 按月截取(把日截掉,显示当月第一天)
select trunc(sysdate,'yyyy') from dual -- 按年截取(把月截掉,显示当年第一天)

2.4 Otras funciones

2.4.1 función de valor nulo nvl()

Sintaxis: NVL (expresión 1, expresión 2)
Explicación: Si la expresión 1 es nula, NVL devuelve el valor de la expresión 2; de lo contrario, devuelve el valor de la expresión 1. El propósito de esta función es convertir un valor nulo en un valor real. El valor de su expresión puede ser numérico, de carácter o de fecha. Pero los tipos de datos de la expresión 1 y la expresión 2 deben ser del mismo tipo.

SELECT NVL(NULL, 0) FROM DUAL;  -- 0

2.4.2 valor condicional decodificar ()

Sintaxis 1: decodificar (expresión, valor, resultado1, resultado2)
Explicación: Si expresión = valor, genera resultado1, de lo contrario genera resultado2
Sintaxis 1: decodifica (expresión, valor1, resultado1, valor2, resultado2, valor3, resultado3..., predeterminado)
Explicación: si expresión = valor 1, resultado de salida 1, expresión = valor 2, resultado de salida 2, expresión = valor 3, resultado de salida 3. Si la expresión no es igual a todos los valores enumerados, la salida es la predeterminada.

select decode(100,1,2,400,200,500) from dual -- 500

Conversión de 3 filas y columnas

3.1 Usando PIVOTE

Sintaxis 1: PIVOT (función agregada arbitraria PARA nombre de columna IN (tipo))
Explicación: [Función de agregación] agrega campos que deben convertirse en valores de columna; [nombre de columna] es el campo que debe convertirse en identificadores de columna, [ tipo] ] es la visualización de resultados requerida. Puede especificar un alias en [Tipo]; también puede especificar una subconsulta en IN.

SELECT * FROM (
  SELECT 
       A16.INTEREST_RATE_CD
       ,A16.DATA_DT
       ,A16.TERM
       ,A16.INTEREST_RATE
  FROM FACT_FTP260_BSC_A16 A16
)
PIVOT(
        SUM(INTEREST_RATE)
        FOR TERM
        IN ('1D' AS D1   ,'7D' AS D7   ,'14D' AS D14
           ,'1M' AS M1   ,'2M' AS M2   ,'6M' AS M6
           ,'9M' AS M9   ,'1Y' AS Y1    ,'2Y' AS Y2
           ,'3Y' AS Y3   ,'5Y' AS Y5   ,'7Y' AS Y7
           ,'10Y' AS Y10 ,'15Y' AS Y15 )
    )

3.2 Uso de funciones de suma y DECODIFICACIÓN

select (select name from t_area where id = areaid) 区域,
       sum(case when month='01' then money else 0 end)一月,
       sum(case when month='02' then money else 0 end)二月,
       sum(case when month='03' then money else 0 end)三月,
       sum(case when month='04' then money else 0 end)四月,
       sum(case when month='05' then money else 0 end)五月,
       sum(case when month='06' then money else 0 end)六月,
       sum(case when month='07' then money else 0 end)七月,
       sum(case when month='08' then money else 0 end)八月,
       sum(case when month='09' then money else 0 end)九月,
       sum(case when month='10' then money else 0 end)十月,
       sum(case when month='11' then money else 0 end)十一月,
       sum(case when month='12' then money else 0 end)十二月

from t_account
where year = '2012'
group by areaid

3.2 Utilice CASO CUANDO y GRUPO POR

Nota : este método es el más utilizado y la comparación de precios es fácil de entender.

SELECT
    A16.INTEREST_RATE_CD
    ,SUM(CASE TERM WHEN '1D' THEN A16.INTEREST_RATE ELSE 0 END) AS D1
    ,SUM(CASE TERM WHEN '7D' THEN A16.INTEREST_RATE ELSE 0 END) AS D7
    ,SUM(CASE TERM WHEN '14D' THEN A16.INTEREST_RATE ELSE 0 END) AS D14
    ,SUM(CASE TERM WHEN '1M' THEN A16.INTEREST_RATE ELSE 0 END) AS M1
    ,SUM(CASE TERM WHEN '2M' THEN A16.INTEREST_RATE ELSE 0 END) AS M2
    ,SUM(CASE TERM WHEN '3M' THEN A16.INTEREST_RATE ELSE 0 END) AS M3
    ,SUM(CASE TERM WHEN '6M' THEN A16.INTEREST_RATE ELSE 0 END) AS M6
    ,SUM(CASE TERM WHEN '9M' THEN A16.INTEREST_RATE ELSE 0 END) AS M9
    ,SUM(CASE TERM WHEN '1Y' THEN A16.INTEREST_RATE ELSE 0 END) AS Y1
    ,SUM(CASE TERM WHEN '2Y' THEN A16.INTEREST_RATE ELSE 0 END) AS Y2
    ,SUM(CASE TERM WHEN '3Y' THEN A16.INTEREST_RATE ELSE 0 END) AS Y3
    ,SUM(CASE TERM WHEN '5Y' THEN A16.INTEREST_RATE ELSE 0 END) AS Y5
    ,SUM(CASE TERM WHEN '7Y' THEN A16.INTEREST_RATE ELSE 0 END) AS Y7
    ,SUM(CASE TERM WHEN '10Y' THEN A16.INTEREST_RATE ELSE 0 END) AS Y10
    ,SUM(CASE TERM WHEN '15Y' THEN A16.INTEREST_RATE ELSE 0 END) AS Y15
FROM FACT_FTP260_BSC_A16 A16
GROUP BY 
     A16.INTEREST_RATE_CD

4 funciones analíticas

Se puede utilizar para clasificación (1: Salto con el mismo valor, clasificación con el mismo número de serie; 2. Continuo con el mismo valor, misma clasificación con el mismo número de serie; 3. Números de serie continuos, independientemente de si los valores son lo mismo)

4.1 ranking() salta si el valor es el mismo, el rango es el mismo y el número de secuencia es el mismo.

select rank() over(order by usenum desc) 序号,t.* from t_account t

Insertar descripción de la imagen aquí

4.2 denso_rank() Los valores son los mismos, las clasificaciones son las mismas y los números de serie son consecutivos.

select dense_rank() over(order by usenum desc) 序号,t.* from t_account t

Insertar descripción de la imagen aquí

4.3 los números de serie row_number() over() son consecutivos, independientemente de si los valores son iguales

select row_number() over(order by usenum desc) 序号,t.* from t_account t

Insertar descripción de la imagen aquí

5. Establecer operaciones

5.1 unión toda unión (incluidos registros duplicados)

select * from t_owners where id>5
union all
select * from t_owners where id<8

Insertar descripción de la imagen aquí

5.2 unión (excluidos registros duplicados)

select * from t_owners where id>5
union
select * from t_owners where id<8

Insertar descripción de la imagen aquí

5.3 intersección (repitiendo partes de dos conjuntos)

select * from t_owners where id>5
intersect
select * from t_owners where id<8

Insertar descripción de la imagen aquí

Conjunto de diferencia de 5,4 menos

5.4.1 Ejemplo 1

select * from t_owners where id>5
minus
select * from t_owners where id<8

Insertar descripción de la imagen aquí

5.4.2 Paginación para operaciones de resta

select rownum, t.* from t_account t where rownum <=20
minus
select rownum, t.* from t_account t where rownum <=10

Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/slb190623/article/details/130092148
Recomendado
Clasificación