Sunteți pe pagina 1din 38

SQL

(Structured Query Language)


Ing. Carolina Moreno
Departamento de Sistemas
Facultad de Electrnica y Telecomunicaciones
Universidad del Cauca

SQL
DEFINICIN:
Es un lenguaje de BD, el cual permite definir, manipular y
obtener datos de manera muy sencilla a travs de consultas
estructuradas fciles de utilizar.
El objetivo principal de SQL es la realizacin de consultas y
clculos con los datos de una o varias tablas.
El lenguaje SQL est compuesto por una serie de sentencias y
de clusulas muy reducidas en nmero, pero muy potentes en
efectividad.
SQL es un estndar muy extendido.
Se ha convertido en el lenguaje estndar de los SGBD
relacionales.

EVOLUCIN
Aos
1968-1970
1970...

Sucesos
Surge el Modelo Relacional (Codd).
Aparece el concepto de relacin: tabla.
Desarrollo tericos: ej: lgebra relacional (Codd, 1972).

1974

IBM (Donald Chamberlin) define el lenguaje para BD


relacionales SEQUEL (Structured English Query
Language)
1974 - 1975 SEQUEL-XRM (Prototipo de SEQUEL)
1976 1977 Prototipo SEQUEL/2 (Revisin de SEQUEL), que
cambi de nombre por motivos legales a SQL.
1977 - 1978 Prototipo System R, basado en SQL se difundi fuera
de IBM.
1981
IBM comenz a entregar sus productos relacionales.

Aos
1983

Sucesos

1987

IBM empez a vender DB2 en numerosas compaas


(Oracle, Sybase, Informix, etc)
SQL se convierte en el estndar industrial para BD
relacionales.
El ANSI adopt SQL como estndar para los
lenguajes relacionales (SQL/ANSI).
SQL se transform en estndar ISO (SQL/86)

1989

SQL/89

1990

Modelo Relacional versin 2 (RM/V2) Codd. Nulos

1992

SQL2 (SQL/92), es el actual y estndar.


Es el corazn de otras versiones (Oracle = PL/SQL)
SQL3, aun no estandarizado por ANSI e ISO.
Es un lenguaje independiente e introduce tipos de
datos mas complejos (datos multimediales)

1986

1994

OPTIMIZACIN DE CONSULTAS
Las tcnicas para optimizar consultas son basada en
reglas heursticas, que permiten ordenar las operaciones
de la consulta en un rbol o grafo:
- La principal heurstica de la optimizacin algebraica
consiste en aplicar primero las operaciones que
reducen el tamao de los resultados intermedios
(primero seleccin y luego proyeccin) antes de
aplicar la reunin u otras operaciones binarias.
- Adems se deben ejecutar las operaciones
seleccionar y reunin ms restrictivas (las que
producen relaciones con el menor numero de tuplas
o el tamao absoluto ms pequeo) antes que otras
operaciones similares.

TIPOS DE DATOS
CHAR:
Tienen una longitud fija.
Almacena de 1 a 255 caracteres.
Si se introduce una cadena de menos longitud que la definida se rellenara
con blancos a la derecha hasta quedar completada.
Si se introduce una cadena de mayor longitud que la fijada nos dar un
error.
VARCHAR:
Almacena cadenas de longitud variable.
La longitud mxima es de 2000 caracteres.
Si se introduce una cadena de menor longitud que la que esta definida, se
almacena con esa longitud y no se rellenara con blancos ni con ningn otro
carcter a la derecha hasta completar la longitud definida.
Si se introduce una cadena de mayor longitud que la fijada, nos dar un
error.

