0% encontró este documento útil (0 votos)
7 vistas68 páginas

Introducción al Lenguaje SQL y sus Funciones

Este documento describe el lenguaje SQL, incluyendo su historia, características, funciones y estructura básica de las sentencias SELECT, INSERT, UPDATE y DELETE. También presenta ejemplos de creación de tablas y consultas básicas.

Cargado por

Josué Bermúdez
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
7 vistas68 páginas

Introducción al Lenguaje SQL y sus Funciones

Este documento describe el lenguaje SQL, incluyendo su historia, características, funciones y estructura básica de las sentencias SELECT, INSERT, UPDATE y DELETE. También presenta ejemplos de creación de tablas y consultas básicas.

Cargado por

Josué Bermúdez
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

SQL

Lenguaje Estructurado de Consultas

Bases de Datos

Inga. Martha Alonzo

1
Introducción a SQL

◆ Structured Query Language (SQL)


◆ Lenguaje declarativo de acceso a bases de datos que combina
construcciones del álgebra relacional y el cálculo relacional.
◆ Originalmente desarrollado en los '70 por IBM en su Research
Laboratory de San José a partir del cálculo de predicados creado por
Codd.
◆ Lenguaje estándar de facto en los SGBD comerciales
◆ Estándares:
◼ SEQUEL(Structured English QUEry Language), IBM 1976
◼ SQL-86 (ANSI SQL)
◼ SQL-89 (SQL1)
◼ SQL-92 (SQL2), gran revisión del estándar
◼ SQL:1999 (SQL3), Añade disparadores, algo de OO, ...
◼ SQL:2003. Añade XML, secuencias y columnas autonuméricas.

2
¿Qué es SQL?

◆ Es un lenguaje de consulta y programación de bases de datos


utilizado para la organización, acceso, consulta y gestión de
bases de datos relacionales.

Aplicación
del Cliente
Validación de
Solicitud Permisos
SQL
API’s de la BD
Cliente (OLEDB, ODBC, Database
Microsoft Jet, etc.) Management
System
Datos (SGBD)
Librería de Server
Autentificación
del Cliente
Funciones Principales de SQL en un SGBD

◆ Definición de Datos
◼ Estructura de la BD
◼ Organización de Datos
◼ Relaciones
◆ Recuperación de Datos
◼ Extracción de Datos
◆ Manipulación de Datos
◼ Permite la inserción, eliminación, modificación y actualización de los datos.
◆ Control de Acceso
◼ Control sobre los Permisos en los datos
◆ Compartimiento de Datos
◼ Coordina el acceso y la compartición de datos entre varios usuarios.
◆ Integridad de Datos
◼ Protege la BD de deterioros o errores causados por el sistema
Características de SQL

◆ El Lenguage de Definición de Datos (LDD)


◼ Proporciona comandos para la creación, borrado y modificación de
esquemas relacionales
◆ El Lenguaje de Manipulación de Datos (LMD)
◼ Basado en el álgebra relacional y el cálculo relacional permite realizar
consultas y adicionalmente insertar, borrar y actualizar de tuplas
◼ Ejecutado en una consola interactiva
◼ Embebido dentro de un lenguaje de programación de propósito general
◆ Definición de vistas
◆ Autorización
◼ Definición de usuarios y privilegios
◆ Integridad de datos
◆ Control de Transacciones

5
SQL - LDD

◆CREATE

◆ALTER

◆DROP

6
Creación de tablas

◆ La
creación de tablas se lleva a cabo con la sentencia
CREATE TABLE.
◆ Ejemplo: creación del siguiente esquema de BD.
CLIENTES (DNI, NOMBRE, DIR) SUCURSALES (NSUC, CIUDAD)
CUENTAS (COD, DNI, NSUCURS, SALDO)
◆ Se empieza por las tablas más independientes:

CREATE TABLE CLIENTES ( CREATE TABLE SUCURSALES (


DNI VARCHAR(9) NOT NULL, NSUC VARCHAR(4) NOT NULL,
NOMBRE VARCHAR(20), CIUDAD VARCHAR(30),
DIR VARCHAR(30), PRIMARY KEY (NSUC)
PRIMARY KEY (DNI) );
);

Lenguaje SQL 7
Creación de Tablas (cont.)

◆ El siguiente paso es crear la tabla CUENTAS, con las claves externas:


CREATE TABLE CUENTAS (
COD VARCHAR(4) NOT NULL,
DNI VARCHAR(9) NOT NULL,
NSUCURS VARCHAR(4) NOT NULL,
SALDO INT DEFAULT 0,
PRIMARY KEY (COD, DNI, NSUCURS),
FOREIGN KEY (DNI) REFERENCES CLIENTES (DNI),
FOREIGN KEY (NSUCURS) REFERENCES SUCURSALES (NSUC) );

◆ Las claves candidatas, es decir, aquellos atributos no pertenecientes a la


clave que no deben alojar valores repetidos, se pueden indicar con la
cláusula UNIQUE. Índice sin duplicados en MS Access.
◆ NOT NULL: Propiedad de MS Access Requerido.

