notas personales de oráculo

notas de oráculo

inicio de base de datos

Iniciar oráculo

Después de la instalación, abra la línea de comando sql

ingresar

conn sys as sysdba

Iniciar e ingresar contraseña

select 11 from dual;

Compruebe si está instalado correctamente

Creación de usuarios

Inicio de sesión de superadministrador

conn sys/口令 as sysdba

Ingrese a la base de datos como dba

Crear espacio de tabla

create tablespace scott_tb_space datafile'D:\Programming\oracle\note\tbspace/scott_tb_space.dbf' size 200m;

Cree un archivo de datos llamado scott_tb_space en la ruta D:\Programming\oracle\note\tbspace. dbf es el tipo de datos y el espacio de tabla es 200 m.

create user scott identified by tiger default tablespace scott_tb_space;

Crear usuario

create user 用户名 identified by 密码 default tablespace 表空间;

grant dba to scott;

Conceder permisos de usuario

Pruebe si la creación es exitosa

seleccione * de dual;

Si usa 19c, debe ejecutar cmd como administrador al principio y luego iniciar sesión como administrador.

sqlplus/como sysdba

Luego cree un usuario. A partir de 12c, Oracle ha agregado CDB. De forma predeterminada, CDB está conectado. Sin cambiar a pdb, el nombre de usuario debe tener el prefijo C##.

Entonces el comando para crear usuario es:

crear usuario c##root IDENTIFICADO POR sy670422;

Luego realice la autorización:

otorgar conexión, recursos, espacio de tabla ilimitado a c## contenedor raíz=all;

Luego ejecute sqlplus;

diseño de mesa

Tabla de empleados: nombre, edad, sexo

nombre edad género
Zhang San 18 masculino
Juan Pérez 20 masculino

seleccionar sintaxis

seleccionar información de consulta de la fuente de datos

En una consulta grupal, todas las columnas de funciones no estadísticas en la cláusula de selección deben aparecer en la cláusula group by.

SELECCIONE DEPTNO,EMPNO,count(*) 
FROM emp 
GROUP BY DEPTNO,EMPNO;

Consultar información del departamento.

seleccione * del departamento;

Consultar información del empleado.

seleccione * de emp;

Consultar los números de departamento y los nombres de departamento de todos los departamentos.

seleccione deptno,dname del departamento;

Consultar el nombre, salario, departamento y número de todos los empleados.

seleccione ename,sal,deptno de emp;

Eliminar duplicados

Consultar los nombres y números de departamento de todos los empleados.

seleccione nombre deptno de emp; 
##
Consulta el número de departamento de los empleados existentes 
seleccione deptno de emp; 
##
Eliminar duplicados distintos 
seleccione distinto deptno de emp; 
##
Consulta los nombres de todos los empleados y sus números de departamento 
seleccione nombre distinto, depto de emp;

Alias ​​una columna

##Consultar nombre del empleado, salario del empleado 
seleccione ename,sal de emp; 
seleccione ename nombre,sal salario de emp; 
seleccione ename como nombre,sal como salario de emp 
;

clasificar

--order by 
select ename,sal from emp; 
Consulta los nombres y salarios de todos los empleados, ordénelos en orden descendente según el salario del empleado 
select ename,sal from emp order by sal desc;##Orden descendente 
seleccione ename,sal from emp ordenar por sal asc ;## 
Orden ascendente

Ordenar por múltiples campos

--Consulta el nombre, salario y número de departamento de todos los empleados en orden ascendente por número de departamento. Los empleados del mismo departamento se ordenan en orden descendente por salario select 
ename,sal,deptno from emp order by deptno asc,sal desc;

Pseudo columnas y tablas virtuales.

Nota: Consultar columnas inexistentes es una pseudocolumna. Cuando los resultados requeridos no se pueden obtener directamente de la tabla y deben mostrarse mediante cálculo, se pueden usar pseudocolumnas + expresiones.

##Consultar nombre de usuario, salario 
seleccione ename, sal,1 de emp; 
##
Consultar nombre de usuario, salario mensual, salario anual (salario mensual*12) 
seleccione ename,sal,sal*12 de emp; 
seleccione ename,sal,sal * 12 como salario anual del emp;

procesamiento nulo

Consultar nombre del empleado, ingreso mensual salario + comisión

seleccione * de emp; 
seleccione ename,sal,comm,sal+comm como ingreso mensual de emp; 
##nvl(expresión expl, resultado res) 
seleccione ename,sal,comm,sal+nvl(comm,0) como ingreso mensual de emp; 
##
Ordenar 
##Ordenar según el salario del empleado 
select * from emp order by sal; 
##Orden descendente 
select * from emp order by comm desc; 
##Pon los vacíos al final null primero, null último 
select * from emp ordenar por comm desc nulos primero; 
seleccionar * de emp ordenar por comm desc nulos al final 
;

Concatenación de cadenas (||)

seleccione ename de emp; 
​seleccione
ename,ename||'a' como 别名 de emp; 
##

null 
seleccione ename,comm,ename||comm prueba de emp;

mesa virtual

La tabla virtual dual construye principalmente reglas de sintaxis seleccionadas. Oracle garantiza que siempre habrá un solo registro en la tabla dual.

Evaluar expresiones y seleccionar variables del sistema.

--Calcular 999*666, 
seleccione 999*666 de dual;

seleccione el orden de ejecución de la declaración

nulo, cuando se opera con nulo, el resultado es nulo

seleccione el alias del campo de consulta 1, el campo de consulta 2 como alias, el alias de expresión del origen de datos ordene por descripción del campo de clasificación

tema gramatical

seleccionar....de...ordenar por

orden de análisis

1.de

2.seleccionar

ciudad de tercer orden

Consulte el nombre del empleado, el alias del salario del empleado y ordene los resultados en orden descendente de salario

seleccione ename,sal 工资 de emp ordenar por sal desc;

orden gramatical

seleccionar, desde, dónde, agrupar por, tener, ordenar por

Orden de compilación

