Está en la página 1de 127

Introducción a SQL

PARTE I
Ing. Humberto Rueda Rivero

hrueda@telebucaramanga.com.co
ORACLE 9i

Application Server (IAS)


– Servidor de Aplicaciones:
• Portales y Sitios Web
• Aplicaciones transaccionales JAVA
• Business Inteligence Apps.

DATABASE
– Almacenamiento de Datos
Oracle 9i - DATABASE

Todos los datos


Hojas de Cálculo
Documentos
Multimedia
XML
Mensajes
... Y por supuesto, las tablas !!
Relacional y Objeto Relacional

Ambos modelos son soportados


El usuario define sus propios tipos de
datos y objetos
Compatible con la BD relacional
Soporta multimedia, mediante LOB’s
Plataforma Internet de Oracle
Clientes:
Browser/Mail Client/FTP Client

Herramientas de Desarrollo
Administración del Sistema

Internet Applications
Forms
SQL
Lógica del Lógica de Reports
PL/SQL
Negocio Presentación Graphics

Discoverer
Database & Servidor de Apps JAVA
JDeveloper

Servicios de Red
El Modelo Relacional

Colección de Objetos
Relaciones
Conjunto de Operaciones
Reglas de Integridad
Modelos de Datos
Idea
Modelo Entidad
Relación

Modelo de Datos

Tablas en la
Base de Datos
Modelo Entidad Relación

Empleado Departamento
Asignado a
# cedula # dpto
Compuesto de
* nombre * nombre
o mail o ubicacion
Entidades

Singular
Unico
Sinónimos
Mayúsculas
Atributos