8
Modificación y eliminación de tablas
◆ Modificación de tablas: sentencia ALTER TABLE.
◼ Es posible añadir, modificar y eliminar campos. Ejemplos:
⚫ Adición del campo PAIS a la tabla CLIENTES
◼ ALTER TABLE CLIENTES ADD PAIS VARCHAR(10);
⚫ Modificación del tipo del campo PAIS
◼ ALTER TABLE CLIENTES MODIFY PAIS VARCHAR(20);
⚫ Eliminación del campo PAIS de la tabla CLIENTES
◼ ALTER TABLE CLIENTES DROP PAIS;
◼ También es posible añadir nuevas restricciones a la tabla (claves
externas, restricciones check).

◆ Eliminación de tablas: sentencia DROP TABLE.


◼ DROP TABLE CUENTAS;
-- Las tablas a las que referencia deben haber sido
eliminadas antes.

Lenguaje SQL 9
Ejemplo

CREATE TABLE EMPLOYEE


(EMPNO CHARACTER(6) PRIMARY KEY
,FIRSTNME VARCHAR(12) NOT NULL
,MIDINIT CHARACTER(1)
,LASTNAME VARCHAR(15) NOT NULL
,WORKDEPT CHARACTER(3)
,PHONENO CHARACTER(4)
,HIREDATE DATE
,JOB CHARACTER(8)
,EDLEVEL SMALLINT NOT NULL
,SEX CHARACTER(1)
,BIRTHDATE DATE
,SALARY DECIMAL(9,2)
,BONUS DECIMAL(9,2)
,COMM DECIMAL(9,2)) 10
Ejemplo

11
Ejemplo
◆ DEPARTMENT(DEPTNO, DEPTNAME, MGRNO, ADMRDEPT, LOCATION)

CREATE TABLE DEPARTMENT


(DEPTNO CHARACTER(3) PRIMARY KEY
,DEPTNAME VARCHAR(36) NOT NULL
,MGRNO CHARACTER(6)
,ADMRDEPT CHARACTER(3) NOT NULL
,LOCATION CHARACTER(16));

12
SQL - LMD

◆Selección:
◼ SELECT

◆Modificación:
◼ INSERT
◼ UPDATE

◼ DELETE

13
Estructura de la sentencia SELECT

SELECT A1, …, An -Describe la salida deseada con:


•Nombres de columnas
•Expresiones aritméticas
•Literales
•Funciones escalares
•Funciones de columna
FROM T1, …, Tn - Nombres de las tablas / vistas
WHERE P - Condiciones de selección de filas

GROUP BY Ai1, …, Ain - Nombre de las columnas


HAVING Q - Condiciones de selección de grupo

ORDER BY Aj1, …, Ajn - Nombres de columnas

14
Estructura básica de la sentencia SELECT

◆ Consta de tres cláusulas:


◼ SELECT
⚫ La lista de los atributos que se incluirán en el resultado de una consulta.
◼ FROM
⚫ Especifica las relaciones que se van a usar como origen en el proceso de
la consulta.
◼ WHERE
⚫ Especifica la condición de filtro sobre las tuplas en términos de los
atributos de las relaciones de la cláusula FROM.

15
Estructura básica de la sentencia SELECT

◆ Una consulta SQL tiene la forma:


SELECT A1, ..., An /* Lista de atributos */
FROM R1, ..., Rm /* Lista de relaciones. A veces opcional */
WHERE P; /* Condición. Cláusula opcional */
◼ Es posible que exista el mismo nombre de atributo en dos relaciones
distintas.
◼ Se añade "NOMBRE_RELACION." antes del nombre para desambiguar.

16
Proyección de algunas columnas

SELECT DEPTNO, DEPTNAME, ADMRDEPT


FROM DEPARTMENT

DEPTNO DEPTNAME ADMRDEPT


A00 SPIFFY COMPUTER SERVICE DIV. A00
B01 PLANNING A00
C01 INFORMATION CENTER A00
D01 DEVELOPMENTCENTER A00
D11 MANUFACTURING SYSTEMS D01
D21 ADMINISTRATION SYSTEMS D01
E01 SUPPORT SERVICES A00
E11 OPERATIONS E01
E21 SOFTWARE SUPPORT E01

17
Eliminación de filas duplicadas

◆ SQL permite duplicados en el resultado


◆ Para eliminar las tuplas repetidas se utiliza la cláusula
DISTINCT.
◆ También es posible pedir explícitamente la inclusión de filas
repetidas mediante el uso de la cláusula ALL.

SELECT ADMRDEPT SELECT DISTINCT ADMRDEPT


FROM DEPARTMENT FROM DEPARTMENT
ADMRDEPT SELECT ALL ADMRDEPT ADMRDEPT
A00 FROM DEPARTMENT A00
A00 D01
A00 E01
A00
D01
D01
A00
E01
E01 18
Eliminación de filas duplicadas

◆ ¿Qué trabajos realiza cada departamento?