desde, donde, agrupar por, tener, seleccionar, ordenar por

consulta condicional

Operación condicional

=,<,><=,>=,<>,!=,entre y, en Consultar la información de los empleados de 10 departamentos

Consultar información de empleados fuera de 10 departamentos.

Consultar el nombre, tipo de trabajo y número de departamento de los empleados con un salario superior a 2000

Consultar información de empleados con salario entre 1800 y 2500

Consultar información de empleados de los departamentos 10, 30 y 40.

seleccione * de emp 
donde deptno=10; 
​seleccione
* de emp 
donde deptno<>10;
​seleccione
ename,trabajo,deptno,sal 
de emp 
donde sal>2000 
​seleccione
* de emp 
donde sal entre 1800 y 
2500

Operación de conexión condicional

y o no

Consultar la información de los empleados que no están en el departamento y cuyo salario no supera los 1500

seleccione * de emp deptno!=20 y sal<1500;

operación nula nvl

--Consultar la información de todos los empleados que tienen dificultades para obtener bonificaciones 
--Consultar datos Información del empleado 
--Fuente de datos emp 
--Condiciones del filtro comm no es nulo 
seleccione ename, comm de emp 
donde comm no es nulo; 
seleccione
ename, comm de emp 
donde comm es nulo; 
​select
* from emp donde no comm es nulo; 
​​​--nvl


() da un valor específico cuando un valor es nulo; de lo contrario, el valor en sí es 
select nvl(null,100 ) from dual; 
--Consultar la información de los empleados que han recibido bonificaciones y consultar la información de los empleados cuyas bonificaciones son superiores a 0 
select * from emp donde comm>0;

insertar

--Insertar un dato en la tabla emp 
insertar
en emp(empno,ename,job,deptno) value(1111,'afbi','aaa',200) 
;

Manejo especial de consultas difusas

--Consulta empleados que contienen '% 
a'select * from emp donde ename como '%a%%' escape ()

donde cláusula infantil

Consultar información de empleados del departamento de ventas (ventas)

seleccione * de emp 
donde deptno=(seleccione deptno de depto donde dname='ventas') 
​--1
)de 
--2)de donde 
    --21)de 
    --22)de donde 
    --23)seleccione 
--3)seleccione 
​​​--Consulta


empleados con grado salarial 2 
--datos información del empleado 
--fuente tabla de empleados 
--condiciones grado salarial 2 
seleccione * de emp 
donde sal entre (seleccione losal de salgrade donde grado=2) y (seleccione hisal de salgrade donde nota=2);

función

función de carácter

concat(x,y) concatena cadenas xey

instr(x,str,start,n). Para buscar str en x, puede especificar comenzar desde el inicio o la enésima vez.

longitud(x) devuelve la longitud de x

lower(x) x se convierte a minúsculas

Upper(x) X convierte a mayúsculas

ltrim(x,trim_str) trunca la cadena trim.str en el lado izquierdo de x y trunca los espacios de forma predeterminada.

rtrim(x,trim_ str) trunca la cadena trim_ str en el lado derecho de x y trunca los espacios de forma predeterminada

reemplazar(x, antiguo, nuevo) busca lo antiguo en x y lo reemplaza con lo nuevo

substr(x, inicio, longitud) devuelve la secuencia de caracteres de x, comenzando desde el inicio, interceptando caracteres de longitud, longitud predeterminada, predeterminada hasta el final

función concat, seleccione número

--Consultar los nombres y tipos de trabajo de todos los empleados 
seleccione ename,trabajo de emp; 
--Conéctelos juntos 
seleccione ename||trabajo nombretrabajo de emp; 
seleccione concat (ename,trabajo) nombretrabajo de emp;
--Buscar subcadena 
--Agregue una cadena "helloworld", busque "e" 
seleccione instr ('holloword','a') de dual; 
--Compruebe si los nombres de todos los empleados contienen 'A', si está incluido, el posición de visualización 
seleccione ename,instr(ename,'a' de emp); 
​--Agregue
una cadena "helloworld", busque "l" 
seleccione instr ('holloword','l') de dual; 
seleccione instr ('holloword ','l',6) de dual; 
seleccione instr ('holloword','l',1,2) de dual; 
comience desde la primera posición y busque la segunda l Ubicación

ltrim elimina espacios en el lado izquierdo de una cadena

rtrim elimina espacios en el lado derecho de una cadena

seleccione ltrim (' abc abc ')||'a' de dual; 
seleccione rtrim (' abc abc ')||'a' de dual; 
seleccione ltrim(rtrim (' abc abc '))||'a' de dual; 
seleccione concat(rtrim(ltrim(' abc abc ')),'a') de dual; 
--去掉左边的aaa 
seleccione ltrim ('aaabsdbdb','aaa') de dual;

reemplazar reemplazar

seleccione reemplazar ('aaabsdbdb','a','_') de dual;

intercepción substr

select substr('abc',2,2) from dual; 
--Muestra el primer carácter de los nombres de todos los empleados 
select substr(ename,1,1) from emp; 
--Muestra el último carácter 
select ename,substr(ename ,longitud(ename),1) de emp;

función de fecha

sysdate hora actual del sistema fecha_actual devuelve la fecha actual del sistema, sel, seleccione agregar_ meses(d1,n1) devuelve la nueva fecha después de agregar n1 meses a la fecha d1 último, día(d1) devuelve el último día del mes donde está la fecha d1 ubicado fecha meses, _between(d1,d2) devuelve el número de meses entre 8 período d1 y la fecha d2 siguiente. day(d1[c1]) devuelve la fecha de la fecha d1 en la próxima semana y el día de la semana (parámetro c1 )

--Obtener la fecha actual del sistema, 
seleccionar sysdate desde dual; 
seleccionar current_date desde dual; 
​​--Obtener

la hora un día después de que el sistema 
seleccione sysdate+1 desde dual; 
​--Saltar

