Está en la página 1de 45

Introducción PL/SQL 1

SQL
 SQL es el lenguaje fundamental de los SGBD relacionales. Se trata de
uno de los lenguajes más utilizados de la historia de la informática. Es
sin duda el lenguaje fundamental para manejar una base de datos
relacional.

 SQL es un lenguaje declarativo en lo que lo importante es definir qué


se desea hacer, por encima de cómo hacerlo (que es la forma de
trabajar de los lenguajes de programación de aplicaciones como C o
Java). Con este lenguaje se pretendía que las instrucciones se
pudieran escribir como si fueran órdenes humanas; es decir, utilizar un
lenguaje lo más natural posible. De ahí que se le considere un lenguaje
de cuarta generación.

 Se trata de un lenguaje que intenta agrupar todas las funciones que se


le pueden pedir a una base de datos, por lo que es el lenguaje utilizado
tanto por administradores como por programadores o incluso usuarios
avanzados
Introducción PL/SQL 1

SQL

Historia

 El nacimiento del lenguaje SQL data de 1970 cuando E. F. Codd


publica su libro: "Un modelo de datos relacional para grandes bancos
de datos compartidos". Ese libro dictaría las directrices de las bases de
datos relacionales. Apenas dos años después IBM (para quien
trabajaba Codd) utiliza las directrices de Codd para crear el Standard
English Query Language (Lenguaje Estándar Inglés para Consultas) al
que se le llamó SEQUEL. Más adelante se le asignaron las siglas SQL
(Standard Query Language, lenguaje estándar de consulta) aunque en
inglés se siguen pronunciando secuel. En español se pronuncia
esecuele.
Introducción PL/SQL 1

SQL

Historia
 En 1979 Oracle presenta la primera implementación comercial del
lenguaje. Poco después se convertía en un estándar en el mundo de
las bases de datos avalado por los organismos ISO y ANSI. En el año
1986 se toma como lenguaje estándar por ANSI de los SGBD
relacionales. Un año después lo adopta ISO, lo que convierte a SQL en
estándar mundial como lenguaje de bases de datos relacionales.
 En 1989 aparece el estándar ISO (y ANSI) llamado SQL89 o SQL1. En
1992 aparece la nueva versión estándar de SQL (a día de hoy sigue
siendo la más conocida) llamada SQL92. En 1999 se aprueba un
nuevo SQL estándar que incorpora mejoras que incluyen triggers,
procedimientos, funciones,… y otras características de las bases de
datos objeto-relacionales; dicho estándar se conoce como SQL99.
 El último estándar es el del año 2008 (SQL2008)
Introducción PL/SQL 1

SQL

 SQL, Structured Query Languaje (Lenguaje Estructurado de Consulta).


 SQL es un lenguaje de consulta para los sistemas de bases de datos
relacionales, pero que no posee la potencia de los lenguajes de
programación. No permite el uso de variables, estructuras de control de
flujo, bucles ... y demás elementos característicos de la programación.
SQL es un lenguaje de consulta, no un lenguaje de programación.
 SQL es
 Flexible
 Eficiente
 Lenguaje de cuarta generación
 Simple
 Menos ordenes
Introducción PL/SQL 1

SQL

Los mandatos de SQL se dividen en tres grandes grupos diferenciados:

1. DDL(Data Definition Language): es el encargado de la definición de Bases de


Datos, tablas, vistas e índices entre otros.

2. DML(Data Manipulation Language): su misión es la manipulación de datos

3. DCL (Data Control Language): encargado de la seguridad de la base de


datos, en todo lo referente al control de accesos y privilegios entre los usuarios
Introducción PL/SQL 1

SQL

Los mandatos de SQL se dividen en tres grandes grupos diferenciados:

1. DDL(Data Definition Language), es el encargado de la definición de


Bases de Datos, tablas, vistas e índices entre otros. Son comandos
propios de este lenguaje:

• CREATE TABLE: Crea una tabla.


• DROP TABLE: Elimina una tabla.
• CREATE VIEW: Crea una vista o tabla virtual.
• DROP VIEW: Elimina una vista.
• ALTER TABLE: Modifica la estructura de una tabla.
• CREATE INDEX: Crea un índice para una tabla.
Introducción PL/SQL 1

SQL