SELECT DISTINCT WORKDEPT, JOB
FROM EMPLOYEE
WORKDEPT JOB
A00 CLERK
A00 PRES
A00 SALESREP
B01 MANAGER
C01 ANALYST
C01 MANAGER
D11 DESIGNER
D11 MANAGER
D21 CLERK
D21 MANAGER
E01 MANAGER
E11 MANAGER
E11 OPERATOR
E21 FIELDREP
E21 MANAGER

19
Proyección de todos los atributos

◆ Sepuede pedir la proyección de todos los atributos de la


consulta mediante utilizando el símbolo '*'
◼ La tabla resultante contendrá todos los atributos de las tablas que
aparecen en la cláusula FROM.

SELECT * FROM DEPARTMENT

DEPTNO DEPTNAME MGRNO ADMRDEPT LOCATION


A00 SPIFFY COMPUTER SERVICE DIV. 000010 A00
B01 PLANNING 000020 A00
C01 INFORMATION CENTER 000030 A00
D01 DEVELOPMENTCENTER ------ A00
D11 MANUFACTURING SYSTEMS 000060 D01
D21 ADMINISTRATION SYSTEMS 000070 D01
E01 SUPPORT SERVICES 000050 A00
E11 OPERATIONS 000090 E01
E21 SOFTWARE SUPPORT 000100 E01

20
Salida ordenada

◆ SQL permite controlar el orden en el que se presentan las


tuplas de una relación mediante la cláusula ORDER BY.
◆ La cláusula ORDER BY tiene la forma
ORDER BY A1 <DIRECCION>, ..., An <DIRECCION>
◼ A1, ..., An son atributos de la relación resultante de la consulta
◼ Ai <DIRECCION> controla si la ordenación es Ascendente 'ASC' o
descendente 'DESC' por el campo Ai. Por defecto la ordenación se
realiza de manera ascendente.
◆ La ordenación se realiza tras haber ejecutado la consulta
sobre las tuplas resultantes.
◆ La ordenación puede convertirse en una operación costosa
dependiendo del tamaño de la relación resultante.

21
Salida ordenada (cont.)
SELECT DEPTNO, DEPTNAME, ADMRDEPT
FROM DEPARTMENT
ORDER BY ADMRDEPT ASC

DEPTNO DEPTNAME ADMRDEPT


A00 SPIFFY COMPUTER SERVICE DIV. A00
C01 INFORMATION CENTER A00
B01 PLANNING A00
E01 SUPPORTSERVICES A00
D01 DEVELOPMENTCENTER A00
D11 MANUFACTURING SYSTEMS D01
D21 ADMINISTRATION SYSTEMS D01
E21 SOFTWARE SUPPORT E01
E11 OPERATIONS E01

22
Salida ordenada (cont.)

SELECT DEPTNO, DEPTNAME, ADMRDEPT


FROM DEPARTMENT
ORDER BY ADMRDEPT ASC, DEPTNO DESC

ADMRDEPT DEPTNAME DEPTNO


A00 SUPPORT SERVICES E01
A00 DEVELOPMENT CENTER D01
A00 INFORMATION CENTER C01
A00 PLANNING B01
A00 SPIFFY COMPUTER SERVICE DIV. A00
D01 ADMINISTRATION SYSTEMS D21
D01 MANUFACTURING SYSTEMS D11
E01 SOFTWARE SUPPORT E21
E01 OPERATIONS E11

23
Selección de filas

◆ Lacláusula WHERE permite filtrar las filas de la relación


resultante.
◼ La condición de filtrado se especifica como un predicado.
◆ El
predicado de la cláusula WHERE puede ser simple o
complejo
◼ Se utilizan los conectores lógicos AND (conjunción), OR
(disyunción) y NOT (negación)
◆ Las expresiones pueden contener
◼ Predicados de comparación
◼ BETWEEN / NOT BETWEEN
◼ IN / NOT IN (con y sin subconsultas)
◼ LIKE / NOT LIKE
◼ IS NULL / IS NOT NULL
◼ ALL, SOME/ANY (subconsultas)
◼ EXISTS (subconsultas)
24
Selección de filas (cont.)

◆ Predicados de comparación
◼ Operadores: =, <> (es el ≠), <, <=, >=. >
◆ BETWEEN Op1 AND Op2
◼ Es el operador de comparación para intervalos de valores o fechas.
◆ INes el operador que permite comprobar si un valor se
encuentra en un conjunto.
◼ Puede especificarse un conjunto de valores (Val1, Val2, …)
◼ Puede utilizarse el resultado de otra consulta SELECT.

25
Selección de filas (cont.)

◆ LIKE es el operador de comparación de cadenas de


caracteres.
◼ SQL distingue entre mayúsculas y minúsculas
◼ Las cadenas de caracteres se incluyen entre comillas simples
◼ SQL permite definir patrones a través de los siguientes caracteres:
⚫ '%', que es equivalente a "cualquier subcadena de caracteres"
⚫ '_', que es equivalente a "cualquier carácter"
◆ IS NULL es el operador de comparación de valores nulos.

