a) Combinación externa izquierda
SELECT e.codigo_empl, e.nombre_empl, e.nombre_dep, e.ciudad_dep, d.telefono
FROM empleados e NATURAL LEFT OUTER JOIN departamentos d;
El resultado sería el que podemos ver a continuación:
SELECT e.codigo_empl, e.nombre_empl, e.nombre_dep, e.ciudad_dep, d.telefono
FROM empleados e NATURAL LEFT OUTER JOIN departamentos d;
SELECT e.codigo_empl, e.nombre_empl, e.nombre_dep, e.ciudad_dep, d.telefono
FROM empleados e NATURAL JOIN departamentos d;
SELECT nombre_columnas_a_seleccionar
FROM t1 [NATURAL] [LEFT|RIGHT|FULL] [OUTER] JOIN t2
{ON condiciones|
[USING (columna [,columna...])}
[WHERE condiciones];
SELECT nombre_columnas_a_seleccionar
FROM t1 [NATURAL] [INNER] JOIN t2
{ON condiciones|
|USING (columna [,columna...])}
[WHERE condiciones];
SELECT codigo_empl, nombre_empl
FROM empleados NATURAL JOIN departamentos
WHERE telefono = '977.333.852';
SELECT codigo_empl, nombre_empl
FROM empleados JOIN departamentos USING (nombre_dep, ciudad_dep)
WHERE telefono = '977.333.852';
SELECT nombre_columnas_a_seleccionar
FROM tabla1 NATURAL JOIN tabla2
[WHERE condiciones];
SELECT el.codigo_empl, el.apellido_emplHemos tomado la tabla e2 para fijar la fila del empleado con código número 5, de modo que podamos comparar el sueldo de la tabla e1, que contiene a todos los empleados, con el sueldo de la tabla e2, que contiene sólo al empleado 5.
FROM empleados el JOIN empleados e2 ON el.sueldo > e2.sueldo
WHERE e2.codigo_empl = 5;
SELECT p.codigo_proyecto, p.precio, c.nif, p.codigo_cliente, c.codigo_cli
FROM clientes c JOIN proyectos p ON c.codigo_cli = p.codigo_cliente
WHERE c.codigo_cli = 20;
SELECT nombre_columnas_a_seleccionar
FROM tabla1 JOIN tabla2
{ON condiciones|USING (columna [, columna...])}
[WHERE condiciones];
SELECT p.codigo_proyecto, p.precio, c.nif, p.codigo_cliente, c.codigo_cli
FROM clientes c, proyectos p
WHERE c.codigo_cli = p.codigo_cliente AND c.codigo_cli = 20;
SELECT proyectos.codigo_proyecto, proyectos.precio, clientes.nif
FROM clientes, proyectos
WHERE clientes.codigo_cli = proyectos.codigo_cliente AND clientes.
codigo_cli = 20;
SELECT num_proyecEl resultado de esta consulta sería el que se ve al margen.
FROM empleados
GROUP BY num_proyec
HAVING SUM (sueldo) >1.8E+5;
SELECT nombre_dep, ciudad_dep, AVG(sueldo) AS sueldo_medio
FROM empleados
GROUP BY nombre_dep, ciudad_dep;
SELECT nombre_columnas_a seleccionar
FROM tabla_a_consultar
[WHERE condiciones]
GROUP BY columnas_según_las_cuales_se_quiere_agrupar
[HAVING condiciones_por_grupos]
[ORDER BY columna_ordenación [DESC] [, columna [DESC]...]];
SELECT codigo_empl, nombre_empl, apellido_empl, sueldoEsta consulta daría la respuesta siguiente:
FROM empleados
ORDER BY sueldo, nombre_empl;
ORDER BY columna_ordenación [DESC] [, columna [DESC] ...]También se puede explicitar un orden ascendente poniendo la palabra clave ASC (opción por defecto).
SELECT nombre_columnas_a seleccionar
FROM tabla_a_consultar
[WHERE condiciones]
ORDER BY columna_según_la_cual_se_quiere_ordenar [DESC]
[, col_ordenación [DESC]...];
SELECT codigo_empl, nombre_empl
FROM empleados
WHERE EXISTS (SELECT *
FROM proyectos
WHERE codigo_proyec = num_proyec);
SELECT nombre_columnas_a_seleccionar
FROM tabla_a_consultar
WHERE [NOT] EXISTS subconsulta;
SELECT codigo_proyec, nombre_proyec
FROM proyectos
WHERE precio > ALL (SELECT sueldo
FROM empleados
WHERE codigo_proyec = num_proyec);
SELECT codigo_proyec, nombre_proyec
FROM proyectos
WHERE precio < ANY (SELECT sueldo FROM empleados WHERE codigo_proyec = num_proyec);
SELECT nombre_columnas_a seleccionar
FROM tabla_a_consultar
WHERE columna operador_comparación {ALL|ANY|SOME}subconsulta;
SELECT codigo_empl, nombre_emplObtendríamos la respuesta que tenemos al margen.
FROM empleados
WHERE num_proyec IS NULL;
SELECT nombre_columnas_a_seleccionar
FROM tabla_a_consultar
WHERE columna IS [NOT] NULL;
SELECT codigo_empl, nombre_empl
FROM empleados
WHERE nombre_empl LIKE ‘J%’;
SELECT codigo_proyec
FROM proyectos
WHERE nombre_proyec LIKE ‘S_ _ _ _’;
SELECT nombre_columnas_a_seleccionar
FROM tabla_a_consultar
WHERE columna LIKE característica;
DELETE FROM proyectos;En nuestra base de datos, borrar los proyectos del cliente 2 se haría de la forma que mostramos a continuación:
DROP VIEW clientes_Barcelona_Girona RESTRICT;
DROP VIEW nombre_vista (RESTRICT|CASCADE);Si utilizamos la opción RESTRICT, la vista no se borrará si está referenciada, por ejemplo, por otra vista. En cambio, si ponemos la opción CASCADE, todo lo que referencie a la vista se borrará con ésta.
DROP TABLE nombre_tabla {RESTRICT|CASCADE};
DROP ASSERTION restriccion1;
CREATE ASSERTION nombre_aserción CHECK (condiciones);
DEFAULT (literal|función|NULL)
ALTER DOMAIN dom_ciudades DROP CONSTRAINT ciudades_validas;Con esto hemos eliminado la restricción de dominio antigua. Y ahora tenemos que introducir la nueva restricción:
ALTER_DOMAIN dom_ciudades ADD CONSTRAINT ciudades_validas
CHECK (VALUE IN (‘Barcelona’, ‘Tarragona’, ‘Lleida’, ‘Girona’, ‘Mataro’));
DROP DOMAIN dom_ciudades RESTRICT;En este caso nos deberíamos asegurar de que ninguna columna está definida sobre dom_ciudades antes de borrar el dominio.
ALTER DOMAIN nombre_dominio {acción_modificar_dominio|
acción_modif_restricción_dominio};
{SET def_defecto|DROP DEFAULT}• acción_modif_restricción_dominio puede ser:
{ADD restricciones_dominio|DROP CONSTRAINT nombre_restricción}
DROP DOMAIN nombre_dominio {RESTRICT|CASCADE};En este caso, tenemos que:
CREATE DOMAIN dom_ciudades AS CHAR (20)De este modo, cuando definimos la columna ciudades dentro de la tabla departamentos no se tendrá que decir que es de tipo CHAR (20), sino de tipo dom_ciudades. Esto nos debería asegurar, según el modelo relacional, que sólo haremos operaciones sobre la columna ciudades con otras columnas que tengan este mismo dominio definido por el usuario; sin embargo, el SQL92 no nos ofrece herramientas para asegurar que las comparaciones que hacemos sean entre los mismos dominios definidos por el usuario.
CONSTRAINT ciudades_validas
CHECK (VALUE IN (‘Barcelona’, ‘Tarragona’, ‘Lleida’, ‘Girona’));