a tres meses después y consultar las fechas de regularización de todos los empleados, período de prueba de 3 meses 
seleccione empno, nombre, fecha de contratación de emp; 
seleccione no, nombre de empresa, fecha de contratación,add_months(fechacontratada,3) de emp; 
​--Devolver
el último día del mes 
seleccione último_día(fecha del sistema) de doble ; 
--Ver cada El último día del mes de ingreso del empleado 
seleccione last_day(hiredate) El último día, fecha de contratación desde emp; 
​--Consultar
cuántos meses ha trabajado cada empleado hasta ahora 
seleccione sysdate,hiredate,months_between(sysdate,hiredate) from emp; 
​--Obtener
el siguiente día de la semana en el momento actual 
seleccione next_day(sysdate,'Monday') from dual; 
​--Ver
las horas de trabajo de cada empleado
seleccione contratadotae,next_day(hiredate,'Wednesday') de dual;

función de conversión

to_ char(x,c) Convertir fecha o datos x a tipo de datos char según el formato c to_ date(x,c) Convertir cadena x en fecha según el formato c to_ _number(x) Convertir cadena x a digital

--to_char carácter de conversión de fecha 
seleccione fecha de contratación de emp; 
seleccione to_char (fecha de contratación,'dd/mm/aaaa') de emp; 
seleccione to_char (fecha de contratación,'mm"mes"/dd"日"/aaaa"año"') de emp; 
​​--to_date



(chars,charFormat) fecha de conversión de caracteres 
--1990/01/01 
seleccione to_date('1990/01/01','yyyy/mm/dd') de dual; 
​--to_number
() Convertir caracteres a números 
: "11" 
seleccione '11' de dual; 
seleccione '11'+1 de dual; 
seleccione to_munber('11')+1 de dual; 
seleccione to_number ('11','xx') de dual;

Funciones de grupo de uso común

La función de grupo opera en múltiples registros al mismo tiempo y devuelve un resultado avg() promedio suma() suma seleccione next_day(sysdate,'Monday') de dual; min() valor mínimo seleccione next_day(sysdate,'Monday) ') de dual; max() valor máximo count() nota estadística: nulo no participa en la operación

--Encontrar el número total de personas count() El número de personas en la empresa 
seleccione count(emptno) de emp; 
--El salario más alto de todos los empleados 
seleccione max(sal) de emp; 
--El mínimo 
seleccione min(sal ) de emp; 
--Suma Los salarios que deben pagarse en un messeleccione 
sum(sal) de emp; 
--Encuentre el salario promedio seleccione 
avg(sal) de emp; 
--Estadísticas sobre el número de empleados en 10 departamentosseleccione 
count(empno) from emp 
donde deptno=10; 
--Estadísticas La comunicación de toda la empresa no está involucrada en la operación 
. select count(comm) fromm emp;    
--Estadísticas sobre en cuántos departamentos hay empleados 
. select count( distinto deptno) del departamento; 
--Número estadístico de registros. 
seleccione recuento (*) de emp; 
seleccione recuento (*) del departamento; 
-- Cuente cuántos departamentos hay en toda la empresa 
seleccione recuento(deptno) del departamento;

grupo por grupo

Agrupar por grupo agrupa aún más los registros que cumplen las condiciones según determinadas características. Extraer puntos en común en cada conjunto de registros

--Encontrar el salario promedio de cada departamento seleccione 
el departamento, promedio (sal) 
del 
grupo emp por departamento; 
--Encuentre el salario promedio de cada trabajo seleccionado 
, promedio (sal) del 
grupo emp por trabajo; 
--Encuentre los empleados El número de las personas en cada departamento 
seleccionan count(empno),deptno del 
grupo emp por deptno;

tener información del grupo de filtros

La información del grupo que se obtendrá puede necesitar cumplir ciertas condiciones.

--Encuentre el salario promedio de cada departamento, 
seleccione deptno, avg(sal) 
del grupo emp 
por deptno 
que tenga avg(sal)>2000 para departamentos con más de 2000 empleados; 
--Ver el número de departamento y el número de empleados en el departamento con más de 3 empleados; 
seleccione deptno,count(deptno) del 
grupo emp por deptno 
que tenga count(deptno)>3;

Filtrar registros de filas e información de grupos

El filtrado de registros de fila es para cada registro y el filtrado de información de grupo es para grupos, pueden aparecer al mismo tiempo, filtrar primero las filas y luego filtrar los grupos. Al filtrar filas donde, solo aparecerá información de fila. Al tener grupo de filtro, solo aparecerá información de grupo. Estructura: seleccionar .. de ..dónde .agrupar por .. tener...

Orden de ejecución:

de

dónde

agrupar por

teniendo

seleccionar

--Consulta número de departamento, número de empleados en el departamento, empleados con salario superior a 2000, departamentos con más de 2 empleados 
seleccionan deptno,count(deptno) de emp 
donde sal>2000 
agrupan por deptno 
teniendo recuento(deptno)>=2 
;

Paginación y deduplicación

Hay dos soluciones para implementar la paginación: (1) Consultar todos los registros en la base de datos a la vez y luego mostrar los registros especificados en cada página. Paginación falsa (2) Consulte la base de datos varias veces, obtenga solo los datos de esta página cada vez y muestre paginación verdadera

Hoy en día, los datos en la construcción de sitios web son masivos. Si implementa el plan 1: sin duda aumentará la carga en la memoria del servidor y reducirá la velocidad de ejecución del sistema; si usa el plan 2, es posible que opere la base de datos con frecuencia, lo que también afectará la eficiencia de la respuesta; por lo tanto, todos utilizarán el plan 1 + el plan 2 para lograrlo. El núcleo de la paginación es calcular cuántos registros por página, el número total de páginas y qué página. Para cada página de datos, solo necesita calcular el registro inicial y el registro final.

Paginación verdadera y falsa

Consulta de paginación real primero, luego paginación falsa

Primero consulte la base de datos para encontrar 500 elementos (paginación verdadera) y luego use paginación falsa para mostrar 100 elementos (paginación falsa)

Mejor eficiencia y uso de memoria