26
Ejemplo de selección de filas

◆ ¿Qué departamentos informan al A00?


SELECT DEPTNO, ADMRDEPT
FROM DEPARTMENT
WHERE ADMRDEPT='A00'

DEPTNO ADMRDEPT
A00 A00
B01 A00
C01 A00
D01 A00
E01 A00

27
Ejemplo de selección de filas

◆ Necesitoel apellido y el nivel de formación de los empleados


cuyo nivel de formación es mayor o igual a 19

SELECT LASTNAME, EDLEVEL


FROM EMPLOYEE
WHERE EDLEVEL >= 19

28
Ejemplo de selección de filas

◆ Necesitoel número de empleado, apellido y fecha de


nacimiento de aquellos que hayan nacido después del 1 de
enero de 1955 (inclusive).
SELECT EMPNO, LASTNAME, BIRTHDATE
FROM EMPLOYEE
WHERE BIRTHDATE >='1955-01-01'
ORDER BY BIRTHDATE

EMPNO LASTNAME BIRTHDATE


000160 PIANKA 1955-04-12
000100 SPENCER 1956-12-18

29
Múltiples condiciones - AND

◆ Necesito
el número de empleado, el trabajo y el nivel de
formación de los analistas con un nivel de educación 16

SELECT EMPNO, JOB, EDLEVEL


FROM EMPLOYEE
WHERE JOB='ANALYST' AND EDLEVEL=16

EMPNO JOB EDLEVEL


000130 ANALYST 16

30
Múltiples condiciones – AND/OR

◆ Obtenerel número de empleado, el trabajo y el nivel de


formación de todos los analistas con un nivel 16 y de todos
los empleados de nivel 18. La salida se ordena por trabajo y
nivel SELECT EMPNO, JOB, EDLEVEL
FROM EMPLOYEE
WHERE (JOB='ANALYST' AND EDLEVEL=16)
OR EDLEVEL=18
ORDER BY JOB, EDLEVEL

EMPNO JOB EDLEVEL


000130 ANALYST 16
000140 ANALYST 18
000220 DESIGNER 18
000020 MANAGER 18
000010 PRES 18
31
SELECT con BETWEEN

◆ Obtener
el número de empleado y el nivel de todos los
empleados con un nivel entre 12 y 15
SELECT EMPNO, EDLEVEL
FROM EMPLOYEE
WHERE EDLEVEL BETWEEN 12 AND 15
ORDER BY EDLEVEL

EMPNO EDLEVEL
000310 12
000290 12
000300 14
000330 14
000100 14
000230 14
000120 14
000270 15
000250 15
32
SELECT con IN

◆ Listar
los apellidos y nivel de formación de todos los
empleados de nivel 14, 19 o 20.
◼ El resultado clasificado por nivel y apellido
SELECT LASTNAME, EDLEVEL
FROM EMPLOYEE
WHERE EDLEVEL IN (14, 19, 20)
ORDER BY EDLEVEL, LASTNAME

LASTNAME EDLEVEL
JEFFERSON 14
LEE 14
O'CONNELL 14
SMITH 14
SPENSER 14
LUCCHESI 19
KWAN 20
33
Búsqueda parcial - LIKE

◆ Obtenerel apellido de todos los empleados cuyo apellido


empiece por G

SELECT LASTNAME
FROM EMPLOYEE
WHERE LASTNAME LIKE 'G%';

34
Búsqueda parcial – LIKE
Ejemplos con %

THOMPSON
SELECT LASTNAME
HENDERSON
FROM EMPLOYEE ADAMSON
WHERE LASTNAME LIKE '%SON'; JEFFERSON
JOHNSON

SELECT LASTNAME
THOMPSON
FROM EMPLOYEE ADAMSON
WHERE LASTNAME LIKE '%M%N%'; MARINO

35
Búsqueda parcial – LIKE
Ejemplos con _
◆ ¿Qué empleados tienen una C como segunda letra de su
apellido?
SELECT LASTNAME
FROM EMPLOYEE
WHERE LASTNAME LIKE '_C%';

36
Búsqueda parcial – NOT LIKE

◆ Necesito
todos los departamentos excepto aquellos cuyo
número NO empiece por 'D'
SELECT DEPTNO, DEPTNAME
FROM DEPARTMENT
WHERE DEPTNO NOT LIKE 'D%';

DEPTNO DEPTNAME
A00 SPIFFY COMPUTER SERVICE DIV.
B01 PLANNING
C01 INFORMATION CENTER
E01 SUPPORT SERVICES
E11 OPERATIONS
E21 SOFTWARE SUPPORT

37
Expresiones y renombramiento de columnas

SELECT EMPNO, SALARY, COMM,


SALARY+COMM AS INCOME
FROM EMPLOYEE
WHERE SALARY < 20000
ORDER BY EMPNO

EMPNO SALARY COMM INCOME