Singular
Minúscula
Obligatorios o Mandatorios (*)
Opcionales (o)
Llave Primaria (#)
Diagramas

Tantos como sean necesarios


Cruces de lineas
Agrupados por Temas
En lo posible, usar Herramientas
Case Designer
Terminología

Row
Column
Foreign Key
Primary Key
NULL
Cap.1 - SELECT
Operaciones

Proyección: Nombre y sueldo de todos


los empleados ...
Selección: ... Que hayan ingresado en
el 2do. Semestre del año ...
Join: ... Y que tengan descuentos
superiores al 35% de su sueldo base.
SELECT básico

SELECT * |
{<DISTINCT> column |
expression <alias>, ...}
FROM tabla;
Ejemplos

SELECT *
FROM empleado;

SELECT cedula, nombre, sueldo


FROM empleado;

SELECT nombre, sueldo * 1.08


FROM empleado;
Guías de Codificación

May/Min son ignoradas


Palabras reservadas en May
Pueden usar varias lineas, una para
cada cláusula
Identación
Tiene su incidencia en la BD!!!
Guías de Codificación

Select cedula, nombre,direccion from


empleado where depto = 6 and
sueldo*1.08<1500000 and contratacion
between ‘01/ene/2001’ and
‘31/jun/2001’;
Guía de Codificación
SELECT cedula, nombre,direccion
FROM empleado
WHERE depto = 6
AND sueldo * 1.08 < 1500000
AND contratacion BETWEEN ‘01/ene/2001’ AND
‘31/jun/2001’;
Alias

Renombra el encabezado de una


columna
Util en expresiones
Despues de la columna o expresión
Requiere “” si usa espacios
Expresiones

+
-
*
/
||
Eliminar Filas Duplicadas

SELECT DISTINCT

Ej: SELECT DISTINCT depto


FROM empleado
Cap. 1 - RESUMEN

Sentencia SELECT básica


Todas las columnas
Algunas Columnas
Expresiones
Filas duplicadas
Cap.2 - Restringir Salida y
Ordenamientos
Claúsula WHERE

SELECT * |
{<DISTINCT> column |
expression <alias>, ...}
FROM tabla
WHERE condiciones;
Comparaciones

=, >, <, >=, <=, <>, !=


BETWEEN x AND y
IN (conjunto)
LIKE
IS NULL
BETWEEN

SELECT *
FROM empleado
WHERE sueldo BETWEEN
1000000 AND 2000000;
IN

SELECT *
FROM empleado
WHERE deptno in (1,3,5,7).

SELECT *
FROM empleado
WHERE estado in (‘A’,’I’,’D’)
LIKE

SELECT *
FROM empleado
WHERE apellido LIKE ‘RUEDA%’

%: cualquier combinación
_: reemplaza un caracter
Conectores Lógicos

AND
OR
NOT

OJO con los NULL’s


Tablas de Verdad
Ordenamientos - ORDER BY

SELECT * |
{<DISTINCT> column |
expression <alias>, ...}
FROM tabla
<WHERE condiciones>
<ORDER BY {col, expr} <ASC>
<DESC> >;
ORDER BY

SELECT cedula, nombre, sueldo, dept


FROM empleado
ORDER BY sueldo DESC

SELECT apellido, nombre, sueldo, dept


FROM empleado
ORDER BY dept DESC,
1, sueldo DESC
Cap 2. Resumen

Cláusula WHERE
Condiciones de Comparación
Ordenamientos
Cap. 3 - Funciones
Características

Manipulan los datos provenientes del


SELECT.
Acepta argumentos
Actúa sobre cada fila devuelta
Retorna un valor por fila
Pueden ser anidadas
Funciones de Cadenas

LOWER: pasa a minúsculas


UPPER: pasa a mayúsculas
INITCAP: primera en may, resto en min.
CONCAT: similar a ||
SUBSTR: retornar una subcadena
LENGTH: longitud de la cadena
INSTR: posición en que una cadena es
contenida dentro de otra
Funciones de Cadena

LOWER(‘HUMbeRTo’) = ‘humberto’
UPPER(‘humberto’) = ‘HUMBERTO’
INITCAP(‘pedro ROA’)= ‘Pedro Roa’
SUBSTR(‘humberto’,3,2) = ‘mb’
LENGTH(‘humberto’) = 8
INSTR(‘humberto rueda’,’rueda’)=10
Funciones de Cadena

LPAD: rellena por la izq. con el car.


Especificado una cadena hasta
alcanzar la longitud deseada

RPAD: rellena por la der. con el car.


Especificado una cadena hasta
alcanzar la longitud deseada
Funciones de Cadena

LPAD (‘humberto’,10,’z’) = ‘zzhumberto’

RPAD(‘humberto’,10,’z’) = ‘humberto zz’


Funciones de Cadena

TRIM: Elimina espacios de la derecha


– TRIM(‘humberto ‘) || ‘rueda’ =
‘humbertorueda’

REPLACE: sustitución de sartas


– REPLACE(‘humberto*rueda’, ‘*’, ‘123’)=
‘humberto123rueda’
Funciones de Caracteres

SELECT cedula, nombre, apellido


FROM empleado
WHERE upper (apellido) LIKE ‘R%’

SELECT nombre, LENGTH(nombre) x


FROM empleado
ORDER BY 2 DESC
Funciones de Caracteres

SELECT ‘El sueldo de ‘ ||


apellido || ‘,’||
nombre || ‘ es de $ ‘ ||
sueldo
FROM EMPLEADO
Funciones Numéricas
ROUND: redondea
– ROUND(expr, n)
– ROUND(3.1485, 2) = 3.15
TRUNC: truncar
– TRUNC(expr, n)
– TRUNC(3.1485, 2) = 3.14
MOD: residuo de la división
– MOD (expr, n)
– MOD (10, 3) = 1
Operaciones con Fechas

Date + number : suma dias


Date - number : resta dias
Date - Date: dias diferencia
Date + number/24: sumar horas
Funciones Fecha

MONTHS_BETWEEN (d1, d2)


ADD_MONTHS (d, x)
NEXT_DAY (d)
LAST_DAY (d)
TRUNC (d, formato)
Funciones de Conversión
TO_NUMBER TO_DATE

NUMBER CHARACTER DATE

TO_CHAR TO_CHAR
Funciones de Conversión

TO_DATE(‘20010101’,’yyyymmdd’)
TO_CHAR(SYSDATE, ‘month’)
TO_CHAR(sueldo)
TO_NUMBER(codigo) !!!
Elementos del Formato Fecha

YYYY: año
YEAR: año en palabras
MM: Mes en números
MONTH: Mes en palabras
MON: Tres letras del mes
DAY: Nombre del dia
DD: Dia en números
Funciones Generales

NVL(expr1, expr2): Si expr1 es nula,


retorna expr2.

Select nombre, nvl(direccion, ‘No Tiene’) dir


FROM empleado
Funciones Generales

NVL2(expr1, expr2, expr3)

IF expr1 IS NOT NULL THEN


RETURN expr2
ELSE
RETURN expr3
END IF
Funciones Generales

COALESCE (expr1, expr2, ..., exprn)

Retorna la primera expresión NO nula


Expresiones Condicionales

CASE expr WHEN condición1 THEN return1


WHEN condición2 THEN return2
...
WHEN condiciónn THEN returnn
ELSE returnx
END
Case

SELECT cedula, nombre,


CASE dpto WHEN 10 THEN sueldo * 1.1
WHEN 20 THEN sueldo * 1.2
WHEN 30 THEN sueldo * 1.3
ELSE sueldo
END “Salario Estimado”
FROM empleado;
Función DECODE

DECODE (col|expr, v1, r1,


v2, r2,
...
Vn, rn);

Evalúa la expresión frente a varios


valores y devuelve el valor apropiado
Función DECODE

SELECT cedula, nombre,


sueldo * DECODE(dpto, 10, 1.1,
20, 1.2,
30, 1.3,
sueldo)
FROM empleado;
Cap. 3 - Resumen

Cálculos sobre los datos mediante


funciones.
Alterar datos individuales mediante
funciones.
Manipular salida para grupos de
registros.
Convertir tipos de datos
NVL y lógica IF - THEN - ELSE
Capítulo 4

Desplegando Datos
de Múltiples Tablas
A Tener en Cuenta

Producto Cartesiano: Cada fila de una


tabla, se mezcla con todos los registros
de las demás.
Revisar relaciones!!
Especificar alias tanto a las columnas,
como a las tablas para facilitar la lectura
y para resolver conflictos con nombres
iguales.
Tipos de Joins

Equijoin
Non equijoin
Outerjoin
Selfjoin
Equijoin
SELECT cedula, nombre, nombre_dpto
FROM empleado e,
departamento d
WHERE d.dpto = e.dpto

El join entre tablas se especifica


mediante una igualdad (Podrían ser
varias columnas)
El join puede cubrir varias tablas.
Non-equijoins

La unión entre las tablas se hace


mediante un operador distinto del “=“.

SELECT nombre, sueldo, gs.grado


FROM empleado e, grado_salario gs
WHERE sueldo BETWEEN
desde AND hasta;
Outer Joins

Cuando se unen tablas y se quieren


visualizar los maestros que no tienen un
detalle.

SELECT nombre_dpto, nombre


FROM empleado e, departamento d
WHERE e.dpto(+) = d.dpto
Self Joins

Para relaciones recursivas sobre una


tabla.

SELECT t.nombre || ‘ trabaja para ‘||


j.nombre
FROM empleado t, empleado j
WHERE t.jefe = j.cedula;
Cap.5
Funciones de Grupo
Formato General

SELECT columna, FnGrupo()


FROM tablas
WHERE condiciones
GROUP BY columnas
ORDER BY columnas
Funciones de Grupo
AVG: promedio
SUM: suma
MIN: el mínimo valor
MAX: el máximo valor
COUNT: número de registros
STDDEV: desviación estándar
VARIANCE: varianza

Pueden usarse con distintos tipos de


datos.
AVG - SUM- MIN - MAX

SELECT avg(sueldo) promedio,


sum(sueldo) suma,
min(sueldo) sueldo_minimo,
max(sueldo) sueldo_maximo
FROM empleado

La función se aplica a toda la tabla


AVG - SUM- MIN - MAX

SELECT dpto, avg(sueldo) promedio,


sum(sueldo) suma,
min(sueldo) sueldo_minimo,
max(sueldo) sueldo_maximo
FROM empleado
GROUP BY dpto
La función se aplica a cada grupo de
departamentos.
COUNT

SELECT COUNT(*)
FROM empleado
WHERE dpto = 10;

“*”, Cuenta los registros que satisfacen


la cláusula WHERE
COUNT

SELECT COUNT(mail)
FROM empleado
WHERE dpto = 10;

Si se usa una expresión, cuenta los


registros para los cuales la expresión es
NOT NULL.
COUNT

SELECT COUNT(DISTINCT dpto)


FROM empleado;

Cuenta los distintos departamentos


existentes en la tabla empleado.
GROUP BY

Todas las columnas en la cláusula


SELECT que no hagan parte de
funciones de grupo, deben
especificarse en la cláusula GROUP
BY.

ORA-00937: not a single-group group


function
Condiciones sobre el Grupo

No puede usarse la cláusula WHERE


para restringir grupos.
No pueden usarse funciones de grupo
en el WHERE.

Utilizar la cláusula HAVING para


especificar condiciones.
HAVING

SELECT columna, FnGrupo()


FROM tablas
WHERE condiciones
GROUP BY columnas
HAVING condiciones
ORDER BY columnas
HAVING

SELECT cargo, SUM(sueldo)


FROM empleado
WHERE cargo LIKE ‘JEFE%’
GROUP BY cargo
HAVING SUM(sueldo) > 10000000
ORDER BY SUM(sueldo) DESC
Cap 6
Subqueries
Usos
Es un SELECT embebido en otro.
Consultas complejas, hechas por partes e
integradas mediante subqueries.
Pueden emplearse en WHERE, HAVING,
FROM
Deben encerrarse entre ()
Siempre colocarlos a la derecha del operador
de comparación.
Usar operadores sencillos para resultados
individuales y operadores de conjunto, para
resultados múltiples.
Subqueries Sencillos

Empleados con sueldo mayor que


Humberto.

SELECT *
FROM empleado
WHERE sueldo >
(SELECT sueldo
FROM empleado
WHERE cedula=91263541);
Subqueries Sencillos

Lineas con menos de 10 llamadas a


Brasil

SELECT linea, direccion, nit


FROM linea l
WHERE 10 > (SELECT COUNT(*)
FROM llamada
WHERE linea_aplicar=l.linea
AND destino=‘Brasil’)
Subqueries Sencillos

Lineas con llamadas a Brasil

SELECT linea, direccion, nit


FROM linea l
WHERE EXISTS (SELECT ‘x’
FROM llamada
WHERE linea_aplicar=l.linea
AND destino=‘Brasil’)
EXISTS devuelve TRUE con la 1a.
ocurrencia
Subqueries Sencillos

Lineas sin llamadas a Brasil

SELECT linea, direccion, nit


FROM linea l
WHERE NOT EXISTS (SELECT ‘x’
FROM llamada
WHERE linea_aplicar=l.linea
AND destino=‘Brasil’)
Subqueries Múltiples

Retornan mas de una fila


Usar operadores de comparación
especiales:
IN: es TRUE si el valor existe en el
conjunto .
ANY: compara el valor para cada fila
retornada por la subconsulta
ALL: compara el valor con todas las
filas retornadas por la subconsulta.
ANY

Empleados que no sean de Sistemas y


que ganen menos que cualquiera de
ellos.

SELECT *
FROM empleado
WHERE sueldo < ANY (SELECT sueldo
FROM empleado
WHERE dpto = 20)
AND dpto != 20;
ALL

Empleados que no sean de Sistemas y


que ganen menos que todos ellos.

SELECT *
FROM empleado
WHERE sueldo < ALL (SELECT sueldo
FROM empleado
WHERE dpto = 20)
AND dpto != 20;
IN

Empleados ubicados en los dptos de la


región oriental.

SELECT *
FROM empleado
WHERE dpto IN (SELECT dpto
FROM departamento
WHERE region=‘ORI’);
IN

Puede cubrir varias columnas

SELECT *
FROM pagos
WHERE (banco, sucursal) IN
(SELECT cod_banco, cod_suc
FROM bancos
WHERE abierto = ‘S’)
Subqueries - Análisis Top N

10 películas mas alquiladas.


SELECT c.nombre, c.genero, a.cuantos
FROM (SELECT pelicula,
SUM(alquileres) cuantos
FROM prestamos
GROUP BY pelicula
ORDER BY 2 DESC) a, cintas c
WHERE a.pelicula = c.pelicula
AND ROWNUM <= 10;
Análisis TopN

“Cuáles son los 5 productos que más le


gustan a los mejores clientes de la
compañía?”
Cap. 8
Formateando la Salida
Variables de Sustitución
Se pregunta por el valor en tiempo de
ejecución de la consulta. Puede usarse
en cualquier parte de la sentencia
SELECT.

Util para consultas repetitivas

SELECT * FROM empleado


WHERE dpto = &x;
Variables de sustitución

&&
Cuando se quiere reutilizar la variable y
no se quiere que SQL*Plus la vuelva a
solicitar por pantalla.

SELECT cedula, nombre, &&col


FROM empleado
ORDER BY &col;
Variables de Sustitución

DEFINE
UNDEFINE

Permiten declarar y eliminar variables


carácter para ser usadas como
parametros de sustitución.
Verificación del Entorno

SET variable valor


ARRAYSIZE {20|n}: fetch size
FEEDBACK {6|n|on|off}: retorna el
numero de registros procesados por
una instrucción.
HEADING {on|off}: despliega los
encabezados de la fila.
Entorno

TTITLE {text |on| off}: titulo para cada


pagina
BTITLE {text|on|off}: pie de pagina para
cada pagina
BREAK {ON elemento}: suprime valores
duplicados, cortándolos de acuerdo al
grupo
Entorno
COLUMN: controla el formato de
display de columnas.
HEADING {text}: establece encabezado
para la columna
FORMAT {formato}: formato de
visualización de la columna
PRINT/NOPRINT: Muestra/oculta la
columna
NULL {text}: reemplaza el NULL
Entorno
COLUMN nombre HEADING ‘Nombre|Empleado’

COLUMN sueldo JUSTIFY LEFT FORMAT


$9,999,999.00

COLUMN jefe FORMAT 99999 NULL ‘No Tiene’

COLUMN direccion FORMAT a40

SELECT nombre, sueldo, jefe, direccion


FROM empleado
Consolidado - Reporte

Escribir y probar el SELECT


Salvarlo en un editor de texto
Formatear las columnas
Finalizar el SELECT con ; o /
Limpiar cláusulas de formateo
Salvar
Ejecutar
Reporte
SET FEEDBACK OFF
TTITLE ‘Listado de Empleados’
BTITLE ‘Confidencial’
BREAK on cargo
COLUMN cargo HEADING ‘Cargo’
COLUMN sueldo FORMAT $9,999,999
SELECT cargo, nombre, sueldo
FROM empleado
ORDER BY cargo
/
SET FEEDBACK ON
COL cargo CLEAR
COL sueldo CLEAR
CLEAR BREAK
Cap. 8
Manipulando Datos
Data Manipulation Language -
DML
Cuando se altera la información: insert,
update, delete.

Una transacción es un conjunto de


operaciones DML que se ejecutan
como una sóla unidad.

Todo es controlado por la Integridad


Referencial.
INSERT

INSERT INTO tabla (columnas)


VALUES (valores)

INSERT INTO tabla (columnas)


SELECT ...
INSERT
INSERT INTO departamento
VALUES (10, ‘SISTEMAS’, ‘ORI’);
INSERT INTO departamento (dpto, nombre)
VALUES (10, ‘SISTEMAS’);
INSERT INTO departamento (nombre,dpto)
VALUES (‘SISTEMAS’, 10);
INSERT INTO departamento (dpto, nombre,region)
VALUES (10, ‘SISTEMAS’, NULL);

INSERT INTO departamento


VALUES (&cod, &nom, &reg);
UPDATE
Actualiza los registros que satisfacen la
condición.

UPDATE table
SET columna = valor,
columna = valor, ...
WHERE condicion;
El valor puede ser especificado
mediante un Subquery
UPDATE
UPDATE linea_cuenta lc
SET sdo_Fact = (SELECT SUM(sdo_fact)
FROM SALDO s
WHERE s.linea = lc.linea),
sdo_refc = (SELECT SUM(sdo_refc)
FROM SALDO s
WHERE s.linea = lc.linea)
WHERE lc.linea = 6344878;
DELETE

Elimina de la tabla los registros que


satisfacen la condición.

DELETE FROM tabla


WHERE condicion

La condición también puede ser


especificada mediante un Subquery.
MERGE

Consolidación de UPDATE e INSERT


en una sola operación.
MERGE INTO tabla
USING condición de join
WHEN MATCHED THEN
UPDATE SET col = val, ...
WHEN NOT MATCHED THEN
INSERT (columnas)
VALUES (valores)
MERGE
Actualizar con los cambios efectuados sobre
la tabla empleados, la tabla copia_empleados

MERGE INTO copia_empleados c


USING empleado e
ON (c.cedula = e.cedula)
WHEN MATCHED THEN
UPDATE SET c.sueldo = e.sueldo,
c.direccion = e.direccion
WHEN NOT MATCHED THEN
INSERT INTO copia_empleado
VALUES (e.cedula, e.nombre, e.direccion, e.sueldo);
Control de la Transacción
Una transacción puede estar
compuesta por:
– Un conjunto de sentencias DML
– UNA sentencia DDL
– UNA sentencia DCL

Toda sentencia DDL o DCL tiene


finaliza la transacción de manera
obligatoria.
Control de la Transacción

Inicia con la primera instrucción DML


que se ejecuta.

Finaliza con:
– Las sentencias COMMIT o ROLLBACK
– Cualquier sentencia DDL o DCL
– Saliéndose de SQL*Plus (exit)
– Error del Sistema (crash)
El Objeto de la Transacción

Asegurar la consistencia de los datos.

Permite a la sesión ver los cambios a


manera de “preview” antes de hacerlos
permanentes.

Agrupa sentencias relacionadas


lógicamente.
Estado de los datos ANTES DE

Los datos previos pueden recuperarse


con un ROLLBACK.
Solo la sesión que hizo los cambios,
puede ver su resultado.
Las demas sesiones de la BD,
observan los datos previos.
Los registros alterados son marcados
con candados para impedir su
alteración por otras sesiones.
Estado de los Datos DESPUES DE
Los cambios se hacen permanentes
Los datos anteriores se pierden
definitivamente.
Todas las sesiones pueden ver los
cambios.
Se liberan todos los candados sobre los
registros afectados.
Si alguna sesión estab bloqueada,
continúa su ejecución normal.
Read Consistency
(A 7:10) SELECT sum(sueldo)
FROM empleado;
(B 7:11) UPDATE empleado
SET sueldo = sueldo * 1.5;
(A 7:12) SELECT sum(sueldo)
FROM empleado;
(B 7:13) COMMIT;
(A 7:14) SELECT sum(sueldo)
FROM empleado;
Cap 9.
Creación de Objetos
Objetos

TABLE: tabla de datos


VIEW: SELECT almacenado en la BD
SEQUENCE: generador de numeros
INDEX: indices sobre tablas
SYNONYM: alias o sinónimos sobre
tablas
CREATE TABLE

CREATE TABLE table


(columna tipoDato, ...
);
VARCHAR2
NUMBER
DATE, TIMESTAMP, INTERVAL YEAR TO MONTH,
INTERVAL DAY TO SECOND
LONG, CLOB
BLOB, BFILE
RAW, LONG RAW
ALTER TABLE

ALTER TABLE empleado


ADD (sueldo_deseado NUMBER(8));

Inserta una columna en la tabla, al final


del registro

El orden de los factores no altera el


resultado.
ALTER TABLE
ALTER TABLE empleado
MODIFY (sueldo_deseado NUMBER(10));

Puede cambiarse: Tamaño, tipo de dato y


valor x default.
Se puede subir de precisión.
Para bajar: o la columna está en NULL o la
tabla no tiene registros!!
ALTER TABLE
ALTER TABLE empleado
DROP COLUMN sueldo_deseado;

Una vez eliminada, la columna no puede


recuperarse.

ALTER TABLE empleado


SET UNUSED COLUMN sueldo_deseado;
ALTER TABLE empleado
DROP UNUSED COLUMNS;
Eliminando una Tabla

DROP TABLE empleado;

Los datos y la estructura son borrados.


Todos los índices y constraints son
eliminados.
No tiene reversa !!
Operaciones sobre una Tabla

RENAME empleado TO employee;

TRUNCATE TABLE empleado;

COMMENT ON TABLE empleado IS


‘Los empleados activos de la empresa’;
Diccionario de Datos

Colección de tablas y objetos creados y


mantenidos por Oracle

USER_
ALL_
DBA_
V$
Cap 9.
Constraints
Constraints

Establecen reglas de integridad a nivel


de la tabla.

NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
Creación de Constraints
CREATE TABLE empleado
(cedula NUMBER(8) NOT NULL,
nombre VARCHAR2(40),
mail varchar2(40),
....
CONSTRAINT pk_emp
PRIMARY KEY (cedula),
CONSTRAINT un_mail
UNIQUE (mail)
CONSTRAINT mail_valido
CHECK (INSTR(mail, ‘@’) != 0) );
Llaves Foráneas

ALTER TABLE empleado


ADD CONSTRAINT fk_emp_dep
FOREIGN KEY (dpto)
REFERENCES departamento(dpto);

La tabla referenciada, ya debe tener


establecida su PK.
Mejor crearlas con un comando aparte, para
facilitar la creación.
Constraints
ALTER TABLE empleado
DROP CONSTRAINT fk_emp_dep

ALTER TABLE empleado


DISABLE CONSTRAINT mail_valido

ALTER TABLE empleado


ENABLE CONSTRAINT mail_valido

También podría gustarte