NUMBER:
Se almacena tanto enteros como decimales.
Formato: Number (Precisin, Escala), donde Precisin es el numero
de dgitos totales y Escala la cantidad de decimales.
Genera un error si se pasa del tamao.
El rango mximo va de 1 a 38 dgitos.
LONG:
No almacena nmeros de gran tamao, sino cadenas de caracteres
de hasta 2 GB
DATE:
Almacena la fecha. El formato general es:
Siglo/Ao/Mes/Da/Hora/Minutos/Segundos
RAW:
Almacena cadenas de Bytes (grficos, sonidos, etc.)
LONGRAW:
Como el anterior pero con mayor capacidad.
ROWID:
Sentencias de consultas de datos.
Posicin interna de cada una de las columnas de las tablas.

REGLAS PARA LOS NOMBRES


(MySQL)

Longitud
Identificador Mxima
(bytes)

Caracteres permitidos

Base de datos

64

Cualquier carcter permitido en un nombre


de directorio, excepto '/', '\' '.'

Tabla

64

Cualquier carcter permitido para un


nombre de fichero, excepto '/', '\' '.'

Columna

64

Todos los caracteres

ndice

64

Todos los caracteres

255

Todos los caracteres

Alias

Los nombres deben comenzar con un carcter alfabtico, se


permite caracteres alfanumricos y el guin bajo '_', y Oracle
no distingue entre maysculas y minsculas.

DEFINCIN DE DATOS
CREAR TABLAS:

La primera fase de diseo de una BD comienza siempre con


sentencias DDL, ya que para manipular informacin es necesario
definir los tablas donde agrupar la informacin.
Antes de llevar a cabo la creacin de una tabla conviene planificar:
- Nombre de la tabla (mximo 30 caracteres)
- Nombre de cada columna
- Tipo y Tamao de los datos almacenados en cada columna
- Informacin adicional, restricciones, etc.
Sintaxis del comando:

CREATE TABLE TB_NombreTabla


( Columna1
VARCHAR2(20),
Columna2
NUMBER(10,2),
ColumnaN
DATE,

);

DEFINCIN DE DATOS
RENOMBRAR TABLAS:

El nuevo nombre ser almacenado en el diccionario de datos, y no


se podr referenciar la tabla con el nombre antiguo.
No ocurre ninguna repercusin sobre los datos.
El propietario de la tabla es el nico que puede cambiar el nombre.

RENAME TB_AntiguoNombre TO TB_NuevoNombre;

10

DEFINCIN DE DATOS
MODIFICAR CAMPOS DE UNA TABLA:
Despus de crear una tabla, se puede aadir una columna adicional
o modificar la definicin de una columna existente.
Hay que tener en cuenta varios puntos:
- No es posible disminuir el tamao de un columna.
- Para modificar, los tipos anterior y nuevo deben ser
compatibles, o la tabla debe estar vaca.
- La opcin ADD ... NOT NULL slo ser posible si la tabla est
vaca.
- La opcin MODIFY ... NOT NULL slo podr realizarse cuando
la tabla no contenga ninguna fila con valor nulo en la columna en
cuestin.
- Al eliminar un campo se pierde definitivamente todo lo que
contuviera esa columna.

11

ALTER TABLE TB_NombreTabla


ADD (Columna Tipo [NOT NULL]);
ALTER TABLE TB_NombreTabla
MODIFY (Columna Tipo [NOT NULL]);
ALTER TABLE TB_NombreTabla
DROP COLUMN Columna;

ALTER TABLE TB_NombreTabla


ALTER COLUMN Columna SET DEFAULT ValorReal;

12

DEFINCIN DE DATOS
MODIFICAR RESTRICCIONES DE UNA TABLA:
NOT NULL:
- Obligatoriedad de que esta columna tenga un valor no nulo.
- Los valores nulos no ocupan espacio, y son distintos a 0 y al espacio en
blanco.
- Las operaciones con valores Nulos es igual a NULL.
UNIQUE
- Evita valores repetidos en una columna, admitiendo valores nulos.
- Oracle crea un ndice automticamente cuando se habilita esta
restriccin y lo borra al deshabilitarse.
- Permite la entrada de valores nulos salvo que se establezca a la vez una
restriccin NOT NULL.
DEFAULT
- Establece un valor por defecto para esa columna, si no se le asigna
ninguno.