000210 18270.00 1462.00 19732.00
000250 19180.00 1534.00 20714.00
000260 17250.00 1380.00 18630.00
000290 15340.00 1227.00 16567.00
000300 17750.00 1420.00 19170.00
000310 15900.00 1272.00 17172.00
000320 19950.00 1596.00 21546.00

38
Operaciones aritméticas

◆ Necesito obtener el salario, la comisión y los ingresos totales


de todos los empleados que tengan un salario menor de
20000€ , clasificado por número de empleado
SELECT EMPNO, SALARY, COMM,
SALARY + COMM
FROM EMPLOYEE
WHERE SALARY < 20000
ORDER BY EMPNO
EMPNO SALARY COMM
000210 18270.00 1462.00 19732.00
000250 19180.00 1534.00 20714.00
000260 17250.00 1380.00 18630.00
000290 15340.00 1227.00 16567.00
000300 17750.00 1420.00 19170.00
000310 15900.00 1272.00 17172.00
000320 19950.00 1596.00 21546.00 39
Operaciones aritméticas (cont.)

SELECT EMPNO, SALARY,


SALARY*1.0375
FROM EMPLOYEE
WHERE SALARY < 20000
ORDER BY EMPNO

EMPNO SALARY

000210 18270.00 18955.125000


000250 19180.00 19899.250000
000260 17250.00 17896.875000
000290 15340.00 15915.250000
000300 17750.00 18415.625000
000310 15900.00 16496.250000
000320 19950.00 20698.125000

40
Expresiones en predicados

SELECT EMPNO, SALARY,


(COMM/SALARY)*100
FROM EMPLOYEE
WHERE (COMM/SALARY) * 100 > 8
ORDER BY EMPNO

EMPNO COMM SALARY

000140 2274.00 28420.00 8.001400


000210 1462.00 18270.00 8.002100
000240 2301.00 28760.00 8.000600
000330 2030.00 25370.00 8.001500

41
Concatenación

SELECT LASTNAME & ',' & FIRSTNAME AS NAME


FROM EMPLOYEE
WHERE WORKDEPT = 'A00'
ORDER BY NAME

NAME
HAAS, CHRISTA
LUCCHESI, VINCENZO
O'CONNELL, SEAN

42
Funciones de columna

◆ Las funciones de columna o funciones de agregación son


funciones que toman una colección (conjunto o
multiconjunto) de valores de entrada y devuelve un solo
valor.
◆ Las funciones de columna disponibles son: AVG, MIN, MAX,
SUM, COUNT.
◆ Los datos de entrada para SUM y AVG deben ser una
colección de números, pero el resto de operadores pueden
operar sobre colecciones de datos de tipo no numérico.

Lenguaje SQL 43
Funciones de columna

◆ Por defecto las funciones se aplican a todas las tuplas


resultantes de la consulta.
◆ Podemos agrupar las tuplas resultantes para poder aplicar las
funciones de columna a grupos específicos utilizando la
cláusula GROUP BY.
◆ En la cláusula SELECT de consultas que utilizan funciones
de columna solamente pueden aparecer funciones de
columna.
◼ En caso de utilizar GROUP BY, también pueden aparecer columnas
utilizadas en la agrupación.
◆ Adicionalmente se pueden aplicar condiciones sobre los
grupos utilizando la cláusula HAVING.

Lenguaje SQL 44
Funciones de columna

◆ Cálculo del total → SUM (expresión)


◆ Cálculo de la media → AVG (expresión)

◆ Obtener el valor mínimo → MIN (expresión)

◆ Obtener el valor máximo → MAX (expresión)

◆ Contar
el número de filas que satisfacen la condición de
búsqueda → COUNT(*)
◼ Los valores NULL SI se cuentan.
el número de valores distintos en una columna →
◆ Contar
COUNT (DISTINCT nombre-columna)
◼ Los valores NULL NO se cuenta.

Lenguaje SQL 45
Funciones de columna

SELECT SUM(SALARY) AS SUM,


AVG(SALARY) AS AVG,
MIN(SALARY ) AS MIN,
MAX(SALARY) AS MAX,
COUNT (*) AS COUNT,
COUNT (DISTINCT WORKDEPT) AS DEPT
FROM EMPLOYEE

SUM AVG MIN MAX COUNT DEPT


873715.00 27303.59375000 15340.00 52750.00 32 8

Lenguaje SQL 46
GROUP BY

Necesito conocer los salarios de todos los


empleados de los departamentos A00, B01,
y C01. Además, para estos departamentos
quiero conocer su masa salarial.

SELECT WORKDEPT, SALARY SELECT WORKDEPT, SUM(SALARY) AS SUM


FROM EMPLOYEE FROM EMPLOYEE
WHERE WORKDEPT IN ('A00', 'B01', 'C01') WHERE WORKDEPT IN ('A00', 'B01', 'C01')
ORDER BY WORKDEPT GROUP BY WORKDEPT
ORDER BY WORKDEPT

