Вы находитесь на странице: 1из 76

Base de Datos:

Lenguaje SQL

SENTENCIAS DDL

CREATE TABLE
Las tablas se definen en tres pasos:
Dar el nombre a la tabla
Definir cada columna, posiblemente incluyendo restricciones de columna
Definir las restricciones de la tabla

SENTENCIAS DDL

CREATE TABLE
CREATE TABLE nombre-tabla
{campo1 (tipo tamao / dominio) [NOT NULL],
[campo2 (tipo tamao / dominio) [NOT NULL]], [PRIMARY KEY (c1, c2, ..., cn)],
[FOREIGN KEY (c1) REFERENCES tabla-x],
[CHECK (P)]}

SENTENCIAS DDL

CREATE TABLE
Nombre-tabla: Es el nombre de la tabla que se va a crear.
Campo i: son los nombres de los campos de la tabla.
Tipo: Es el tipo de datos del campo.
Tamao: Es el tamao del campo en caracteres
Dominio: es el nombre del dominio asignado al campo.

SENTENCIAS DDL

CREATE TABLE
Primary Key: especifica las columnas que conforman la clave primaria de la tabla.
Foreign key: indica las columnas que constituyen clave externa en la tabla
References: indica la tabla que provee la clave fornea.
Check (P): especifica un predicado que debe satisfacer cada fila de la tabla

SENTENCIAS DDL

Ejemplos: CREATE TABLE


CREATE TABLE Clientes
(id-cliente

char(5) not null,

nombre-cliente

char(20),

calle-cliente

char(30),

primary key id-cliente)

SENTENCIAS DDL

Ejemplos: CREATE TABLE


CREATE TABLE Cuenta
(id-cuenta

char(10) not null,

id-cliente

char(5),

saldo

integer

check(saldo >= 0),

primary key id-cuenta


foreign key

id-cliente references clientes)

SENTENCIAS DDL

Uso de Constraints
Una restriccin es similar a un ndice, aunque tambin se puede utilizar para establecer
una relacin con otra tabla.
Puede utilizar la clusula CONSTRAINT en las instrucciones ALTER TABLE y CREATE
TABLE para crear o eliminar restricciones.
Hay dos tipos de clusulas CONSTRAINT: una para crear una restricciones en un nico
campo y otra para crear una restriccin en ms de un campo.

SENTENCIAS DDL

Uso de Constraints
CONSTRAINT nombre
{PRIMARY KEY (principal1 [,principal2 [, ...]]) |
UNIQUE (nico1 [,nico2 [, ...]]) |
NOT NULL (negadonulo1 [,negadonulo2 [, ...]]) |
FOREIGN

KEY

(referencia1

[,referencia2

[(campo_externo1 [,campo_externo2 [, ...]])]}

[,

...]])

REFERENCES

tabla_externa

SENTENCIAS DDL

Uso de Constraints
Nombre: Es el nombre de la restriccin que se va a crear.
principal1, principal2: Son los nombres de los campos que se van a designar como clave
principal.
nico1, nico2: Son los nombres de los campos que se van a designar como clave
nica.

CONSTRAINT nombre
{PRIMARY KEY (principal1 [,principal2 [, ...]]) |
UNIQUE (nico1 [,nico2 [, ...]]) |
NOT NULL (negadonulo1 [,negadonulo2 [, ...]]) |
FOREIGN

KEY

REFERENCES

(referencia1

[,referencia2

tabla_externa

[,campo_externo2 [, ...]])]}

[,

...]])