13

CHECK

- Comprueba que se cumpla una condicin determinada.


- Esta condicin slo debe estar construida con columnas de esta misma
tabla.

PRIMARY KEY

- Establece el conjunto de columnas que forman la clave primaria de esa


tabla.
- Se comporta como nica y obligatoria sin necesidad de explicitarlo.
- Slo puede existir una clave primaria por tabla.
- Puede ser referenciada como clave ajena por otras tablas.
- Crea un ndice automticamente cuando se habilita o se crea esta
restriccin.
FOREIGN KEY
- Establece que el contenido de esta columna ser uno de los valores
contenidos en una columna de otra tabla maestra.
- Esta columna marcada como clave ajena puede ser NULL.
- No hay lmite en el nmero de claves ajenas.
- La clave ajena puede ser otra columna de la misma tabla.
- Se puede forzar que cuando una fila de la tabla maestra sea borrada,
todas las filas de la tabla detalle cuya clave ajena coincida con la clave
borrada se borren tambin. Esto se consigue aadiendo la coletilla ON
DELETE CASCADE en la definicin de la clave ajena.

14

ALTER TABLE TB_NombreTabla


ADD CONSTRAINT Restriccin;
Donde la palabra Restriccin
se cambia por:

ALTER TABLE TB_NombreTabla


DROP CONSTRAINT NombreRestriccin

Adicionar o borrar una llave primaria:


PK_TB_NombreTabla PRIMARY KEY (C1, C2, )
Adicionar o borrar un campo UNIQUE:
UK_NombreRestriccion UNIQUE (C1, C2, )
Adicionar o borrar una llave fornea:
FK_TB_TablaHija_TablaPadre
FOREIGN KEY (clave_ajena)
REFERENCES TB_TablaPadre (clave_referencia)

[ON DELETE Modo]


[ON UPDATE Modo]

Modo= CASCADE, SET NULL, SET DEFAULT o RESTRICT

Adicionar o borrar una condicin:

CK_NombreRestriccion CHECK Expresin

15

EJEMPLOS:
Aadir la restriccin de clave ajena para el supervisor en la
tabla de Empleados.
ALTER TABLE TB_Empleados
ADD CONSTRAINT FK_TB_Emp_Superv
FOREIGN KEY (Emp_IdSuper)
REFERENCES TB_Empleados(Emp_Id);
Eliminar la restriccin de clave ajena para el supervisor en la
tabla de Empleados.
ALTER TABLE TB_Empleados
DROP CONSTRAINT FK_TB_Emp_Superv;
Eliminar la restriccin de clave primaria de la tabla
Departamentos y la clave ajena asociada de Empleados
(TB_Empleados.id -> TB_Departamentos).
ALTER TABLE TB_Departamentos
DROP PRIMARY KEY CASCADE;

16

DEFINCIN DE DATOS
CONSULTAR RESTRICCIONES:

Con la sentencia DESCRIBE solo se muestran las restricciones NOT


NULL. Para ver las dems es necesario consultar la vista
USER_CONSTRAINTS del diccionario de datos.
Ejemplos:
- Obtener la lista de restricciones definidas en el diccionario de
datos:
SELECT * FROM USER_CONSTRAINTS;
NOTA: En el listado C=CHECK, P=PRIMARY KEY, R=FOREIGN KEY. NOT NULL
se representa como un caso especial de CHECK.

- Igual, pero solo para la tabla Empleados:


SELECT * FROM USER_CONSTRAINTS
WHERE table_name=Empleados;

17

DEFINCIN DE DATOS
BORRAR UNA TABLA:

Se elimina todas las tuplas, las restricciones, los


ndices y la tabla.

DROP TABLE TB_NombreTabla


[CASCADE CONSTRAINTS];

18

