Resumen select oracle
RESUMEN:SENTENCIA SELECT
Sentencia Select
Dentro de SQL, la sentencia SELECT pertenece al categoría DML ( lenguaje de manipulación de tatos ), se utiliza para recuperar registros que cumplan unas condicionas determinadas.
Las sentencias SELCTs se pueden realizar sobre tablas, vistas, o sobre otras SELECT
Sintaxis
La sintaxis de una sentencia de este tipo es la siguiente:
SELECT
[alias].columna1, [alias].columna2,....
FROM
nombre_tabla1 [alias],nombre_tabla2 [alias],......
[WHERE condición]
[GROUP
BY [alias].columna1, [alias].columna2.... ]
[HAVING condición-selección-grupos ]
[ORDER
BY [alias].columna1 [DESC], [alias].columna2 [DESC]... ]
Donde
CLAUSULA |
DESCRIPCIÓN |
SELECT [alias].columna1, [alias].columna2,.... | En ella definimos las columnas que queremos obtener, también podemos incluir llamadas a funciones |
FROM nombre_tabla1 [alias],nombre_tabla2 [alias],... |
En esta clausula definimos las tablas o vistas de donde queremos obtener los datos. También podemos incluir otras SELECTs |
[WHERE condición] | Aquí especificaremos las condiciones de filtrado. |
[GROUP BY [alias].columna1, [alias].columna2.... ] |
Se utiliza para agrupar resultados por una determinada columna |
[HAVING condición-selección-grupos ] | Se utiliza con la cláusula "GROUP BY", cuando se quiere poner condiciones al resultado de un grupo, es como una cláusula WHERE para el resultado del "GROUP BY". |
[ORDER BY [alias].columna1 [DESC], [alias].columna2 [DESC]... ] |
Sirve para ordenar el resultado por las columnas que queramos, se utiliza DESC para ordenar de forma descendente. |
Clausulas SELECT , FROM
Recuperar todos los registros de una tabla mostrando todas las columnas:
select *
from empleados;
"*" Indica que queremos mostrar todas las columnas de la tabla.
Recuperar todos los registros de una tabla mostrando algunas columnas:
Solo mostraremos las columna nombre y la "columna" "código"
select emp.nombre,
emp.codigo
from empleados emp;
"emp" es un alias de la tabla empleados, los alias se declaran después dela tabla (dejando un espacio) y se pueden utilizar delante de cada columna para identificar a que tabla pertenece.
Alias en columnas
También podemos utilizar alias para las columnas, si queremos por ejemplo que la columna "codigo" se muestre como "codigo_de_empleado":
select emp.nombre codigo_de_empleado,
emp.codigo
from empleados emp;
select emp.nombre "código de empleado",
emp.codigo
from empleados emp;
Funciones en columnas
Podemos utilizar funciones en las columnas, estas pueden ser funciones estándar de Oracle o definidas por uno mismo:
select emp.nombre,
emp.codigo,
sysdate
from empleados emp;
Esta sentencia devolvería el nombre, el código, y una columna con la fecha del sistema de la tabla empleados.
Cláusula WHERE
Aquí especificaremos las condiciones de filtrado.
-Recuperar los registros de la tabla empleados (mostrando las columnas código y nombre ) donde el código portal (cp) sea igual a '30500':
select emp.codigo,
emp.nombre
from empleados emp
where emp.cp =
'30500'
'30500' se escribe entre comillas simples, ya que la columna CP es de tipo VARCHAR2.
-Recuperar los registros de la tabla empleados (mostrando las columnas código y nombre) donde el código portal (cp) sea igual a '30500' y el código de empresa (org_id) sea igual a 1:
select emp.codigo,
emp.nombre
from empleados emp
where emp.cp =
'30500'
and emp.org_id = 1;
-Recuperar los registros de la tabla empleados (mostrando las columnas código y nombre) donde el código portal (cp) sea igual a '30500' Ó el código portal (cp) sea igual a '30009':
select emp.codigo,
emp.nombre
from empleados emp
where emp.cp =
'30500'
or emp.cp =
'30009';
-Recuperar los registros de la tabla empleados (mostrando las columnas código y nombre) donde el código portal (cp) empiece por '30'
select emp.codigo,
emp.nombre
from empleados emp
where emp.cp LIKE
'30%';
Clausula GROUP BY
Se utiliza para agrupar resultados por una determinada columna. Se suele utilizar con funciones de agrupamiento
Funciones de agrupamiento
COUNT. |
COUNT(*) o COUNT(DISTINCT columna)Indica el número de filas que cumplen una determinada condición, o el número de valores diferentes que posee una columna.SUM.
SUM(columna)Suma los valores de una columna.AVG
AVG(columna). Entrega la media de los valores de una columna.MIN.
MIN(columna)Entrega el valor mínimo de una columna.MAX.
MAX(columna)Entrega el valor máximo de una columna.
-Obtener la suma de la columna sueldo de la tabla empleados:
select
sum
(emp.sueldo)
from empleados emp
Resultado:
-Obtener la media de la columna sueldo de la tabla empleados donde el código postal (CP) sea igual a '30500':
select
avg
(emp.sueldo)
from empleados emp
where emp.cp =
'30500'
Resultado:
El resultado de estas últimas dos sentencias es siempre una sola fila, con el uso de GROUP BY podemos obtener más de una fila agrupando por las columnas que queramos.
-Obtener la suma de la columna sueldo de la tabla empleados agrupando por código postal (CP) donde el código de la organización (ORG_ID) sea igual a 1:
select emp.cp,
sum
(emp.sueldo)
from empleados emp
where emp.org_id = 1
group
by emp.cp
Resultado:
Clausula HAVING
Se utiliza con la cláusula "GROUP BY", cuando se quiere poner condiciones al resultado de un grupo, es como una cláusula WHERE para el resultado del "GROUP BY".
-Obtener la suma de la columna sueldo de la tabla empleados agrupando por código postal (CP) donde el código de la organización (ORG_ID) sea igual a 1, mostrando solo aquellos registros donde la suma del sueldo sea mayor que 2000:
select emp.cp,
sum
(emp.sueldo)
from empleados emp
where emp.org_id = 1
group
by emp.cp
having
sum
(emp.sueldo)
> 2000
Resultado:
Clausula ORDER BY
Sirve para ordenar el resultado por las columnas que queramos, se utiliza DESC para ordenar de forma descendente.
-Recuperar los registros de la tabla empleados (mostrando las columnas código y nombre, cp) donde el el código de la organización (ORG_ID) sea igual a 1, ordenando los registros por código postal y por nombre
select emp.codigo,
emp.nombre,
emp.cp
from empleados emp
where emp.org_id = 1
order
by emp.cp, emp.nombre
-Recuperar los registros de la tabla empleados (mostrando las columnas código y nombre, cp) donde el el código de la organización (ORG_ID) sea igual a 1, ordenando los registros por código postal (de forma descendente) y por nombre
select emp.codigo,
emp.nombre,
emp.cp
from empleados emp
where emp.org_id = 1
order
by emp.cp desc , emp.nombre
Consultas sobre otras consultas
Es posible ejecutar SELECTs sobre el resultado de otras SELECTs, por ejemplo, en la siguiente consulta:
select emp1.nombre
from
(select emp.codigo,
emp.nombre,
emp.cp,
emp.direccion
from empleados emp
where emp.org_id = 1) emp1
where emp1.cp =
'30500'
Primero se ejecutará la sentencia :
select emp.codigo,
emp.nombre,
emp.cp,
emp.direccion
from empleados emp
where emp.org_id = 1
Y sobre el resultado de esta se ejecutará la SELECT principal
Consultas en la cláusula SELECT
Es posible ejecutar SELECTs en la misma clusula SELECT, por ejemplo, en la siguiente consulta:
select emp.codigo, |
emp.nombre,
emp.cp,
emp.direccion,
(select nombre
from empresas empre
where empre.org_id = emp.org_id) nombre_empresa
from empleados emp
where emp.org_id = 1
Para cada registro de la consulta principal se ejecutará la subconsulta:
select nombre |
from empresas empre
where empre.org_id = emp.org_id
Consultas en la clausula FROM
Es posible ejecutar SELECTs en la misma clausula FROM, por ejemplo, en la siguiente consulta:
select emp.codigo, |
emp.nombre,
emp.cp,
emp.direccion
from empleados emp
where emp.org_id =
(select org_id
from empresas empre
where empre.nombre =
'AKADEMO SL')
Primero se ejecutará la SELECT de la clausula FROM, una vez resuelta se ejecutará la SELECT principal
Consultas sobre varias tablas (JOIN)
Lo más habitual en SQL es realizar consultas sobre varias tablas a la vez, en este tipo de consultas se debe especificar las columnas de unión entre las tablas.
Por ejemplo: Obtener en una solo sentencia las columnas código y nombre del la tabla empleados y la columna nombre de la empresa a la que pertenece el empleado:
select emple.codigo, |
emple.nombre,
empre.nombre nombre_empresa
from
empleados emple,
empresas empre
where empre.org_id = emple.org_id
La unión entre la table de empleados y empresas es la columna ORG_ID que es a la vez la clave foránea de empleados a empresas, en la mayoría de los casos las columnas de unión coinciden con las columnas de las claves foráneas.
DISTINCT
Recupera las filas de una tabla eliminando los valores de la columna duplicados. Para obtener los distintos valores de la columna CP de la tabla empleados:
select distinct emple.cp |
from
empleados emple
LIKE
LIKE sirve para hacer igualdades con comodines.
Para obtener todos los registros (mostrando la columna nombre) de la tabla empleados
Donde el código postal empiece por "30":
select emple.nombre |
from
empleados emple
where emple.cp like
'30%';
Para obtener todos los registros (mostrando la columna nombre) de la tabla empleados
Donde el código postal termine por "500":
select emple.nombre |
from
empleados emple
where emple.cp like
'%500';
Para obtener todos los registros (mostrando la columna nombre) de la tabla empleados
Donde el código postal contenga "5" independientemente de la posición donde se encuentre:
select emple.nombre |
from
empleados emple
where emple.cp like
'%5%';