WORKDEPT SALARY
A00 52750.00
A00 46500.00 WORKDEPT SUM
A00 29250.00 A00 128500.00
B01 41250.00 B01 41250.00
C01 38250.00 C01 90470.00
C01 23800.00
C01 28420.00 Lenguaje SQL 47
Consultas de Varias Tablas

◆ Las consultas multitabla especifica las tablas que vamos a


usar y cómo las vamos a relacionar entre sí.
◆ Para realizar este tipo de consultas podemos usar dos
alternativas:
◼ La sintaxis de SQL 1 (SQL-86), que consiste en realizar el
producto cartesiano de las tablas y añadir un filtro para
relacionar los datos que tienen en común,
◼ La sintaxis de SQL 2 (SQL-92 y SQL-2003) que incluye todas
las cláusulas de tipo JOIN.
◆ Para consultas entre varias tablas, es recomendable asignar
un alias utilizando la cláusula AS para nombrar las tablas.
Consultar dos Tablas

EMPLOYEE
EMPNO LASTNAME WORKDEPT. . .
000010 HAAS A00
000020 THOMPSON C01
000030 KWAN C01
000040 PULASKI D21

DEPARTMENT
DEPTNO DEPTNAME ...

A00 SPIFFY COMPUTER SERVICE DIV.


C01 INFORMATION CENTER
D01 DEVELOPMENT CENTER
D21 ADMINISTRATION SYSTEMS

Lenguaje SQL 49
Consultas multitabla SQL 1

◆ Composiciones cruzadas (Producto cartesiano)


◼ Consiste en obtener otro conjunto cuyos elementos son todas
las parejas que pueden formarse entre los dos conjuntos
SELECT *
FROM EMPLOYEE, DEPARTMENT

◆ Composiciones internas (Intersección)


◼ Es una operación que resulta en otro conjunto, que contiene
sólo los elementos comunes que existen en ambos conjuntos.
◼ La intersección entre las tablas se establece en la cláusula
WHERE para indicar la columna con la que queremos
relacionar las dos tablas.
SQL 1

SELECT [Link], [Link],


SELECT [Link], [Link]
EMPNO, LASTNAME, WORKDEPT, DEPTNAME
FROM
FROMEMPLOYEE AS EMP,
EMPLOYEE,
DEPARTMENT AS DEP
DEPARTMENT
WHERE
[Link]
WORKDEPT ==DEPTNO
[Link]
AND
[Link] = ‘HAAS’
LASTNAME = 'HAAS'

EMPNO LASTNAME WORKDEPT DEPTNAME


000010 HAAS A00 SPIFFY COMPUTER SERVICE DIV.

Lenguaje SQL 51
Consultas multitabla SQL 2

◆ La cláusula JOIN (unir, combinar) combina registros de dos


o más tablas en una base de datos, basándose en uno o más
campos que comparten llaves. Una consulta puede contener
cero, uno o múltiples operaciones de JOIN.
◆ En SQL hay tres tipos de JOIN: interno, externo y cruzado.

◆ El estándar ANSI del SQL especifica cinco tipos de JOIN:


◼ INNER
◼ LEFT OUTER
◼ RIGHT OUTER
◼ FULL OUTER
◼ CROSS
◆ Una tabla puede unirse a sí misma, produciendo una
autocombinación, SELF-JOIN.
◆ En la imagen anterior faltan el SELF JOIN y CROSS JOIN.
Lenguaje SQL 53
Tipos de JOINs

◆ (INNER) JOIN: devuelve registros que tienen valores


coincidentes en ambas tablas
◆ LEFT (OUTER) JOIN: Devuelve todos los registros de la
tabla de la izquierda y los registros coincidentes de la tabla
de la derecha
◆ RIGHT (OUTER) JOIN: devuelva todos los registros de la
tabla derecha y los registros coincidentes de la tabla
izquierda
◆ FULL (OUTER) JOIN: devuelve todos los registros cuando
hay una coincidencia en la tabla izquierda o derecha

Lenguaje SQL 54
SQL 2

SELECT [Link], [Link],


SELECT [Link], [Link]
EMPNO, LASTNAME, WORKDEPT, DEPTNAME
FROM EMPLOYEE
FROM EMP
EMPLOYEE,
INNER JOIN DEPARTMENT DEP
DEPARTMENT
WHEREON [Link] = [Link]
WORKDEPT = DEPTNO
WHERE
AND [Link] = ‘HAAS’
LASTNAME = 'HAAS'

EMPNO LASTNAME WORKDEPT DEPTNAME


000010 HAAS A00 SPIFFY COMPUTER SERVICE DIV.

Lenguaje SQL 55
Consultar tres Tablas

PROJECT
PROJNO PROJNAME DEPTNO ...
AD3100 ADMIN SERVICES D01
AD3110 GENERAL AD SYSTEMS D21
AD3111 PAYROLL PROGRAMMING D21
AD3112 PERSONELL PROGRAMMING D21
AD3113 ACCOUNT. PROGRAMMING D21
IF1000 QUERY SERVICES C01