CONSULTAS DE ACTUALIZACIN

Tambin llamadas Consultas de Accin


No devuelven ningn registro.
Encargadas de acciones como aadir,
borrar y modificar registros.

20

CONSULTAS DE ACTUALIZACIN
INSERTAR UN REGISTRO:

Agrega un registro en una tabla.


Se la conoce como una consulta de datos aadidos.

INSERT INTO TB_NombreTabla (Campo1, , CampoN)


VALUES (Valor1, Valor2, ..., ValorN);

INSERT INTO TB_NombreTabla


VALUES (Valor1, Valor2, ..., ValorN);

21

Ejemplo:

Id

TB_Persona
Number(10) PK

Nombre

Varchar(20) Not Null

FechaNac

Date

CodCiudad Number(10) FK
INSERT INTO TB_Persona (Id, Nombre, FechaNac, CodCiudad)
VALUES (10, 'Caro Moreno', '11/05/2006', 30);
INSERT INTO TB_Persona
VALUES (11, 'Felipe Millan', '16/06/1973', null);
INSERT INTO TB_Persona
VALUES (10, 'Caro Moreno', NULL, 31);
INSERT INTO TB_Persona (Id, Nombre)
VALUES (10, 'Juana de Arco');
INSERT INTO Persona (Id, Nombre, codciudad)
VALUES (20, 'Juana de Arco', null);

22

CONSULTAS DE ACTUALIZACIN
ELIMINAR REGISTROS:

Esta consulta elimina los registros completos de una tabla.


Elimina todos los registros o solo los que cumplan una condicin.
No es posible eliminar el contenido de algn campo en concreto.

DELETE FROM TB_Tabla;


DELETE FROM TB_Tabla
WHERE Condicin;

23

CONSULTAS DE ACTUALIZACIN
ACTUALIZAR REGISTROS:

Cambia los valores de los campos de una tabla basndose en un


criterio especfico.
Es especialmente til cuando se desea cambiar un gran nmero
de registros.
Se puede cambiar uno o varios campos a la vez.
Todas las tuplas cambian con el
mismo valor.

UPDATE TB_Tabla
SET
Campo1 = Valor1,

CampoN = ValorN;

Solo cambian las tuplas que


cumplan la condicin.

UPDATE TB_Tabla
SET
Campo1 = Valor1,

CampoN = ValorN
WHERE Condicin;

24

MANIPULACIN DE DATOS
PROYECCIN (Cm, , Cn(R) )
Para ver todas las tuplas de una relacin con todos sus campos:
SELECT * FROM R;
Para ver todas las tuplas de una relacin con solo algunos
campos:
SELECT Cm, , Cn FROM R;
Si en una consulta no se incluyen las columnas que forman la
llave principal es posible que se obtengan tuplas repetidas, con
DISTINCT se recuperan solo las filas que son distintas:
SELECT DISTINCT (Cm) FROM R;

SELECT DISTINCT (Cm), , Cn FROM R;


Se puede proyectar el calculo entre campos utilizando
operadores aritmticos (+, -, *, /):
SELECT Cm_id, C2+C3, , Cn FROM R;

25

MANIPULACIN DE DATOS
SELECCIN ( Condicin(R) )
La complejidad del criterio de bsqueda es prcticamente
ilimitada, y en l se pueden conjugar operadores de diversos
tipos con funciones de columnas, componiendo expresiones
ms o menos complejas.
Las cadenas y fechas para las condiciones van en comillas
simples '
SELECT * FROM R
WHERE Condicin;
SELECT * FROM R
WHERE (C1 Operador C2) AND
(C3 Operador C4) OR
(C5 Operador C6);

26

Operador

Operacin

Ejemplo

Igualdad

SELECT * FROM Empleado


WHERE cod_dep = 100;

!=, <>, ^=

Desigualdad

<Y>

Menor que Y Mayor que

<= Y >=

Menor o igual que Y


Mayor o igual que