Los mandatos de SQL se dividen en tres grandes grupos diferenciados:

2. DML(Data Manipulation Language), cuya misión es la manipulación de


datos. A través de él podemos seleccionar, insertar, eliminar y actualizar
datos. Es la parte que más frecuentemente utilizaremos, y que con ella
se construyen las consultas. Son comandos propios de este lenguaje:
• SELECT Obtiene datos de la BD.
• INSERT Introduce datos.
• UPDATE Actualiza datos.
• DELETE Borra datos.
Introducción PL/SQL 1

SQL

Los mandatos de SQL se dividen en tres grandes grupos diferenciados:

3. DCL (Data Control Language), encargado de la seguridad de la base de


datos, en todo lo referente al control de accesos y privilegios entre los
usuarios. Son comandos propios de este lenguaje:

• COMMIT Confirma una transacción.


• ROLLBACK Anula una transacción.
• GRANT Otorga permisos a usuarios en objetos de la BD.
• REVOKE Elimina permisos a usuarios en objetos de la BD.GRANT
Introducción PL/SQL 1

SQL

Normas de escritura

 En SQL no se distingue entre mayúsculas y minúsculas.


 Las instrucciones finalizan con el signo de punto y coma
 Cualquier comando SQL (SELECT, INSERT,...) puede ser partidos por
espacios o saltos de línea antes de finalizar la instrucción
 Se pueden tabular líneas para facilitar la lectura si fuera necesario
 Los comentarios en el código SQL comienzan por /* y terminan por */
(excepto en algunos SGBD)
Introducción PL/SQL 1

Taller 1: SQL
• Crear la tabla Cliente_xxx :
create table Cliente_xxx
( cedula number(10),
nombre varchar2(30),
apellido varchar2(30),
direccion varchar2(60),
fecha_ingreso date
);

• Adicionar campo a la tabla Cliente_xxx :


Alter table Cliente_xxx add
( Telefono varchar2(30)) ;

• Eliminar campo a la tabla Cliente_xxx :


Alter table Cliente_xxx drop (Telefono) ;
Introducción PL/SQL 1