Rownum

rownum no es una columna real, es el número de filas devueltas por la consulta. A la primera fila devuelta se le asigna 1, a la segunda fila es 2, y así sucesivamente. Este pseudocampo se puede utilizar para limitar las filas devueltas por la consulta. Número total de filas. Dado que rownum es siempre el número del conjunto de resultados, cualquier registro con rownum>1 no se puede consultar directamente porque siempre comienza desde 1.

--True paging 
--rownum es el número de cada registro en cada conjunto de resultados. 
Seleccione ename,sal,deptno,rownum de emp; 
--Paging
, muestra 5 registros en cada página, consulta cada uno. También 
seleccione enmae,sal,deptno ,rownum from emp donde rownum<=5; 
​--consulta
los datos en la segunda página. No puedes usar mayor que, porque cada fila se convertirá en la primera fila. 
selecciona enmae,sal,deptno,rownum from emp donde rownum<= 10; 
​--Consulta
toda la información de los empleados y agrega pseudocolumnas rownum 
select enmae,sal,deptno,rownum from emp; 
--Usa un conjunto de resultados de consulta como fuente de datos temporal, solo temporal Ese conjunto de resultados rownum campo común 
selecciona * from (select ename,sal,deptno,rownum from emp) donde rownum<=10;

Si la primera línea no es mayor que 5, entonces se eliminará el primer día y luego la segunda línea se convertirá en la primera línea, y así sucesivamente, y finalmente la décima línea se convertirá en la primera línea.

seleccione ename,sal,deptno,rownum de emp; 
seleccione
ename,sal,deptno,rownum de emp donde rownum<=5; 
seleccione
* de (seleccione ename,sal,deptnno,rownum rw de emp) donde rw >5 y rw<=10; 
​--Consulta
los datos en la segunda página 
select ename,sal,deptno,rownum from (ename,sal,deptno,rownum rw from emp) donde rw>5 y rw<=10;​--Consulta los 
empleados
Información, nombre, salario, número de departamento, salario en orden descendente, realizar paginación, mostrar 3 registros en cada página, consultar los datos en la primera página seleccionar 
ename,sal,deptno, rwonum r1 de emp orden por sal desc ;
seleccione
ename, sal,deptno, r1, rwonum r2 de (select ename,sal,deptno,rownum r1 de emp orden por sal desc);​seleccione ename, 
sal
,deptno,r1,r2 de
(seleccione ename,sal,deptno, r1, rownum r2 from (select ename,sal,deptno,rownum r1 from emp order by sal desc)) donde r2<=3; 
;
seleccione ename,sal,deptno,r1,r2 de 
(seleccione ename,sal,deptno, r1, rownum r2 de 
(seleccione ename,sal,deptno,rownum r1 de 
 emp orden por sal desc)) 
 donde r2>(2-1) *3 y r2<=2*3;

deduplicación ruidosa

ROWID es un concepto importante en ORACLE. Un valor de dirección relativamente único utilizado para localizar un registro en la base de datos. Normalmente, este valor se determina y es único cuando la fila de datos se inserta en la tabla de la base de datos. ROWID es una pseudocolumna, en realidad no existe en la tabla. Es una pseudocolumna codificada por ORACLE en función de la información de la dirección física de cada fila de datos al leer las filas de datos de la tabla. Por lo tanto, la información de la dirección física de una fila de datos se puede encontrar en función del ROWID de una fila de datos. Esto le permite localizar rápidamente filas de datos. La mayoría de las operaciones de la base de datos se completan a través de ROWID y usar ROWID para localizar un solo registro es la forma más rápida. A veces, cuando se recuperan datos complicados, las condiciones de búsqueda ordinarias no pueden cumplir con los requisitos. Rowid se puede utilizar para recuperar los resultados con precisión. En Oracle, si desea consultar varios campos en una determinada tabla y solo deduplicar un determinado campo, utilice distintos o agrupar por no funcionará.. Distinguir y agrupar por deduplicará los campos a consultar, es decir, cuando todos los campos consultados sean iguales, Oracle los considerará duplicados. Usar Rowid es una buena opción en este momento.

--Preparar datos 
crear copia de tabla como seleccionar * del departamento; ##Copiar una tabla 
seleccionar
* de la copia; 
​seleccionar
departamento no, nombre, ubicación, ID de fila de la copia; 
​insertar
en copia seleccionar * del departamento;##Insertar 
confirmación ;
--Mantener
solo una copia de todos los mismos registros 
--1. Agrupar los datos según información repetida 
--2. En cada grupo, seleccionar un registro para guardar y encontrar las características (roeid) 
--3 .Al eliminar, buscar los datos que no están dentro del rango de retención 
seleccione * del grupo de copia por deptno,dname,loc; 
seleccione
min(rowid) del grupo de copia por deptno,dname,loc; 
seleccione
* de la copia donde roeid no esté en( seleccione min( rowid) del grupo de copia por deptno,dname,loc);   
eliminar
de la copia donde no está el rowid (seleccione min(rowid) del grupo de copia por deptno,dname,loc); ##Eliminar registros duplicados
confirmar; 
​seleccionar
* de copiar;

unirse a la mesa

Consulta de conexión: 1) Al realizar una consulta, se requieren varias tablas al mismo tiempo (especialmente aquellas con relaciones de clave externa) y se necesitan los valores entre varias tablas para conectarse; 2) El estándar SQL actual propone dos consultas de conexión, la El primero es el estándar SQL92 anterior y el segundo es el estándar SQL99 más nuevo que se utiliza ampliamente actualmente;

3) La forma de 92 es simple, pero la escritura es relativamente detallada. 99 no solo está optimizado en el nivel inferior, sino que también la forma es más clara y lógica. Generalmente se recomienda utilizar el estándar 99;

92 Gramática