SELECT * FROM Empleado


WHERE cod_dep != 100;
SELECT * FROM Empleado
WHERE cod_dep < 200;
SELECT * FROM Empleado
WHERE cod_dep <= 200;

IN

Igual a cualquiera de los


miembros entre parntesis
Distinto a cualquiera de los
miembros entre parntesis

NOT IN
IS NULL

Es nulo

IS NOT NULL No es nulo


BETWEEN AND Contenido en el rango
NOT BETWEEN Fuera del rango
LIKE '_abc%'

SELECT * FROM Empleado


WHERE cod_dep IN (100, 300);
SELECT * FROM Empleado
WHERE cod_dep NOT IN (200);
SELECT * FROM Empleado
WHERE SegundoApellido IS NULL;
SELECT * FROM Empleado
WHERE SegundoApellido IS NOT NULL;
SELECT * FROM Empleado
WHERE cod_emp BETWEEN 100 AND 199;
SELECT * FROM Empleado
WHERE cod_emp NOT BETWEEN 100 AND 199;

Contiene la cadena 'abc' a


partir del segundo carcter SELECT * FROM Empleado
y luego cualquier cadena de WHERE Nombre LIKE 'Ma%';

27

MANIPULACIN DE DATOS
UNIN ( R U S )
Combina todas las filas del primer conjunto con todas las
filas del segundo.
Cualquier fila duplicada se reducir a una sola.

SELECT * FROM R
UNION
SELECT * FROM S

SELECT
WHERE
UNION
SELECT
WHERE
UNION
SELECT
WHERE

* FROM R
Condicin
* FROM S
Condicin
* FROM T
Condicin

28

MANIPULACIN DE DATOS
U

INTERSECCIN ( R S )
Examina las filas de los conjuntos de entrada y devolver
aquellas que aparezcan en ambos.
Todas las filas duplicadas sern eliminadas antes de la
generacin del conjunto resultante.
SELECT * FROM R
INTERSECT
SELECT * FROM S

SELECT * FROM R
WHERE Condicin
INTERSECT
SELECT * FROM S
WHERE Condicin
INTERSECT
SELECT * FROM T
WHERE Condicin

29

MANIPULACIN DE DATOS
DIFERENCIA ( R - S )
Devuelve aquellas filas que estn en el primer conjunto pero
no en el segundo.
Las filas duplicadas del primer conjunto se reducirn a una
fila nica antes de empezar la comparacin con el segundo
conjunto.
SELECT * FROM R
MINUS
SELECT * FROM S

SELECT
WHERE
MINUS
SELECT
WHERE
MINUS
SELECT
WHERE

* FROM R
Condicin
* FROM S
Condicin
* FROM T
Condicin

30

MANIPULACIN DE DATOS
PRODUCTO CARTESIANO ( R X S )
El producto cartesiano se puede ejecutar entre dos o mas relaciones:
SELECT * FROM R, S
SELECT * FROM R, S, T
EQUI JOIN:
SELECT R.C1, S.C2 FROM R, S
WHERE R.C1=S.C1;
NATURAL JOIN:
SELECT *
FROM R NATURAL JOIN S
WHERE Condicin;

31

SELECT *
FROM Empleado NATURAL JOIN Direccin
WHERE Barrio LIKE 'Tulcan';

SELECT Apellido FROM (SELECT * FROM Empleado


WHERE Id = 11) NATURAL JOIN
(SELECT * FROM Trabaja_En
WHERE CodCiudad = 57)

32

MANIPULACIN DE DATOS
LEFT OUTER JOIN
SELECT *
FROM R LEFT OUTER JOIN S
ON (Condicin)

RIGHT OUTER JOIN


SELECT *
FROM R RIGHT OUTER JOIN S
ON (Condicin)
FULL OUTER JOIN
SELECT *
FROM R FULL OUTER JOIN S
ON (Condicin)

33