Taller SQL
• Insertar registros
Insert into Cliente_xxx (cedula, nombre, apellido, direccion, fecha_ingreso)
values
(93377012, ‘Harold’,’Bossa’,’Cll 13 A #83-12’, to_date(’17-01-2015’,’dd-mm-yyyy’));

• Consultar registros
Select *
from Cliente_xxx
where cedula = 93377012 ;

• Modificar registros
Update Cliente_xxx
set nombre = ‘Harold Farid’
where cedula = 93377012 ;

• Eliminar registros
Delete Cliente_xxx
Where cedula = 93377012 ;
Introducción PL/SQL 1

SQL
Normas Creación de Tabla

 Deben comenzar con una letra


 No deben tener más de 30 caracteres
 Sólo se permiten utilizar letras del alfabeto (inglés), números o el signo
de subrayado (también el signo $ y #, pero esos se utilizan de manera
especial por lo que no son recomendados)
 No puede haber dos tablas con el mismo nombre para el mismo
esquema (pueden coincidir los nombres si están en distintos esquemas)
 No puede coincidir con el nombre de una palabra reservada SQL (por
ejemplo no se puede llamar SELECT a una tabla)
 En el caso de que el nombre tenga espacios en blanco o caracteres
nacionales (permitido sólo en algunas bases de datos), entonces se
suele entrecomillar con comillas dobles. En el estándar SQL 99
(respetado por Oracle) se pueden utilizar comillas dobles al poner el
nombre de la tabla a fin de hacerla sensible a las mayúsculas (se
diferenciará entre “FACTURAS” y “Facturas”)
Introducción PL/SQL 1

SQL
Consultas SELECT
 Consultas de datos
 Sintaxis básica

 Cálculos
 Aritméticos
 Concatenación de textos

 Condiciones
 Operadores de comparación
 Valores lógicos
 Between
 In
 Like
 Is null
 Precedencia de operadores

 Ordenación
 Ascendente y descendente
Introducción PL/SQL 1

SQL
Consultas SELECT
 Funciones
 Numéricas
 De caracteres
 De trabajo con nulos
 De fechas
 De conversión
 De condición (Decode)

 Datos de múltiples tablas


 Producto cruzado o cartesiano de tablas
 Asociación de tablas (Join )
 Relaciones sin igualdad
 Agrupaciones
 Funciones de cálculo con grupos
 Condiciones having

 Subconsultas
 Simples
 Múltiples filas
 Exists
Introducción PL/SQL 1

SQL
Consultas SELECT

 Combinaciones especiales
 Uniones
 Intersecciones
 Diferencia

 Consultas avanzadas
 Consultas con rownum
 Consultas sobre estructuras jerárquicas

 Consultas de agrupación avanzada


 Rollup
 Cube
 Grouping
 Grouping sets
Introducción PL/SQL 1

SQL
Consultas SELECT
 Consultas de datos
 Sintaxis básica

Select *
From cliente ;

Select cedula, nombre, apellido


From cliente ;

Select cedula Ced, nombre, Nom, apellido Ape


From cliente ;

SELECT *
FROM ge_subscriber ;

SELECTidentification, subscriber_name, subs_last_name


FROM ge_subscriber ;

SELECT identification Cedula, subscriber_name Nombre, subs_last_name Apellido


FROM ge_subscriber;
Introducción PL/SQL 1

SQL
Consultas SELECT
 Cálculos
 Aritméticos

SELECT nombre, precio, precio*1.16 FROM articulos;

SELECT cosssesu producto, cosspefa periodo_facturacion, cosscoca consumo,


cosscoca*1500 valor_consumo FROM conssesu

 Concatenación de textos

SELECT tipo, modelo, tipo || '-' || modelo "Clave Pieza"


FROM piezas;

SELECT 'El programa '||esprprog||' se encuentra en estado '||esprmesg||' con un porcentaje


de ejecución de '||esprporc||'%' FROM estaprog
Introducción PL/SQL 1

SQL
Consultas SELECT
 Condiciones
 Operadores de comparación

Operador Significado
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que
 = Igual
<> Distinto

SELECT Tipo, Modelo FROM Pieza WHERE Precio > 3;

SELECT cargnuse num_servicio, cargpefa periodo_facturacion, cargvalo valor_cargo


FROM cargos WHERE cargvalo > 10000

SELECT cargnuse num_servicio, cargpefa periodo_facturacion, cargvalo valor_cargo


FROM cargos WHERE cargunid = 0

SELECT cargnuse num_servicio, cargpefa periodo_facturacion, cargvalo valor_cargo


FROM cargos WHERE cargunid <> 0
Introducción PL/SQL 1

SQL
Consultas SELECT
 Condiciones
 Valores Lógicos

Operador Significado
AND Devuelve verdadero si las expresiones a su izquierda y derecha son ambas verdaderas
Devuelve verdadero si cualquiera de las dos expresiones a izquierda y derecha del OR, son
OR verdaderas
Invierte la lógica de la expresión que está a su derecha. Si era verdadera, mediante NOT pasa
NOT a ser falso.

SELECT nombre, apellido1,apellido2 FROM personas


WHERE edad>=25 AND edad<=50;

SELECT cargnuse num_servicio, cargpefa periodo_facturacion, cargvalo valor_cargo


FROM cargos WHERE cargvalo > 10000 OR cargvalo < 500;
Introducción PL/SQL 1

SQL
Consultas SELECT
 Condiciones
 Between
SELECT tipo,modelo,precio FROM piezas WHERE precio BETWEEN 3 AND 8;

SELECT factusua usuario, factvaap valor_pagar, factfege fecha_generacion FROM factura


WHERE factfege between '01/01/2015' AND '31/01/2015';

 In
SELECT tipo,modelo,precio FROM piezas
WHERE precio IN (3,5, 8);

SELECT servcodi codigo_servicio, servdesc servicio_desc FROM servicio


WHERE servcodi IN (2, 7001, 7003);

 Like
SELECT apellido1 FROM Personas WHERE apellido1
LIKE 'S_nchez';

SELECT esprprog,esprmesg,esprporc FROM estaprog


WHERE esprprog LIKE 'FGCA%';
Introducción PL/SQL 1

SQL
Consultas SELECT
 Condiciones
 Is Null

SELECT nombre,apellidos
FROM personas
WHERE telefono IS NULL

SELECT identification Cedula, subscriber_name Nombre, e_mail Email


FROM ge_subscriber WHERE e_mail IS NULL;

 Precedencia de operadores
Orden Operador
1 *(Multiplicar) / (dividir)
2 + (Suma) - (Resta)
3 || (Concatenación)
4 Comparaciones (>, <, !=, ...)
5 IS [NOT] NULL, [NOT ]LIKE, IN
6 NOT
7 AND
8 OR
Introducción PL/SQL 1

SQL
Consultas SELECT
 Ordenación
 Ascendente

SELECT mecccodi,meccdesc, meccflco FROM mecacons


ORDER BY mecccodi asc

 Descendente

SELECT crvccodi,crvcdesc,crvcuser, crvcterm FROM caravaco


ORDER BY crvcdesc desc

 Funciones
 Numéricas
• Redondeo

SELECT cosssesu producto, cosscoca consumo, Round (cosscoca,2)


consumo_redondeo FROM conssesu
WHERE cosssesu = 16332 AND cosscoca = 0.498;

SELECT cosssesu producto, cosscoca consumo, Trunc (cosscoca,1)


consumo_redondeo FROM conssesu
WHERE cosssesu = 16332 AND cosscoca = 0.498;
Introducción PL/SQL 1

SQL
Consultas SELECT

 Funciones
 Numéricas
• Matemáticas

Raiz Cuadrada
SELECT cargnuse num_servicio, sqrt(cargvalo) cargo_raiz
FROM cargos WHERE cargcuco=37

Potencia
SELECT cargnuse num_servicio, Power(cargvalo,2) cargo_cuadrado
FROM cargos WHERE cargcuco=37

Mod
SELECT cargnuse num_servicio, mod(cargvalo,30) cargo_mod
FROM cargos WHERE cargcuco=37
Introducción PL/SQL 1

SQL
Consultas SELECT

 Funciones
 De caracteres

SELECT description, SUBSTR (description, 0, 9)


FROM ge_message
WHERE message_id = 3;

SELECT description, LENGTH (description)


FROM ge_message
WHERE message_id = 6;

SELECT description, REPLACE (description,'saldo', 'valor')


FROM ge_message
WHERE message_id = 15;

SELECT description, REVERSE (description)


FROM ge_message
WHERE message_id = 15;
Introducción PL/SQL 1

SQL
Consultas SELECT

 Funciones
 De trabajo con nulos

NVL
SELECT subscriber_name Nombre, NVL(phone, -1) Telefono FROM ge_subscriber
WHERE subscriber_id in (35272,47742,35271)

NVL2
SELECT subscriber_name Nombre, NVL2(phone, 726000, -1) Telefono FROM
ge_subscriber WHERE subscriber_id in (36063,47742,105);

 De fechas

SELECT SYSDATE FROM DUAL;

SELECT SYSTIMESTAMP FROM DUAL;


Introducción PL/SQL 1

SQL
Consultas SELECT

 Funciones
 De Conversión
TO_CHAR

Símbolo Significado
YY Año en formato de dos cifras
YYYY Año en formato de cuatro cifras
MM Mes en formato de dos cifras
MON Las tres primeras letras del mes
MONTH Nombre completo del mes
DY Día de la semana en tres letras
DAY Día completo de la semana
D Día de la semana (del 1 al 7)
DD Día en formato de dos cifras
DDD Día de año

SELECT leemfele, TO_CHAR(leemfele, 'DD/MONTH/YYYY, DAY HH:MI:SS')


FROM lectelme
WHERE leemcons = 3;
Introducción PL/SQL 1

SQL
Consultas SELECT

 Funciones
 De fechas

SELECT leemfele Fecha_lectura, ADD_MONTHS(leemfele, 3)


FROM lectelme
WHERE leemcons in (1309, 941, 3330);

SELECT MONTHS_BETWEEN(leemfele, leemfela)


FROM lectelme
WHERE leemcons in (153, 154);

SELECT LAST_DAY(leemfele)
FROM lectelme
WHERE leemcons =153;

SELECT EXTRACT(day FROM leemfele) Día, EXTRACT(month FROM leemfele) Mes,


EXTRACT(year FROM leemfele) Año
FROM lectelme
WHERE leemcons =153;
Introducción PL/SQL 1

SQL
Consultas SELECT

 Funciones
 De fechas

SELECT leemfele, ROUND(leemfele,'DAY'), ROUND(leemfele,'MONTH'), ROUND(leemfele,'YEAR')


FROM lectelme
WHERE leemcons =3;

SELECT leemfele, TRUNC(leemfele,'DAY'), TRUNC(leemfele,'MONTH'), TRUNC(leemfele,'YEAR')


FROM lectelme
WHERE leemcons = 3;
Introducción PL/SQL 1

SQL
Consultas SELECT

 Funciones
 De Conversión
TO_NUMBER

Símbolo Significado
9 Posición del número
0 Posición del número (muestra ceros)
$ Formato dólar
L Símbolo local de la moneda
S Hace que aparezca el símbolo del signo
D Posición del símbolo decimal (la coma)
Posición del separador de grupo (el
G punto)

SELECT TO_NUMBER('$945.673', 'L999D999')


FROM DUAL;

TO_DATE
SELECT TO_DATE('04/02/2015','DD/MM/YYYY')
FROM DUAL;
Introducción PL/SQL 1

SQL
Consultas SELECT

 Funciones
 De Condición (Decode)

DECODE

SELECT cosssesu id_producto, cosscoca consumo,


DECODE( cossmecc,
1,'LECTURAS',
2,'CORREGIDO',
3,'ESTIMADO',
4,'FACTURADO') Metodo_Consumo
FROM conssesu;
Introducción PL/SQL 1

SQL
Consultas SELECT

 Datos de Múltiples Tablas


 Producto cruzado o cartesiano de tablas

SELECT tconcodi Cod_tipo_consumo, tcondesc descripcion, crvccodi


Cod_Clas_var_cons, crvcdesc Descripc
FROM tipocons Tipo_consumo, caravaco Clases_Rango_var_cons;

 Asociación de tablas (JOIN)

SELECT tconcodi Cod_tipo_consumo, tcondesc descripcion, crvccodi


Cod_Clas_var_cons, crvcdesc Descripc
FROM tipocons Tipo_consumo, caravaco Clases_Rango_var_cons
WHERE Tipo_consumo.tconcodi = Clases_Rango_var_cons.crvctico;

SELECT Producto.product_id Codigo_producto, Producto.creation_date


Fecha_creacion_producto, Plan_comercial.commercial_plan_id Codigo_plan_comercial,
Plan_comercial.name Plan_comercial
FROM pr_product Producto, cc_commercial_plan Plan_comercial
WHERE Producto.commercial_plan_id = Plan_comercial.commercial_plan_id
AND Producto.product_id = 14431;
Introducción PL/SQL 1

SQL
Consultas SELECT

 Datos de Múltiples Tablas


 Relaciones sin igualdad

SELECT a.cosssesu Producto, a.cosscoca Consumo, b.rcvccons id_rango, c.cavcdesc


calificacion
FROM conssesu a, racavaco b, calivaco c
WHERE a.cosscoca between b.rcvcrain AND rcvcrafi
AND b.rcvccavc = c.cavccodi;

 Agrupaciones

SELECT b.servdesc Servicio_, c.sistempr Empresa, d.sucadesc Subcategoria


FROM pr_product a, servicio b, sistema c, subcateg d
WHERE a.product_type_id = b.servcodi
AND a.company_id = c.sistcodi
AND a.category_id = d.sucacate
GROUP BY product_type_id, company_id,category_id, b.servdesc, c.sistempr,d.sucadesc;
Introducción PL/SQL 1

SQL
Consultas SELECT

 Datos de Múltiples Tablas


 Funciones de cálculo con grupos

SUM
SELECT cosssesu Producto, cosspecs Periodo_Consumo, cosstcon Tipo_consumo,
SUM(cosscoca) suma_consumo
FROM conssesu
WHERE cossmecc <> 4
GROUP BY cosssesu, cosspecs, cosstcon;

AVG
SELECT cargnuse Producto, cargpefa Periodo_facturacion, AVG(cargvalo) Promedio_valor_cargo
FROM cargos
WHERE cargfecr between '01/01/2015' AND '28/02/2015'
AND cargnuse in (1205,16349, 1208186)
GROUP BY cargnuse, cargpefa
ORDER BY cargnuse asc;
Introducción PL/SQL 1

SQL
Consultas SELECT

 Datos de Múltiples Tablas


 Funciones de cálculo con grupos

MIN
SELECT cargnuse Producto, cargpefa Periodo_facturacion, MIN(cargvalo) Minimo_valor_cargo
FROM cargos
WHERE cargfecr between '01/01/2015' AND '28/02/2015'
AND cargnuse in (1205,16349, 1208186)
GROUP BY cargnuse, cargpefa
ORDER BY cargnuse asc;

MAX
SELECT cargnuse Producto, cargpefa Periodo_facturacion, MAX(cargvalo) Maximo_valor_cargo
FROM cargos WHERE
cargfecr between '01/01/2015' AND '28/02/2015'
AND cargnuse in (1205,16349, 1208186)
GROUP BY cargnuse, cargpefa
ORDER BY cargnuse asc;
Introducción PL/SQL 1

SQL
Consultas SELECT

 Datos de Múltiples Tablas


 Funciones de cálculo con grupos

STDDEV
SELECT cargnuse Producto, cargpefa Periodo_facturacion, STDDEV(cargvalo)
Desviacion_Est_valor_cargo
FROM cargos
WHERE cargfecr between '01/01/2015' AND '28/02/2015'
AND cargnuse in (1205,16349, 1208186)
GROUP BY cargnuse, cargpefa
ORDER BY cargnuse asc;

VARIANCE
SELECT cargnuse Producto, cargpefa Periodo_facturacion, VARIANCE(cargvalo) varianza_valor_cargo
FROM cargos
WHERE cargfecr between '01/01/2015' AND '28/02/2015'
AND cargnuse in (1205,16349, 1208186)
GROUP BY cargnuse, cargpefa
ORDER BY cargnuse asc;
Introducción PL/SQL 1

SQL
Consultas SELECT

 Datos de Múltiples Tablas


 HAVING

SELECT cosssesu Producto, cosspecs Periodo_Consumo, sum(cosscoca) suma_consumo


FROM conssesu
WHERE cossmecc <> 4
GROUP BY cosssesu, cosspecs
HAVING sum(cosscoca)>100;

SELECT cargnuse Producto, cargpefa Periodo_facturacion, AVG(cargvalo) Promedio_valor_cargo


FROM cargos
WHERE cargfecr between '01/01/2015' AND '28/02/2015'
AND cargnuse in (1205,16349, 1208186)
GROUP BY cargnuse, cargpefa
HAVING AVG(cargvalo)>5000
ORDER BY cargnuse asc;
Introducción PL/SQL 1

SQL
Consultas SELECT

 Subconsultas
 Simples

/*Clientes cuyo saldo a favor de su cuenta es mayor que el saldo a favor de la cuenta del cliente con
código 137*/
SELECT cliente.identification Identificacion,
cliente.subscriber_name Nombre,
cuenta.susccodi codigo_cuenta,
cuenta.suscsafa saldo_favor
FROM ge_subscriber cliente, suscripc cuenta
WHERE cliente.subscriber_id = cuenta.suscclie
AND cuenta.suscsafa > (SELECT cuenta.suscsafa saldo_favor
FROM ge_subscriber cliente, suscripc cuenta
WHERE cliente.subscriber_id = cuenta.suscclie
AND cliente.subscriber_id = 137);
Introducción PL/SQL 1

SQL
Consultas SELECT

 Subconsultas
 Simples

/*Numero máximo de veces que el consumo ha sido estimado*/


SELECT max (cossnvec)
FROM conssesu a
WHERE cosssesu = 919
AND cosspecs = 400013
AND cosstcon = 103
AND cossmecc = 3
AND cossfere = ( SELECT max(cossfere)
FROM conssesu b
WHERE b.cosssesu = a.cosssesu
AND b.cosspecs = a.cosspecs
AND b.cosstcon = a.cosstcon
AND b.cossmecc = a.cossmecc );
Introducción PL/SQL 1

SQL
Consultas SELECT

 Subconsultas
 Múltiples Filas

/*Clientes cuyo saldo a favor de su cuenta es mayor que el saldo a favor de la cuenta de los clientes
con código 67,71,137 */
ALL
SELECT cliente.identification Identificacion,
cliente.subscriber_name Nombre,
cuenta.susccodi codigo_cuenta,
cuenta.suscsafa saldo_favor
FROM ge_subscriber cliente, suscripc cuenta
WHERE cliente.subscriber_id = cuenta.suscclie
AND cuenta.suscsafa > ALL (SELECT cuenta.suscsafa saldo_favor
FROM ge_subscriber cliente, suscripc cuenta
WHERE cliente.subscriber_id = cuenta.suscclie
AND cuenta.suscsafa <> 0
AND cliente.subscriber_id in (67,71,137));
Introducción PL/SQL 1

SQL
Consultas SELECT

 Subconsultas
 Múltiples Filas

/*Clientes cuyo saldo a favor de su cuenta se encuentra entre el saldo a favor de la cuenta de los
clientes con código 67,71,137 */
IN
SELECT cliente.identification Identificacion,
cliente.subscriber_name Nombre,
cuenta.susccodi codigo_cuenta,
cuenta.suscsafa saldo_favor
FROM ge_subscriber cliente, suscripc cuenta
WHERE cliente.subscriber_id = cuenta.suscclie
AND cuenta.suscsafa IN (SELECT cuenta.suscsafa saldo_favor
FROM ge_subscriber cliente, suscripc cuenta
WHERE cliente.subscriber_id = cuenta.suscclie
AND cliente.subscriber_id in (67,71,137));
Introducción PL/SQL 1

SQL
Consultas SELECT

 Subconsultas
 Exists

/*Clientes que tiene al menos un producto con estado financiero castigado(C)*/


SELECT identification Identificacion,
subscriber_name Nombre,
subs_last_name, susccodi
FROM ge_subscriber, suscripc
WHERE ge_subscriber.subscriber_id=suscripc.suscclie
AND EXISTS (SELECT 'x'
FROM servsusc
WHERE sesuesfn ='C'
AND sesususc = susccodi );
Introducción PL/SQL 1

SQL
Consultas SELECT

 Combinaciones Especiales
 Uniones

Permite añadir el resultado de un SELECT a otro SELECT

SELECT measure_unit_id,abbreviation,description
FROM ge_measure_unit
UNION
SELECT unmecons,unmecodi,unmedesc
FROM unidmedi

SELECT message_id Codigo_mensaje, description Descripcion, cause Causa


FROM ge_message
UNION
SELECT menscodi Codigo_mensaje, mensdesc Descripcion, menscaus Causa
FROM mensaje;
Introducción PL/SQL 1

SQL
Consultas SELECT

 Combinaciones Especiales
 Intersecciones

Permite unir dos consultas SELECT de modo que el resultado serán las filas que estén presentes en
ambas consultas.

SELECT pamecodi, pamechar, pameobse


FROM parametr
INTERSECT
SELECT parameter_id, value, description
FROM ge_parameter;

SELECT cosssesu producto, cosstcon tipo_consumo, cosspecs periodo_consumo, cosscoca consumo


FROM conssesu consumo_producto
INTERSECT
SELECT comcsesu producto, comctcon tipo_consumo, comcpecs periodo_consumo,comccoca
consumo
FROM cm_consmeca consumo_mes_calendario;
Introducción PL/SQL 1

SQL
Consultas SELECT

 Combinaciones Especiales
 Diferencia

Se combinan dos consultas SELECT de forma que aparecerán los registros del primer
SELECT que no estén presentes en el segundo.

SELECT cosssesu producto,


cosstcon tipo_consumo,
cosspecs periodo_consumo,
cosscoca consumo
FROM conssesu consumo_producto
MINUS
SELECT comcsesu producto,
comctcon tipo_consumo,
comcpecs periodo_consumo,
comccoca consumo
FROM cm_consmeca consumo_mes_calendario;
Introducción PL/SQL 1

SQL
Consultas SELECT

 Combinaciones Especiales
 Rownum

La función ROWNUM devuelve el número de la fila de una consulta.

/*Los 3 consumos facturados mas altos del producto 773 en el periodo de facturacion 103*/
SELECT ROWNUM AS Ranking, cosssesu, cosstcon, cosscoca
FROM (SELECT cosssesu, cosstcon, cosscoca
FROM conssesu
WHERE cosssesu = 773
AND cosstcon = 103
AND cosspefa = 201310
AND cossmecc = 4
ORDER BY cosscoca desc)
WHERE ROWNUM <= 3;

También podría gustarte