Es necesario colocar varias tablas después de y todas las condiciones de conexión se colocan en dónde. Por lo tanto, las uniones equivalentes, enlaces no equivalentes, uniones externas, etc. en SQL92 son en realidad solo estructuras de filtrado de condiciones whgre: seleccione... de tabla1, tabla2 , tabla3 .. donde... Muchas veces es necesario darle un alias a la tabla (1. Simplificar el nombre de la tabla 2. Puede haber una autounión) El principio de la conexión: Según el orden de aparición de las tablas después de, las tablas anteriores se usan como memoria para el bucle, la tabla que aparece después se usa como el bucle for externo

--Consulta los datos en la tabla emp y en la tabla de departamento (producto cartesiano) emp12 registros * dept4 registros = 48 
seleccionar * de emp e,dept d ordenar por empno; 
seleccionar * de emp e,dept d donde 1=1 ordenar por empno ;

Equijuntar

Según el producto cartesiano, tome el mismo valor en la columna de condición para consultar la información del empleado y la información del departamento Consultar el nombre del empleado y el nombre del departamento.

--Consulta la información de cada empleado y la información del departamento 
--Datos: información del empleado información del departamento 
--Fuente: emp,dept 
--Condiciones de conexión: emp,deptno=dept,deptno 
select * from emp e,dept d 
donde e.deptno=d.deptno; 
​--Consulta
la información de cada departamento de empleados y el número de personas en el departamento 
--Consulta datos: información del departamento, plantilla del departamento correspondiente 
--Fuente de datos: departamento, emp calculado 
--Condiciones de conexión :dept,deptno=correspondiente al número de deptno 
-
consulta el número de empleados en el departamento con empleados 
seleccione count(*),deptno from emp group by deptno; 
seleccione * from dept d,(seleccione count(*),deptno del grupo emp por deptno) c 
donde d.deptno=c.deptno

no equiunión

!=, >, <, <>, entre y consulta el nombre, salario y grado del empleado

--Consulta el nombre de cada empleado, monto del salario, tiempo de incorporación y grado salarial correspondiente 
--Consulta datos: ename, sal, fecha de contratación, grado 
--Fuente de datos: departamento, salgrade 
--Condiciones de conexión: emp, sal entre losal y hisal 
select ename,sal,hiredate,grade from emp e,salgrade s 
donde e.sal entre losal e hisal;

unión externa

Las uniones internas utilizan operadores de comparación para hacer coincidir filas en dos tablas según los valores de las columnas comunes a cada tabla. Una unión exterior puede ser una unión exterior izquierda, una unión exterior derecha o una unión exterior completa. El conjunto de resultados de una combinación externa izquierda incluye todas las filas de la tabla izquierda especificada en la cláusula LEFT OUTER, no solo las filas que coinciden con las columnas de la combinación. Si una fila de la tabla de la izquierda no tiene una fila coincidente en la tabla de la derecha, todas las columnas de la lista de selección de la tabla de la derecha tendrán valores NULL en las filas del conjunto de resultados asociados. La unión exterior derecha es la unión retórica de la unión exterior izquierda. Se devolverán todas las filas de la tabla derecha. Si una fila de la tabla de la derecha no tiene una fila coincidente en la tabla de la izquierda, se devolverá un valor nulo para la tabla de la izquierda. Mire '+', la tabla con '+' es la tabla esclava y la tabla opuesta es la tabla maestra. Encuentre los nombres de todos los empleados y los nombres de sus superiores. Encuentre los nombres de todos los superiores y los nombres de sus empleados. Encuentre el número de empleados y los nombres de los departamentos en todos los departamentos. Encuentre los nombres y el número de empleados de todos los departamentos con empleados .

--Conexión interna 
--Consulta la información de cada departamento y el número de personas en el departamento 
seleccione * del departamento; 
seleccione * del emp; 
​seleccione
recuento(*),deptno del emp agrupar por deptno; 
​seleccione
* del departamento d ,(select count (*),deptno from emp group by deptno) c 
donde d.deptno=c.deptno; 
​--Conexión externa
a la tabla principal (siempre que los registros consultados en la tabla principal deben aparecer en los resultados ) 
--Ver la información de cada departamento, número correspondiente de empleados 
--Consultar datos: información del departamento, plantilla del departamento 
--Fuente de datos: departamento d, (seleccione recuento (*)), número de departamento del grupo emp por número de departamento) c 
--Condiciones de conexión: d.deptno= c.deptno(+) 
select * from dept d,(select count(*),deptno from emp group by deptno) c 
donde d.deptno=c.deptno(+); 
​--nvl
Cuando un valor está vacío Proporcione un valor específico; de lo contrario, el valor en sí mismo 
será seleccionar d.deptno,dname,loc,nvl(cc,0) del departamento d,
(select count(*) cc,deptno from emp group by deptno) c 
donde d.deptno=c.deptno(+); 
--Listar
la información de cada empleado con un superior y la información superior correspondiente 
--Listar todos los empleados información y la información de sus superiores 
--Datos de consulta: información de empleados, información de superiores 
--Fuente de datos: emp e, emp m 
--Condiciones de conexión: e.mgr=m.deptno(+ 
)

autoconexión

Equijoin especial (de la misma tabla) para encontrar los nombres de los empleados cuyos superiores existen.

--Consulta la información propia de cada empleado (empleado con superior) y la información del superior 
--Consulta datos: todos los empleados son datos, datos del superior 
--Fuente de datos: emp e, emp m 
--Condiciones de conexión: e.mgr=m.empno 
seleccione * de emp e,emp m 
donde e.mgr=m.empno;

99 Gramática

unión cruzada

Conexión cruzada para implementar producto cartesiano.

--99 flag implementa la selección de producto cartesiano 
* del departamento de unión cruzada emp;

unión natural

Requerido (columna del mismo nombre, edificio exterior principal)

Conexión natural, conexión equivalente

Consultar los nombres de todos los empleados y los nombres de sus departamentos.

Debe haber columnas con el mismo nombre o una relación de clave primaria y externa:

--Ver los nombres de todos los empleados, número de empleado, número de departamento, nombre de departamento 
--Datos de consulta: nombre de empleado, número de empleado, número de departamento, nombre de departamento 
--Fuente de datos: emp, dept 
--Condiciones de conexión: emp.deptno= dept.deptno 
--99 se puede implementar usando unión natural unión natural 
seleccione ename,empno,deptno,dname de emp natural join dept; 
--Consulte
el nombre del empleado, nombre del departamento, número de departamento de 10 departamentos 
seleccione ename,deptno,dname desde emp natural unirse al departamento 
donde deptno=10

unirse usando (columna del mismo nombre)

usando conexión, conexión equivalente para consultar los nombres de todos los empleados y los nombres de sus departamentos

Debe haber columnas con el mismo nombre: equijoin

--99 se puede implementar usando conexión (valor igual) 
seleccione ename,empno,deptno,dname de emp unirse al departamento usando (deptno); 
--Consulte
el nombre del empleado, nombre del departamento, número de departamento de 10 departamentos 
seleccione ename,deptno , nombre del departamento de unión de emp usando (nºdept) 
donde nºdept=10;

Unete

en conexión, que se puede utilizar para conexión de equivalencia, conexión de no equivalencia y autoconexión. Puede resolver - cortar conexión. La columna de relación debe distinguirse para consultar los nombres de todos los empleados y los nombres de sus departamentos. Consultar el nombres, salarios y grados salariales de todos los empleados.

Nota: ¿Necesita agregar un calificador antes de la columna con el mismo nombre? Si usa una conexión natural usando conexión, no puede agregarla. Si no, debe agregarla.

--Ver los nombres, números y números de departamento y nombres de departamento de todos los empleados 
--Si es necesario agregar un calificador antes de la columna con el mismo nombre. Si usa una conexión natural usando conexión, no puede agregarlo. De lo contrario , debe agregar 
select e.ename ,e.deptno,e.empno,d.dname 
from emp e join dept d on 
e.deptno=d.deptno; 
​--Ver
el nombre de cada empleado, salario, número de departamento, salario grado 
--Datos de consulta: nombre del empleado, salario, número de departamento, grado salarial 
- fuente de datos; emp, slagrade 
- condiciones de conexión: sal entre losal e hisal 
seleccione ename,sal,deptno,grade from emp e join salgrade s on sal entre losal y hisal; 
--Consulta
nombre del empleado, salario, número de departamento, grado salarial, nombre del departamento en 30 departamentos 
--Consulta datos: nombre del empleado, salario, número de departamento, grado salarial, nombre del departamento 
--Fuente de datos: emp e, salgrade s, departamento d 
--Condiciones de unión: sal entre losal e hisal e.deptno=d.deptno 
​seleccione
ename,sal,e.deptno,dname,grado 
de emp e unirse al departamento d
en e.deptno=d.deptno 
une salgrade s 
en sal entre losal e hisal 
donde e.deptno=30;

unión externa

Unión externa, está la tabla principal y la tabla esclava: unión izquierda [externa] en unión izquierda [externa] usando unión derecha [externa] en unión derecha [externa] usando

--Consulta número de empleado, nombre del empleado, nombre superior correspondiente del empleado, número superior 
seleccione e.empno número de empleado, e.ename nombre de empleado, e.mgr número superior, m.ename nombre superior 
de emp e izquierda unión externa emp m en e .mgr=m.empno

Resumen de unión de tablas

--Unión de tabla Cuando los datos consultados provienen de más de una tabla--1. Producto cartesiano--2. Unión equivalente--3. Unión no equivalente--4. Autounión--92 estándar

seleccione... de la tabla1, tabla2 donde tabla1. xxItabla2. xx y tabla1.xx=1;

--99 estándar

seleccione.....de la tabla unión cruzada tabla2 donde... 
​seleccione
...de la tabla1 unión natural tabla2 donde... ; 
​seleccione
...de la tabla1 unión tabla2 usando (同名字段) donde... .. 
​seleccione
....de la tabla1 únase a la tabla2 en连接条件 donde... 
​seleccione
...de la tabla1 unión externa derecha a la tabla2 en 连接条件donde 
.....

Totalmente conectado

seleccione ...de la tabla unión completa tabla2 en la condición de unión donde...

sintaxis ddl

ddl: lenguaje de definición de datos

dml: lenguaje de manipulación de datos

dcl: lenguaje de control de datos

Operaciones de tabla

Crear mesa

crear tabla nombre de la tabla (

Tipo de nombre de campo (longitud),

...Otros campos...

);

Modificar la estructura de la tabla

Modificar el nombre de la tabla

cambiar el nombre de la tabla original al nuevo nombre de la tabla

cambie el nombre de tb_txt a tb_txt_new;

Modificar el nombre de la columna

alterar el nombre de la tabla cambiar el nombre de la columna nombre de la columna a

modificar la tabla tb_txt_new cambiar el nombre de la columna txtid a tid;

Modificar tipo de campo

alterar el nombre de la tabla modificar (tipo de campo)

alterar tabla tb_txt_new modificar(tid vachar2(20))

Añadir columna

alterar el nombre de la tabla agregar el tipo de campo

alterar tabla tabla tb_txt_new agregar col_test_name varchar2(30)

Eliminar columna

alterar el nombre de la tabla colocar el campo de la columna

alterar tabla tabla tb_txt_new soltar columna col_test_name

Eliminar tabla

soltar tabla tb_txt_new;

PLSQL

gramática:

--plsql se divide en tres partes: parte de declaración, parte ejecutable, parte de manejo de excepciones 
declarar 
    --declarar variables, cursor 
    i entero; 
comenzar 
    --parte de ejecución 
    
    --[Manejo de excepciones] 
    
finalizar;
establecer la salida del servidor en --Abrir la opción de salida 
declarar
 
    i entero; 
comenzar 
    --Ejecutar la parte 
    DBMS.output.put_line('HELLO WORLD') --Imprimir 
    --[Manejo de excepciones] 
finalizar; 
/

    

variable

Las variables comunes en la programación PL SQL se dividen en dos categorías:

  1. Tipos de datos comunes (char, varchar2, fecha, número, boolean.long)

  2. Tipos de variables especiales (variables de referencia, variables de registro)