DEPARTMENT
DEPTNO DEPTNAME MGRNO . . .
A00 SPIFFY COMPUTER SERVICE DIV. 000010
B01 PLANNING 000020
C01 INFORMATION CENTER 000030
D01 DEVELOPMENT CENTER ------
D11 MANUFACTURING SYSTEMS 000060
D21 ADMINISTRATION SYSTEMS 000070
E01 SUPPORT SERVICES 000050

EMPLOYEE
EMPNO FIRSTNME MIDINIT LASTNAME ...
000010 CHRISTA I HAAS
000020 MICHAEL L THOMPSON
000030 SALLY A KWAN
000050 JOHN B GEYER
000060 IRVING F STERN
000070 EVA D PULASKI
000090 EILEEN W HENDERSON
000100 THEODORE Q SPENSER

Lenguaje SQL 56
SQL 1

SELECT PROJNO, [Link], DEPTNAME, MGRNO, LASTNAME


FROM PROJECT,
DEPARTMENT,
EMPLOYEE
WHERE [Link] = [Link]
AND [Link] = [Link]
AND [Link] = 'D21'
ORDER BY PROJNO

PROJNO DEPTNO DEPTNAME MGRNO LASTNAME

AD3110 D21 ADMINISTRATION SYSTEMS 000070 PULASKI


AD3111 D21 ADMINISTRATION SYSTEMS 000070 PULASKI
AD3112 D21 ADMINISTRATION SYSTEMS 000070 PULASKI
AD3113 D21 ADMINISTRATION SYSTEMS 000070 PULASKI

Lenguaje SQL 57
Nombrando tablas (P, D, E)

SELECT PROJNO, [Link], DEPTNAME, MGRNO, LASTNAME


FROM PROJECT P,
DEPARTMENT D,
EMPLOYEE E
WHERE [Link] = [Link]
AND [Link] = [Link]
AND [Link] = 'D21'
ORDER BY PROJNO

PROJNO DEPTNO DEPTNAME MGRNO LASTNAME

AD3110 D21 ADMINISTRATION SYSTEMS 000070 PULASKI


AD3111 D21 ADMINISTRATION SYSTEMS 000070 PULASKI
AD3112 D21 ADMINISTRATION SYSTEMS 000070 PULASKI
AD3113 D21 ADMINISTRATION SYSTEMS 000070 PULASKI

Lenguaje SQL 58
SQL 2

SELECT [Link], [Link], [Link],


SELECT [Link], [Link], DEPTNAME, MGRNO, LASTNAME
PROJNO, [Link],
FROM PROJECT
FROM PRO
PROJECT,
INNER JOIN DEPARTMENT DEP
DEPARTMENT,
ON [Link]
EMPLOYEE = [Link]
[Link]
JOIN EMPLOYEE EMP= [Link]
ANDON [Link] = [Link]= [Link]
[Link]
WHERE
[Link] = ‘D21’
[Link] = 'D21'
ORDER BY [Link]
ORDER PROJNO

PROJNO DEPTNO DEPTNAME MGRNO LASTNAME

AD3110 D21 ADMINISTRATION SYSTEMS 000070 PULASKI


AD3111 D21 ADMINISTRATION SYSTEMS 000070 PULASKI
AD3112 D21 ADMINISTRATION SYSTEMS 000070 PULASKI
AD3113 D21 ADMINISTRATION SYSTEMS 000070 PULASKI

Lenguaje SQL 59
Modificación de la BBDD

◆Lasinstrucciones SQL que permiten


modificar el estado de la BBDD son:

◼ INSERT → Añade filas a una tabla


◼ UPDATE → Actualiza filas de una tabla

◼ DELETE → Elimina filas de una tabla

Lenguaje SQL 60
La instrucción INSERT

◆ La inserción de tuplas se realiza con la sentencia INSERT,


