Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
Historia
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
SQL
SQL
SQL
SQL
Normas de escritura
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
);
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
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)
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
SQL
Consultas SELECT
Consultas de datos
Sintaxis básica
Select *
From cliente ;
SELECT *
FROM ge_subscriber ;
SQL
Consultas SELECT
Cálculos
Aritméticos
Concatenación de textos
SQL
Consultas SELECT
Condiciones
Operadores de comparación
Operador Significado
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que
= Igual
<> Distinto
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.
SQL
Consultas SELECT
Condiciones
Between
SELECT tipo,modelo,precio FROM piezas WHERE precio BETWEEN 3 AND 8;
In
SELECT tipo,modelo,precio FROM piezas
WHERE precio IN (3,5, 8);
Like
SELECT apellido1 FROM Personas WHERE apellido1
LIKE 'S_nchez';
SQL
Consultas SELECT
Condiciones
Is Null
SELECT nombre,apellidos
FROM personas
WHERE telefono 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
Descendente
Funciones
Numéricas
• Redondeo
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
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
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
SQL
Consultas SELECT
Funciones
De fechas
SELECT LAST_DAY(leemfele)
FROM lectelme
WHERE leemcons =153;
SQL
Consultas SELECT
Funciones
De fechas
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)
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
SQL
Consultas SELECT
SQL
Consultas SELECT
Agrupaciones
SQL
Consultas SELECT
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
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
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
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
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
SQL
Consultas SELECT
Combinaciones Especiales
Uniones
SELECT measure_unit_id,abbreviation,description
FROM ge_measure_unit
UNION
SELECT unmecons,unmecodi,unmedesc
FROM unidmedi
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.
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.
SQL
Consultas SELECT
Combinaciones Especiales
Rownum
/*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;