La forma de declarar variables es

  1. Nombre de variable tipo de variable (longitud de variable) Por ejemplo: v_name varchar2(20);

Variables ordinarias

Hay dos formas de asignar valores a las variables:

  1. Asignación directa: =

  2. Asignación de declaración, use select...into... para asignar valor: (sintaxis seleccione valor en variable)

[Ejemplo] Imprima información personal de la persona, incluyendo: nombre, salario, dirección

--Imprimir información personal del personal, incluyendo: nombre, salario, dirección 
DECLARAR 
    --Nombre 
    V_NAME VARCHAR2(20):='Zhang San'; --Asignación directa de variable declarada 
    --Salario 
    V_SAL NUMBER; 
    --Dirección 
    V_ADDR VARCHAR2(200) ; 
COMENZAR 
    --Asigne v_sal directamente en el programa 
    :=1580; 
    --Asignación de declaración 
    SELECCIONE 'Sichuan' EN v_addr desde dual; 
    dbms_output.put_line('Nombre: '||v_name||', salario: ' 
                         ||v_sal|| ', dirección: '|| 
                         v_addr); 
FIN;

variable de referencia

El tipo y la longitud de la variable dependen del tipo y la longitud de los campos de la tabla.

Especifique el tipo y la longitud de la variable mediante el nombre de la tabla y el nombre de la columna %tipo, por ejemplo:

v_name emp.ename%tipo

[Ejemplo] Consultar la información personal de 7839 empleados en la tabla emp e imprimir el nombre y el salario

--Tipo común 
--Consulta la información personal de 7839 empleados en la tabla emp, imprime el nombre y el salario 
DECLARE 
    --Nombre 
    V_NAME VARCHAR2(20);--Declara variables para asignar valores directamente 
    --Salario 
    V_SAL NUMBER; 
    
BEGIN 
    seleccione ename,sal en v_name, v_sal 
    de emp donde empno=7839; 
    --Imprimir salida 
    dbms_output.put_line('Nombre: '||v_name||', Salario: ' 
                         ||v_sal); 
END; 
​​--Variable de referencia

 
DECLARAR 
    --Nombre 
    V_NAME emp .ename%tipo;--Declarar variables y asignar valores directamente 
    --Salario 
    V_SAL emp.sal%tipo; 
COMENZAR 
    seleccionar ename,sal en v_name,v_sal 
    de emp donde empno=7839; 
    --Imprimir producción
    
    dbms_output.put_line('Nombre: '||v_name||', Salario: ' 
                         ||v_sal); 
FIN;

variable de registro

Aceptar una fila completa de registros de una tabla

Sintaxis: nombre de variable nombre de tabla %tipo de fila Por ejemplo: v_emp emp%tipo de fila;

[Ejemplo] Consultar e imprimir el nombre y salario del empleado No. 7839

--Consulta e imprime el nombre y salario del empleado No. 7839DECLARE 
    --Variable de tipo de registro 
    v_emp emp%rowtype; 
BEGIN 
select 
    * into v_emp 
    from emp donde empno=7839; 
    --Imprime la salida 
    dbms_output.put_line('Nombre:'|| v_emp .ename||', salario: ' 
                         ||v_emp.sal); 
FIN;
    