[(campo_externo1

SENTENCIAS DDL

Uso de Constraints
negadonulo1, negadonulo2: Son los nombres de campos que se van a limitar a valores
no Null.
referencia1, referencia2: Son los nombres de los campos de la clave externa a los que
se hace referencia en otra tabla.

CONSTRAINT nombre
{PRIMARY KEY (principal1 [,principal2 [, ...]]) |
UNIQUE (nico1 [,nico2 [, ...]]) |
NOT NULL (negadonulo1 [,negadonulo2 [, ...]]) |
FOREIGN KEY (referencia1 [,referencia2 [, ...]]) REFERENCES
tabla_externa [(campo_externo1 [,campo_externo2 [, ...]])]}

SENTENCIAS DDL

Uso de Constraints
Tabla_externa: Es el nombre de la tabla externa que contiene el campo o los campos
especificados por campo_externo.
Campo_externo1, campo_externo2: Son los nombres de los campos en tabla_externa
especificados por referencia1, referencia2. Puede omitir esta clusula si el campo al que
se hace referencia es la clave principal de tabla_externa.
CONSTRAINT nombre
{PRIMARY KEY (principal1 [,principal2 [, ...]]) |
UNIQUE (nico1 [,nico2 [, ...]]) |
NOT NULL (negadonulo1 [,negadonulo2 [, ...]]) |
FOREIGN KEY (referencia1 [,referencia2 [, ...]]) REFERENCES
tabla_externa [(campo_externo1 [,campo_externo2 [, ...]])]}

SENTENCIAS DDL

ALTER TABLE
ALTER TABLE nombre-tabla
{ADD | MODIFY
[COLUMN campo tipo [(tamao)] [NOT NULL] [CONSTRAINT nombre-constraint tipoconstraint]] |
[CONSTRAINT nombre-constraint tipo-constraint (campo,)]}

SENTENCIAS DDL

ALTER TABLE
Tabla: Es el nombre de la tabla que se va a modificar.
Campo: Es el nombre del campo que se va a agregar o eliminar de tabla.
Tipo: Es el tipo de datos del campo.
Tamao: Es el tamao del campo en caracteres

SENTENCIAS DDL

Ejemplos: ALTER TABLE


Adicionar un campo:
ALTER TABLE Empleados ADD COLUMN Salario number(15,2)

Quitar el campo Salario de la tabla Empleados:


ALTER TABLE Empleados DROP COLUMN Salario;

SENTENCIAS DDL

Ejemplos: ALTER TABLE


Adicionar una clave fornea:
ALTER TABLE Pedidos ADD CONSTRAINT PedidosEmpleados FOREIGN
KEY (IdEmpleado) REFERENCES Empleados (IdEmpleado)

Quitar la clave externa existente de la tabla Pedidos:


ALTER TABLE Pedidos DROP CONSTRAINT PedidosEmpleados;

SENTENCIAS DDL

DROP
DROP {TABLE tabla | INDEX ndice ON tabla}

tabla: Es el nombre de la tabla que se va a eliminar o la tabla de la cual se va a eliminar


un ndice.
ndice: Es el nombre del ndice que se va a eliminar de tabla.

SENTENCIAS DDL

Ejemplos: DROP
Ejemplo de como se elimina el ndice Mi_Indice de la tabla Empleados:
DROP INDEX Mi_Indice ON Empleados;

Ejemplo de cmo se elimina una tabla:


DROP TABLE Practicas;

EJERCICIO
Cree una Tabla denominada Alumnos con cinco campos acordes a esta entidad
rut
Nombre
Apellido
Carrera
Ao ingreso

Escriba el comando que otorga la Alteracin de una Tabla, la clausula


correspondientes a aadir una columna nueva fecha de nacimiento

EJERCICIO
En la Columna Tipo registre a qu corresponde; Comando, clusula, operador, funcin
de agregado.

Sentencias
Create
Alter
Drop
CONSTRAINT
UNIQUE
Table

Tipo

SENTENCIAS DML

Introduccin al SQL - SQL DML


Sentencias de Manipulacin de Datos

SELECT
UPDATE

INSERT
DELETE

Sentencia SELECT Estructura


Bsica
SELECT ..... FROM .... WHERE
SELECT corresponde a la operacin Proyeccin (). Lista los atributos
deseados en el resultado de la consulta.
FROM corresponde a la operacin Producto Cartesiano (X). Lista las relaciones
que se deben analizar.
WHERE corresponde al predicado Seleccin (), y se refiere a los atributos de
las relaciones listadas en FROM.

Sentencia SELECT
[SELECT ...]
[INTO ...]
[FROM ...]
[WHERE ...]
[GROUP BY ]
[HAVING ...]
[ORDER BY ...]
[UNION ...]

Clusula SELECT
En la clusula SELECT se especifican las columnas que van a ser mostradas
en pantalla

SELECT [all | distinct]


{* |

tabla.*

[tabla.]campo1 [encab1] , [tabla.]campo2 [encab2] , ...}

Clusula FROM
Especfica la(s) fuente(s) de donde van a ser tomadas las columnas mostradas y/o
operadas en la sentencia Select.

[SELECT]
FROM expresin tabla [as] t_alias [, ...]

Clusula INTO
La clusula INTO, permite guardar los resultados intermedios de una consulta

[SELECT ...] INTO tabla_into


[FROM ...]

Clusula WHERE
Donde se especifican las condiciones de bsqueda y join para las filas que conforman
el conjunto resultado.
[SELECT ...]
[FROM ...]
WHERE condiciones_de_bsqueda

Tipos de condiciones
Condiciones de comparacin, de Join, o de Subquery.

Ejemplos de la Sentencia
SELECT
SELECT distinct emp_id, fecha_nac, direccion
FROM EMPLEADO
WHERE nombre = Juan AND apellido = Perez

Ejemplos de la Sentencia
SELECT
Mostrar la relacin de clientes que han obtenido un prstamo en alguna sucursal de
Miraflores

SELECT DISTINCT nombre-cliente


FROM

PRESTATARIO PRS, PRESTAMO PTR

WHERE PRS.idprstamo = PRT.numprstamo


AND

nombre-sucursal = Miraflores

Condiciones de Bsqueda
Las condiciones de bsqueda pueden incluir:
Operadores de Comparacin (=, <>, < y >).
Porciones de cadenas de caracteres (SUBSTR)
Rangos (BETWEEN y NOT BETWEEN).
Listas (IN, NOT IN).
Patrones de caracteres (LIKE y NOT LIKE).
Valores desconocidos (IS NULL y IS NOT NULL).
Combinaciones con conjunciones (AND, OR).

Condiciones de Bsqueda
Operadores de comparacin:
WHERE SueldoBsico > 1000
WHERE SUBSTR(CodigoPostal, 1, 3)= SAN
Rangos (BETWEEN / NOT BETWEEN):
WHERE SueldoBsico BETWEEN 1000 AND 5000
Listas (IN / NOT IN):
WHERE Departamento NOT IN ('ADM', 'SIS')
Coincidencia de patrones o cadenas de caracteres (LIKE / NOT LIKE))
WHERE NombreCompleto LIKE LET%

Comodines (Wildcards) en la
clusula WHERE
Wildcard Significado
*%

Cualquier cadena de cero o mas


caracteres.

?, #, _
[-]

Cualquier carcter/ nmero nico.


Cualquier carcter nico dentro de un
rango.

[!]

Cualquier carcter nico que no est


dentro de un rango.

Operadores y Wildcards en la
clusula WHERE
.WHERE Nombre

LIKE Ma% busca todos los nombres que comiencen con Ma


(Ej.: Mara, Mariana, Manuel, Martn)

LIKE %a

busca todos los nombres que terminen con a.


(Ej.: Sofa, Mara, Estefana).

LIKE %ar% busca todos los nombres que tengan las letras ar.
(Ej.:Carlos, Arturo, Eleazar).

Operadores y Wildcards en la
clusula WHERE

LIKE _va

busca todos los nombres de tres letras que terminan en va.

(Ej.: Eva, Iva, Ava).

LIKE [CM]arlo[ns]

busca todos los nombres:

Carlon, Marlon, Carlos y Marlos.

LIKE [B-D]elia

busca todos los nombres que terminan en elia y que comiencen con las

letras de la B a la D. (Ej.: Delia, Celia).


LIKE

_ _ _

LIKE _ _ _ %

busca todas las cadenas de exactamente 3 caracteres.


busca las cadenas de al menos 3 caracteres.

Operadores y Wildcards en la
clusula WHERE
CARACTERES DE ESCAPE:
Para que los patrones puedan contener los caracteres especiales comodn, se especifica un
carcter de escape.

LIKE %ab\_cd escape \

busca todas las cadenas que

terminen con ab_cd.

LIKE ab\_cd% escape \


con ab_cd.

busca las cadenas que empiecen

Tablas Combinadas
Permite especificar la tabla resultante de una operacin de reunin natural en la clusula
FROM, en lugar de colocar las condiciones de JOIN en el WHERE
[SELECT]
FROM

TABLA1 [INNER] JOIN TABLA2


ON TABLA1.COLUMNA1 = TABLA2.COLUMNA1

[WHERE]

Tablas Combinadas
SELECT

DISTINCT nombre-cliente

FROM

PRESTATARIO PRS

INNER JOIN PRESTAMO PTR


On PRS.idprstamo = PRT.numprstamo
WHERE

nombre-sucursal = Miraflores

Clusula GROUP BY
Especifica las columnas

por las que las filas van a estar agrupadas o

particionadas. Los resultados del query contienen un valor o conjunto de valores


para cada conjunto de valores indicado por las funciones_de_agregacin
nombradas en la lista del Select

Clusula GROUP BY

SELECT {{columnas_de_agrupacin,}, {funcin_de_agregacin,}}


FROM
[WHERE ]
GROUP BY {columnas_de_agrupacin,}

Funciones de Agregacin ms usadas


SUM([ALL|DISTINCT]
expresin)

Calcula el total de una expresin numrica para todas las


filas o slo las distintas.

AVG([ALL|DISTINCT]
expresin)

Calcula el promedio de una expresin numrica para las


filas involucradas.

MIN([ALL|DISTINCT]
expresin)

Calcula el mnimo valor de una expresin numrica para


las filas involucradas

MAX([ALL|DISTINCT]
expresin)

Calcula el mximo valor de una expresin numrica para


las filas involucradas.

COUNT([ALL|DISTINCT]
expresin)

Nmero de veces que se repite el valor de la expresin.

COUNT(*)

Nmero de filas seleccionadas

Clusula GROUP BY
Mostrar la suma de sueldo bsico de los empleados activos, por Departamento

SELECT Nombre_Depto, SUM(SueldoBasico)


FROM

EMPLEADO EM, DEPARTAMENTO DE

WHERE EM.IDDepartamento = DE.IDDepartamento


AND

EstadoEmpleado= 'ACT

GROUP BY Nombre_Depto

Clusula GROUP BY
Obtener el nmero de titulares de cuenta de cada sucursal

SELECT

nombre_sucursal, COUNT ( DISTINCT nombre-cliente)

FROM

TITULAR-CUENTA TC, CUENTA CUE

WHERE

TC.numero-cuenta = CUE. numero-cuenta

GROUP BY

nombre-sucursal

Clusula HAVING
Especifica una restriccin que aplica a las funciones de agregacin de los grupos.
Esto afecta a las filas que son devueltas como resultado y no al clculo de las
funciones de agregacin.
La clusula WHERE si condiciona el nmero de filas que intervienen en el clculo
de las funciones de agregacin.

Clusula HAVING
SELECT {{columnas_de_agrupacin,}, {funcin_de_agregacin,}}
FROM
[WHERE ]
GROUP BY {columnas_de_agrupacin,}
HAVING condiciones_de_bsqueda

GROUP BY y HAVING
Mostrar el sueldo promedio de los Departamentos con promedio superior a
1000
SELECT Nombre_Depto, AVG(SueldoBasico)
FROM

EMPLEADO EM, DEPARTAMENTO DE

WHERE EM.IDDepartamento = DE.IDDepartamento


AND

EstadoEmpleado= 'ACT'

GROUP BY

Nombre_Depto

HAVING AVG(SueldoBasico) > 1000

GROUP BY y HAVING
Saldo promedio de cada cliente de Surco que tiene como mnimo 3 cuentas
SELECT TC. Nombre-cliente, AVG (saldo)
FROM

TITULAR-CUENTA TC, CUENTA CUE, CLIENTE CLI

WHERE TC.numero-cuenta = CUE.numero-cuenta


AND

TC.nombre-cliente = CLI.nombre-cliente

AND

ciudad-cliente = Surco

GROUP BY

TC.nombre-cliente

HAVING COUNT (DISTINCT TC.numero-cuenta) >= 3

GROUP BY - HAVING - WHERE


Procedimiento:
Si en una misma consulta aparece una clusula WHERE y una clusula HAVING, se aplica
primero el predicado de la clusula WHERE.
Las tuplas que satisfagan la condicin, se colocan en grupos segn la clusula GROUP BY.
La clusula HAVING se aplica luego a cada grupo. Los grupos que no la satisfagan se eliminan.
La clusula SELECT utiliza los grupos restantes para generar las tuplas resultado de la consulta.

tupla se define como una funcin finita


que mapea (asocia unvocamente) los nombres con
algunos valores

Clusula ORDER BY
Ordena el resultado de los querys por los valores de las columnas mencionadas.
Solamente se puede ordenar por las columnas especificadas en el SELECT.
ASC: Es el valor por defecto e indica que los resultados se van a presentar
ascendentemente.
DESC: Debe especificarse al lado de la columna cuyo orden se desea ver en forma
descendente.
Consideracin: ordenar un gran nmero de tuplas puede ser costoso. Es conveniente
ordenar slo cuando sea estrictamente necesario.

Clusula ORDER BY
SELECT {columna 1, columna 2,}
FROM
[WHERE ]
[GROUP BY...]
[HAVING ...]
ORDER BY columna 1 [ASC|DESC],....

Clusula ORDER BY

SELECT Nombre 'Departamento',


AVG(SueldoBasico) 'Promedio Sueldos'
FROM

EMPLEADO EM, DEPARTAMENTO DE

WHERE EM.Departamento = DE.Departamento


GROUP BY Nombre
ORDER BY AVG(SueldoBasico) DESC

Operador UNION
Permite manipular los resultados de dos o mas querys, combinndolos en un
nico conjunto de datos. Muestra las filas recuperadas por cualquiera de los query.

A diferencia del SELECT, que por omisin conserva los duplicados, la operacin
de unin normalmente los suprime.

A fin de evitar esto, es necesario colocar a continuacin del operador UNION la


palabra clave ALL

Operador UNION
Query1 [UNION [ALL]] QueryN
[ORDER BY..]
donde:

Query1:

y QueryN

SELECT select-list

SELECT select-list

[INTO]

[FROM]

[FROM]

[WHERE]

[WHERE]
[GROUP BY]
[HAVING]

[GROUP BY]
[HAVING]

Operador UNION
Todas las select-list mencionadas con la sentencia UNION, deben tener el mismo
nmero de expresiones (columnas, expresiones aritmticas, funciones de
agregacin, etc.).

Las columnas que se corresponden, deben tener el mismo tipo de dato, sino es as,
debe existir una conversin de datos implcita o explcita con una funcin de
conversin de por medio.

Operador UNION
Todos los clientes que poseen una cuenta, un prstamo o ambos

(SELECT nombre-cliente
FROM

TITULAR-CUENTA)

UNION
(SELECT nombre-cliente
FROM

PRESTATARIO)

OUTER JOINS
Los outer joins extienden los resultados de un join simple. Retornan las filas coincidentes y tambin
las filas de una de las tablas que no tiene elementos en comn con la otra.
[Select]
From tabla1, tabla2
WHERE tabla1.columna1 = tabla2.columna1 (+)

[Select]
From tabla1 LEFT [OUTER] JOIN TABLA2
ON tabla1.columna1 = tabla2.columna1

..devuelven todas las filas de la tabla1 aunque no tengan coincidencias con la tabla2 en la
columna1.

OUTER JOINS
SELECT IDPersona, NombreCompleto,
IDDepartamento, SueldoBasico
FROM

PERSONA, EMPLEADO

WHERE IDPersona = IDEmpleado (+)

SELECT IDPersona, NombreCompleto,


IDDepartamento, SueldoBasico
FROM

PERSONA LEFT JOIN EMPLEADO

ON IDPersona = IDEmpleado

(Seleccionan todas las personas, an las que no figuran en la tabla EMPLEADO)

OUTER JOINS
SELECT DE.Nombre_Dpto, IDEmpleado, SueldoBasico
FROM

EMPLEADO RIGHT JOIN DEPARTAMENTO


ON

EMPLEADO.IDDepartamento

DEPARTAMENTO.IDDepartamento

(Selecciona todos los departamentos, an los que no tienen empleados)


Un join simple descarta las filas no coincidentes.
Un outer join preserva filas que de otra forma seran descartadas.

Uso de Subqueries
Un Subquery es una sentencia SELECT anidada dentro de otras sentencias
SQL como SELECT, INSERT, UPDATE o DELETE, o dentro de otro Subquery.

A una sentencia SELECT, que contiene uno o mas Subqueries, se la denomina


Nested Query o SELECT anidado.

Uso de Subqueries
Subqueries con IN / NOT IN:
El resultado, es una lista de cero o mas valores. Una vez que el Subquery devuelve
resultados, el Outer query los usa, por inclusin o negacin.

Con la palabra IN se puede resolver el operador relacional de Interseccin

Empleando NOT IN se resuelve el operador Diferencia

Uso de Subqueries
SELECT NombreCompleto, SueldoBasico
FROM

PERSONA, EMPLEADO

WHERE IDPersona=IDEmpleado
And IDEmpleado NOT (SELECT IDEmpleado
FROM SANCIONES_EMPLEADO)

Uso de Subqueries
Subqueries con Operadores de comparacin.

Son los subquerys que se introducen con algn operador de comparacin como =, <>,
<, <=, >, >=, etc.
Estos subqueries retornan un solo valor.

Uso de Subqueries
Operadores de comparacin modificados por ANY o ALL. Estos subqueries retornan
cero o muchos valores.
> ALL, significa que todos los valores retornados por el subquery son menores al
valor de comparacin del outer.
> ANY, significa que por lo menos un valor retornado por el subquery es menor al
valor de comparacin del outer.

Uso de Subqueries.
Mostrar ID, nombre y sueldo de todos los empleados cuyo sueldo es mayor a todos los
sueldos de la tabla CARGO
SELECT

IDEmpleado,

NombreCompleto,

SueldoBasico
FROM
WHERE

EMPLEADO, PERSONA
IDEmpleado = IDPersona
AND SueldoBasico > ALL (SELECT Sueldo FROM CARGO)

Uso de Subqueries.
Mostrar ID, nombre y sueldo de todos los empleados cuyo sueldo es mayor a alguno de los sueldos
de la tabla CARGO

SELECT IDEmpleado, NombreCompleto, SueldoBasico


FROM
WHERE

EMPLEADO, PERSONA
IDEmpleado = IDPersona
AND SueldoBasico > ANY (SELECT Sueldo FROM CARGO)

Uso de Subqueries.
Subqueries con el uso de la palabra EXISTS:
Funciona como un test de existencia. La clusula WHERE, examina la existencia de
filas devueltas por el Subquery. El Subquery devuelve los valores de TRUE o FALSE.

Uso de Subqueries.
Muestra los cdigos de los empleados que tienen alguna sancin
SELECT
FROM

IDEmpleado
EMPLEADO EM

WHERE EXISTS
(SELECT * FROM SANCIONES_EMPLEADO SE
WHERE EM.IDEmpleado = SE.IDEmpleado)

Subqueries correlativos
Aquellos queries anidados donde el Subquery depende del outer query para devolver sus
valores.
Esto significa que el Subquery se ejecuta repetidamente, una vez por cada fila
seleccionada por el Outer query.

Subqueries Correlativos
SELECT a.IDEmpleado, a.SueldoBasico
FROM

EMPLEADO a

WHERE a.SueldoBasico >=


(SELECT b.SueldoBasico FROM EMPLEADO b
WHERE a.IDJefe = b.IDEmpleado )
Muestra cdigo y sueldo de los empleados cuyos sueldos son mayores o iguales a los
sueldos de sus respectivos jefes

Sentencia INSERT
INSERT es otra sentencia DML base, usada para incorporar nuevas filas a una tabla de
base de datos.

INSERT [INTO]
{table-name | view-name} [(column-list)]
{VALUES | (values-list) | select-statement }

Ejemplos de la Sentencia INSERT


Fabricante (Nfabricante, pas)

INSERT INTO FABRICANTE (Nfabricante, Pas)


VALUES (Reynolds Tobacco CO., EEUU)

Marca (marca, Nfabricante, cartn, embalaje)

INSERT INTO MARCA


VALUES (Camel, Reynolds Tobacco CO., 10, 20)

Sentencia UPDATE
Modifica los datos existentes en filas de una tabla de Base de Datos
UPDATE {table-name | view-name}
SET{column-list
| variable-list
| variable_and_column-list},..
[ WHERE { condition }]

Sentencia UPDATE
Cambiar aquellos cigarrillos de clase Normal, con filtro, fabricados por Tabacalera
Nacional, de modo que ahora no tengan filtro

UPDATE CIGARRILLO
SET filtro = N
WHERE marca in
(SELECT marca FROM MARCA
WHERE Nfabricante = Tabacalera Nacional
And filtro = S and clase = Normal)

Sentencia DELETE
Elimina filas de una tabla de Base de Datos

DELETE FROM {table-name | view-name}


[WHERE {condition} ]

Sentencia DELETE
Eliminar todos los fabricantes que no manufacturen cigarrillos de clase Ultra Light

DELETE FROM FABRICANTE


WHERE Nfabricante NOT IN
(SELECT DISTINCT Nfabricante
FROM MARCA
WHERE marca IN
(SELECT marca FROM CIGARRILLO
WHERE clase = Ultra Light))

Вам также может понравиться