◼ Es posible insertar directamente valores.
◼ O bien insertar el conjunto de resultados de una consulta.
◼ En cualquier caso, los valores que se insertan deben pertenecer al
dominio de cada uno de los atributos de la relación.
◆ Ejemplos: CLIENTES (DNI, NOMBRE, DIR)
◆ La inserción
◼ INSERT INTO CLIENTES VALUES (1111,'Mario',
'C/. Mayor, 3');
◆ Es equivalente a las siguientes sentencias
◼ INSERT INTO CLIENTES (NOMBRE,DIR,DNI)
VALUES ('Mario','C/. Mayor, 3',1111);
◼ INSERT INTO CLIENTES (DNI,DIR,NOMBRE)
VALUES (1111,'C/. Mayor, 3’,'Mario');

Lenguaje SQL 61
Añadir una fila
INSERT INTO TESTEMP
VALUES ('000111', 'SMITH', 'C01', '1998-06-25', 25000, NULL)

INSERT INTO TESTEMP(EMPNO, LASTNAME, WORKDEPT, HIREDATE, SALARY)


VALUES ('000111', 'SMITH', 'C01', '1998-06-25', 25000)

EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS


000111 SMITH C01 1998-06-25 25000.00 -

Lenguaje SQL 62
Añadir varias filas

◆ Ejemplo:
◆ Para la siguiente base de datos, queremos incluir en la relación GRUPOS
a todos los grupos, junto con su número de álbumes publicados:
◼ GRUPOS (NOMBRE, ALBUMES) LP (TIT, GRUPO, ANIO, NUM_CANC)
◆ Solución:
INSERT INTO GRUPOS
SELECT GRUPO, COUNT (DISTINCT TIT) FROM LP
GROUP BY GRUPO;

◆ En SQL se prohíbe que la consulta que se incluye en una cláusula


INSERT haga referencia a la misma tabla en la que se quieren
insertar las tuplas.
◼ En ORACLE sí está permitido

Lenguaje SQL 63
Añadir varias filas (cont.)

TESTEMP
EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS

INSERT INTO TESTEMP


SELECT EMPNO,LASTNAME,WORKDEPT,HIREDATE,SALARY,BONUS
FROM EMPLOYEE
WHERE EMPNO < = '000050'

EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS

000010 HAAS A00 1965-01-01 52750.00 1000.00


000020 THOMPSON B01 1973-10-10 41250.00 800.00
000030 KWAN C01 1975-04-05 38250.00 800.00
000050 GEYER E01 1949-08-17 40175.00 800.00
000111 SMITH C01 1998-06-25 25000.00 -----

Lenguaje SQL 64
La instrucción UPDATE

◆ La modificación de tuplas se realiza con la sentencia UPDATE,


◼ Es posible elegir el conjunto de tuplas que se van a actualizar usando la
clausula WHERE.
◆ Ejemplos: CUENTAS (COD, DNI, NSUCURS, SALDO)
◆ Suma del 5% de interés a los saldos de todas las cuentas.
◼ UPDATE CUENTAS SET SALDO = SALDO * 1.05;
◆ Suma del 1% de bonificación a aquellas cuentas cuyo saldo sea superior a
100.000 €.
◼ UPDATE CUENTAS SET SALDO = SALDO * 1.01
WHERE SALDO > 100000;
◆ Modificación de DNI y saldo simultáneamente para el código 898.
◼ UPDATE CUENTAS SET DNI='555', SALDO=10000
WHERE COD LIKE '898';

Lenguaje SQL 65
Modificar datos

Antes:
EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS
000010 HAAS A00 1965-01-01 52750.00 1000.00
000020 THOMPSON B01 1973-10-10 41250.00 800.00
000030 KWAN C01 1975-04-05 38250.00 800.00
000050 GEYER E01 1949-08-17 40175.00 800.00
000111 SMITH C01 1998-06-25 25000.00 - - - - -

UPDATE TESTEMP
SET SALARY = SALARY + 1000
WHERE WORKDEPT = 'C01'

Después:
EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS
000010 HAAS A00 1965-01-01 52750.00 1000.00
000020 THOMPSON B01 1973-10-10 41250.00 800.00
000030 KWAN C01 1975-04-05 39250.00 800.00
000050 GEYER E01 1949-08-17 40175.00 800.00
000111 SMITH C01 1998-06-25 26000.00 - - - - -
Lenguaje SQL 66
La instrucción DELETE

◆ La eliminación de tuplas se realiza con la sentencia DELETE:


◼ DELETE FROM R WHERE P; -- WHERE es opcional
◼ Elimina tuplas completas, no columnas. Puede incluir subconsultas.
◆ Ejemplos: para la BD de CLIENTES, CUENTAS, SUCURSALES.
◆ Eliminar todas cuentas con código entre 1000 y 1100.
◼ DELETE FROM CUENTAS WHERE COD BETWEEN 1000 AND
1100;
◆ Eliminar todas las cuentas del cliente “Jose María García”.
◼ DELETE FROM CUENTAS WHERE DNI IN
(SELECT DNI FROM CLIENTES
WHERE NOMBRE LIKE 'Jose María García');
◆ Eliminar todas las cuentas de sucursales situadas en "Chinchón".
◼ DELETE FROM CUENTAS WHERE NSUCURS IN
(SELECT NSUC FROM SUCURSALES
WHERE CIUDAD LIKE 'Chinchón');

Lenguaje SQL 67
Borrar filas

Antes:
EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS
000010 HAAS A00 1965-01-01 52750.00 1000.00
000020 THOMPSON B01 1973-10-10 41250.00 800.00
000030 KWAN C01 1975-04-05 38250.00 800.00
000050 GEYER E01 1949-08-17 40175.00 800.00
000111 SMITH C01 1998-06-25 25000.00 - - - - -

DELETE FROM TESTEMP


WHERE EMPNO = '000111'

Después:
EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS
000010 HAAS A00 1965-01-01 52750.00 1000.00
000020 THOMPSON B01 1973-10-10 41250.00 800.00
000030 KWAN C01 1975-04-05 38250.00 800.00
000050 GEYER E01 1949-08-17 40175.00 800.00

Lenguaje SQL 68

También podría gustarte