control de procesos

  • rama condicional

    gramática:

    COMENZAR 
        SI condición 1 ENTONCES ejecución 1: 
        
        ELSIF condición 2 ENTONCES ejecución 2: 
        
        ELSE ejecución 3 
        
        FINALIZAR SI 
        
    ;

    [Ejemplo] Determine si hay más de 20 registros en la tabla emp, entre 10 y 10 o menos de 10 registros

    --Determinar si hay más de 20 registros en la tabla emp, entre 10-10, o menos de 10 
    DECLARE 
        --Declarar una variable para recibir el número en la tabla emp 
        v_count NUMBER; 
    BEGIN 
        SELECT COUNT(1) INTO V_COUNT FROM EMP; 
        --count (1)=count(*) 
        IF V_COUNT>20 THEN 
            DBMS_OUTPUT.PUT_LINE 
            ('Más de 20 registros en la tabla son: '||v_count); 
        ELSIF V_COUNT>=10 THEN 
            DBMS_OUTPUT.PUT_LINE 
            ('El los registros en la tabla están entre 10 y 20 Las entradas son: ''||v_count); 
        ELSE 
            DBMS_OUTPUT.PUT_LINE 
            ('Los registros en la tabla debajo de 10 son: ''||v_count); 
        END IF; 
    END;
  • ciclo

    gramática:

    COMIENZO DEL BUCLE 
        SALIR 
            CUANDO salir de la condición del ciclo 
        FINALIZAR EL BUCLE 
    ;

    [Ejemplo] Imprimir números del 1 al 10

    DECLARE 
        --Declara la variable del bucle y asigna el valor inicial 
        NÚMERO V_NUM :=1; 
        
    COMENZAR SALIR 
        DEL BUCLE 
            CUANDO V_NUM>10; 
            DBMS_OUTPUT.PUT_LINE(v_NUM); 
            --Incrementa la variable del bucle 
            v_num:=v_num+1; 
        END LOOP; 
    END ;

cursor

Cursor: se utiliza para almacenar temporalmente varias filas de datos devueltos por una consulta. Al atravesar los datos, puede acceder y procesar los datos en el conjunto de resultados fila por fila.

Uso del cursor: declarar-->abrir-->leer-->cerrar

gramática

  1. Declaración del cursor:

    El nombre del cursor CORSOR [(lista de parámetros)] es una declaración de consulta;

  2. Apertura del cursor:

    ABRIR nombre del cursor;

  3. Valor del cursor:

    FETCH nombre del cursor EN la lista de variables;

  4. Cierre del cursor

    CERRAR nombre del cursor;

Propiedades del cursor

Propiedades del cursor Tipo de valor de retorno ilustrar
%NÚMERO DE FILAS entero Obtenga el número de filas de datos devueltas por la declaración FETCH
%ENCONTRÓ booleano Verdadero si la declaración FETCH más reciente devuelve una fila de datos; falso en caso contrario
%EXTRAVIADO booleano Lo contrario del valor devuelto por la propiedad %FOUND
%ESTA ABIERTO booleano Verdadero si el cursor se ha abierto, falso en caso contrario

Entre ellos, %NOTFOUND devuelve VERDADERO cuando el elemento no se puede encontrar en el cursor y generalmente se usa para determinar si se debe salir del bucle.

Sin cursor de parámetro

--Utilice un cursor para consultar los nombres y salarios de todos los empleados en la tabla emp e imprímalos en secuencia 
DECLARE 
    --Declare el cursor 
    CURSOR C_EMP IS SELECT ENAME,SAL FROM EMP; 
    
    --Declare una variable para recibir los datos en el cursor 
    v_ename emp.ename%type; 
    v_sal emp.sal%type; 
    
BEGIN 
    --Abre el cursor 
    open c_emp; 
    
    --Atraviesa el 
    bucle del cursor 
    --Obtiene los datos en el cursor 
    busca c_emp en v_ename,v_sal; 
    
    --Salir el bucle 
    sale cuando c_emp%notfound; 
    DBMS_OUTPUT.PUT_LINE(v_ename ||'-'||v_sal); 
    finalizar bucle; 
    
    --Cerrar el cursor 
    cerrar c_emp; 
​END
;

Cursor con parámetros

[Ejemplo] Utilice el cursor para consultar e imprimir los nombres y salarios de los empleados de cada departamento e ingrese el número de departamento manualmente.

--Utilice un cursor para consultar los nombres y salarios de todos los empleados en la tabla emp e imprímalos en secuencia 
DECLARE 
    --Declare el cursor, la diferencia entre participación y sin parámetros 
    CURSOR C_EMP(v_deptno emp.deptno%type) IS SELECT ENAME,SAL FROM EMP donde deptno = v_deptno; 
    
    --Declara una variable para recibir los datos en el cursor 
    v_ename emp.ename%type; 
    v_sal emp.sal%type; 
    
BEGIN 
    --Abre el cursor, la diferencia entre participación y no parámetros 
    abiertos c_emp(10); 
    
    --Recorrer el 
    bucle del cursor 
    --Obtener los datos en el cursor 
    buscar c_emp en v_ename,v_sal; 
    
    --Salir del bucle y determinar si hay un valor 
    de salida cuando c_emp%notfound; 
    DBMS_OUTPUT.PUT_LINE( v_ename||'-'||v_sal); 
    finalizar bucle; 
    
    --Cerrar cursor 
    cerrar c_emp; 
​END
;

La recuperación debe realizarse antes del juicio; de lo contrario, aparecerán algunos valores más. Debido a que la recuperación tiene un valor predeterminado, habrá un valor predeterminado más.

procedimiento almacenado

gramática

CREAR O REEMPLAZAR PROCEDIMIENTO el nombre del procedimiento [(lista de parámetros)] es 
BEGIN 
​END
[nombre del procedimiento];

Según el tipo de parámetros, los dividimos en tres categorías para su explicación:

  1. sin parametros

  2. con parámetros de entrada

  3. Con parámetros de entrada y salida (valor de retorno)

Procedimiento almacenado sin parámetros

CREAR o REEMPLAZAR PROCEDIMIENTO p_hello es 
--Declarar la variable 
BEGIN 
DBMS_OUTPUT.PUT_LINE('hola mundo'); 
END P_HELLO; 
​​BEGIN

 
    --plsql llama al procedimiento almacenado 
    p_hello; 
end;

cmd llama al ejecutivo p_hello;

Procedimiento almacenado con parámetros de entrada.

[Ejemplo] Consultar e imprimir el nombre y el salario de un empleado (como el empleado 7839): procedimiento almacenado; requisito: pase el número del empleado al llamar y la consola lo imprimirá.

--Consultar e imprimir el nombre y salario de un empleado (como el empleado 7839) --procedimiento almacenado; 
--Requisito: ingrese el número del empleado al llamar y la consola lo imprimirá. 
CREAR O REEMPLAZAR EL PROCEDIMIENTO p_quernameandsal(i_empno IN emp.empno%type) as 
--Declarar variable 
    v_name emp.ename%type; 
    v_sal emp.sal%type; 
COMENZAR 
    seleccionar ename,sal INTO v_name,v_sal desde emp donde empno =i_empno; 
    dbms_output .put_line(v_name||'_'||v_sal); 
end; 
DECLARE

 
    i INTEGER; 
BEGIN 
    --plsql llama al procedimiento almacenado 
    p_quernameandsal(7839); 
end;

Procedimiento almacenado con parámetros de salida.

Generalmente utilizado por programas de terceros.

[Ejemplo] Generar empleados para consultar la información de un determinado empleado (empleado No. 7839) y requerir que la información se genere como un valor de retorno para que lo utilice el programa que llama.

--Enviar información de consulta de empleado de un determinado empleado (empleado No. 7839) 
--Requerido para generar el valor como valor de retorno para uso del programa que llama. 
CREAR O REEMPLAZAR PROCEDIMIENTO p_querysal(i_empno IN emp.empno%type,o_sal OUT emp.sal%TYPE) as 
--Declarar variable 
    v_name emp.ename%type; 
    v_sal emp.sal%type; 
COMENZAR 
    seleccionar sal INTO o_sal de emp donde empno =i_empno; 
end ; 
​DECLARE

 
--Declara una variable para recibir el parámetro de salida 
    v_sal emp.sal%TYPE en el procedimiento almacenado; 
BEGIN 
    --plsql llama al procedimiento almacenado 
    p_querysal_out(7839,v_sal); 
    dbms_output.put_line(v_sal); 
fin;

Supongo que te gusta

Origin blog.csdn.net/qq_66970557/article/details/122898969
Recomendado
Clasificación