MANIPULACIN DE DATOS
RENOMBRAMIENTO:
X(RR): SELECT X.C1, X.C2 FROM R X;
SELECT X.C1, Y.Nombre FROM R X, S Y
WHERE X.C1=Y.C1;
X(A1, An)(RR)
SELECT X.C1 AS A, X.C2 AS Nombre FROM R X;
SELECT X.C1 AS N1, Y.C1 B FROM R X, S Y;
NOTA: Si el nombre esta entre se respeta el formato.
No est permitido usar un alias en una clusula WHERE, porque el valor de la columna
puede que no est determinado todava cuando la clusula WHERE es ejecutada.

34

MANIPULACIN DE DATOS
AGREGACIN:
SELECT COUNT(Salario)
FROM Emp_Salario
WHERE Salario <= 2500000;
SELECT COUNT( DISTINCT (Nombre) ) AS Nombres
FROM Empleado;
SELECT SUM(Precio) AS Suma
FROM Pedidos;
SELECT MAX(Salario), MIN(FechaNac), AVG(Salario)
FROM Empleado NATURAL JOIN Emp_Salario;

35

MANIPULACIN DE DATOS
AGRUPACIN:
SELECT C1, C2, SUM(C3)
FROM R
WHERE Condicin
GROUP BY Nombre
HAVING SUM(Ventas) > 1500;
SELECT *
FROM Tienda NATURAL JOIN Ventas
GROUP BY Nombre, Fecha;
SELECT Nombre, SUM(Ventas)
FROM Tienda NATURAL JOIN Ventas
GROUP BY Nombre
HAVING SUM(Ventas) > 1500;

Ventas
Id g
1
2
2
3

VENTAS
FECHA
$1500 05/06/1999
$250 07/06/1999
$300 08/06/1999
$700 08/06/1999

Tienda
Id NOMBRE
1 Sevilla
2
Cdiz
3 Huelva

36

MANIPULACIN DE DATOS
ORDENAMIENTO:

SELECT Campos
FROM R
[ WHERE Condicin ]
[ GROUP BY Columnas]
[ HAVING Condicin]
[ ORDER BY column [ASC | DESC] ]

SELECT Nombre, Numero, Barrio


FROM Empleado NATURAL JOIN Direccin
ORDER BY Nombre;
SELECT Nombre, Numero, Barrio
FROM Empleado NATURAL JOIN Direccin
ORDER BY Nombre, Barrio;
SELECT Nombre, Numero, Barrio
FROM Empleado NATURAL JOIN Direccin
ORDER BY Nombre DESC, Barrio ASC;

37

MANIPULACIN DE DATOS
PROCEDIMIENTO ALMACENADO:
Modo:
- IN (indica que el parmetro es de entrada y no se podr modificar, es por defecto)
- OUT (indica que el parmetro es de salida con lo que el procedimiento devolver un
valor en l)
- IN OUT (indica que el parmetro es de entrada/salida, al llamar al procedimiento
tendr un valor que luego podr ser modificado por el procedimiento y devolver
este nuevo valor).

CREATE OR REPLACE PROCEDURE Nombre


(P1 Modo Tipo, P2 Modo Tipo, )
AS
[DECLARE
Var1 Tipo := Valor;
Var2 Tipo; ]
BEGIN
<Cdigo del procedimiento>
END;

38

DROP PROCEDURE NombreProc;

CREATE OR REPLACE PROCEDURE Pc_InsertarPersona


(P_Id Number(10), P_Nombre Varchar2(20), P_FN Date, P_CodC
Number(10) )
DECLARE
V_Id Number(10) := 0;
IS
BEGIN
SELECT Id INTO P_CodC FROM Persona
WHERE Id = V_Id;
IF (V_Id = NULL) THEN
INSERT INTO Persona
VALUES (P_Id, P_Nombre, P_FN, P_CodC);
END IF;
END InsertarPersona;

39

S-ar putea să vă placă și