SQLBDI - Intro
SQLBDI - Intro
4.1 SQL
SQL considera cuatro tipos de comandos:
a) Lenguaje de definición de datos
Alter, Create, Drop, Grant, Rename, Revoke.
DDL = Data Definition Language
b) Lenguaje de manipulación de datos
Select, Insert, Delete, Update.
DML = Data Manipulation Language
c) Lenguaje de control de datos
Commit, Rollback, Savepoint (“Transacciones”)
DCL = Data Control Language
d) Lenguaje inserto en un LPR (ESQL, Embedded SQL)
Open, Close, Fetch (“Cursor”)
Tabla DEPT
Dept_No Dnombre Loc
10 Contabilidad Sevilla
30 Investigación Madrid
20 Ventas Barcelona
40 Producción Bilbao
Tabla COURSE
Course_Id Course_title Section Stu_Id Fac_Id
CSC100 Introduction to Computing 1 S001 J01
CSC100 Introduction to Computing 2 S002 S01
CSC200 Pascal Programming 1 S001 D01
CSC200 Pascal Programming 2 S003 S01
4. 4
Tabla FACULTY
Fac_Id Faculty_Name Department Gender Salary
J01 Raymond J, Johnson Comp. Sci Male 40,000
S01 Wendy Swimmer Comp. Sci Female 45,000
D01 Amy Dancer Comp. Sci Female 34,500
J02 Bob Jones Accounting Male 35,000
N01 Jack Nelson History Male 28,000
SELECT...
FROM...
WHERE...
GROUP BY...
HAVING...
ORDER BY...
Formato Básico:
SELECT Ri1.A1,...,Rir.Ar
FROM R1,.....,RK
WHERE
WHERE <Predicado>
<expr_
GROUP BY columna>
HAVING <Predicado>
<expr_ ASC
ORDER BY columna> ;
DESC
Ejemplo:
SELECT apellido, dirección
FROM enfermo
WHERE s = ‘F’
ORDER BY apellido
4. 8
SELECT <expr_
columna>
FROM <Tabla>
WHERE <Predicado>
<expr_ ASC
ORDER BY ;
columna>
DESC
Selección de columnas
• Selección de todas las columnas de una tabla:
SQL> SELECT EMP_NO, APELLIDO, OFICIO, DIR, FECHA_CONTR, SALARIO,
COMISION, DEPT_NO
FROM EMP;
4. 9
SQL SELECT *
FROM EMP;
Cláusula FROM
SELECT apellido “nombres de Juan”
FROM Juan.enfermo
Cláusula WHERE
• Operadores de comparación:
➢ Aritméticos: =, <, >
➢ De caracteres: LIKE
➢ Lógicos: IN
• Operadores lógicos booleanos: AND, OR, NOT.
• Algunos ejemplos de predicados son:
➢ 5 = emp_no
➢ SUM(salario) >= 1000000
➢ (ROUND(salario) / 12 ) + 100) <= MIN
➢ (dept_no = 5) AND (apellido = ‘García’)
Cláusula ORDER BY
ORDER BY sala_cod, hospital_cod DESC
ORDER BY mod(empleado_no, 6)
ORDER BY 2
4. 10
Enfermero Enfermero T
Enfermera Enfermera T
Interno Interno T
Enfermero Enfermero M
Enfermera Enfermera M
Interno Interno M
Enfermero Enfermero N
Enfermero Enfermero T
Interno Interno N
Enfermero Enfermero T
SELECT DISTINCT
Enfermero Enfermero T
Enfermera Enfermera T
Interno Interno T
Enfermero M
Enfermera M
Interno M
Enfermero N
Interno N
4.4 Operadores
4.4.1 Operadores aritméticos: + - * /
4. 11
Ejemplo:
SELECT col1 * col2, col1 – col2
FROM tabla1
WHERE col1 + col2 = 34
4.4.2 Operadores de Comparación
a) Comparación general:
= != > >= < <=
Ejemplos:
SELECT salario, comisión
FROM vendedor
WHERE comisión > salario
• = ANY es equivalente a IN
4. 12
• Ejemplos:
SELECT apellido, salario
FROM plantilla
WHERE salario BETWEEN 1000000 AND 2000000
SELECT apellido
FROM emp
WHERE dept_no IN (30,40)
SELECT apellido
FROM vendedor
WHERE comision IS NULL
SELECT apellido
FROM emp
WHERE dept_no != ALL (10,20,80)
4.5 Funciones
• Existen los siguientes tipos de función:
➢ Aritméticas
➢ De cadenas de caracteres
➢ De conversión
➢ De grupo
➢ Otras funciones
SIGN(N) Si n < 0 : -1
Si n = 0 : 0
Si n > 0 : +1
<expr_
SELECT columna> FROM <Tabla>
WHERE <Predicado>
GROUP BY <expr_
columna>
HAVING <Predicado>
DESC
a) Selección de conjuntos
❖ La evaluación de las cláusulas en tiempo de ejecución se efectúa en el siguiente orden:
WHERE Filtra las filas
GROUP BY Crea una tabla de grupo nueva
HAVING Filtra los grupos
ORDER BY Clasifica la salida
b) Funciones de conjuntos
Las siguientes son funciones de conjuntos:
▪ AVG(n)
Valor medio de n (ignorando los valores nulos).
▪ COUNT( { * | expr } )
Número de veces que expr evalúa algún dato con valor no nulo. La opción ‘*’ cuenta todas las
filas seleccionadas.
▪ MAX(expr)
Máximo valor de expr.
▪ MIN(expr)
Mínimo valor de expr.
▪ STDDEV(expr)
Desviación estándar de expr sin tener en cuenta los valores nulos.
▪ SUM(expr)
Suma de valores de expr.
▪ VARIANCE(expr)
Varianza de expr sin tener en cuenta los valores nulos.
Ejemplos:
SELECT AVG(salario)
FROM plantilla
GROUP BY hospital_cod
4. 16
NVL(expr1, expr2)
4. 17
Ejemplos:
1. Despliegue el nombre, trabajo, salario, comisión y sueldo total de un empleado, para los empleados del
departamento 30.
SQL SELECT ename, job, salary, comm,
2 NVL(sal, 0) + NVL(comm, 0)
3 FROM emp
4 WHERE deptno = 30;
Ejemplo
Desplegar nombre, salario, comisión y salario total para todos los vendedores ordenados por salario
total.
SQL SELECT ename, sal, comm, 12*(sal + comm) TOTAL
2 FROM emp
3 WHERE job = ‘SALESMAN’
4 Order by 12*(sal + comm ) total;
<selecc sin
order by>
UNION
<selecc sin
INTERSECT order by>
MINUS
ASC
ORDER BY
;
<Posi-
ción> DESC
4 UNION
5 SELECT apellido
6 FROM plantilla
7 WHERE turno = `M’;
APELLIDO
Amigo R.
Bocina G.
Karplus W.
Núñez C.
Seleccionar todos los internos que trabajan en el hospital 22 y los médicos del mismo.
Ejemplos INTERSECT
SQL RUN
1 SELECT apellido
2 FROM plantilla
3 WHERE funcion = ‘Interno’
4 INTERSECT
5 SELECT apellido
6 FROM plantilla
7 WHERE turno = ‘M’;
APELLIDO
Núñez C.
Listar todos los empleados que trabajen en cualquier hospital y sean médicos internos
Ejemplo MINUS
SQL RUN
1 SELECT apellido
2 FROM plantilla
3 WHERE funcion = ‘Interno’
4 MINUS
5 SELECT apellido
6 FROM plantilla
7 WHERE turno = ‘M’;
APELLIDO
Amigo R.
4. 23
Karplus W.
Seleccionar los empleados de cualquier hospital que sean, o bien doctores no internos, o bien cualquier
otra cosa.
Una instrucción Select que trabaja con múltiples tablas se puede clasificar como:
• COMBINACIONES
• SUBCONSULTAS
Combinaciones (JOINS)
❖ Utilizadas para recuperar datos desde más de una tabla.
Subconsultas (Sub-queries)
❖ Utilizadas para generar preguntas subsidiarias necesitadas por la consulta principal.
4. 24
Join de tablas
Server
EMP DEPT
Ejemplo:
SELECT *
FROM LABORATORIO
SELECT *
FROM test;
Sintaxis de un Join:
SELECT columnas de las tablas citadas en la cláusula “from”
FROM tabla1, tabla2
WHERE Tabla1.columna = Tabla2.columna
Ejemplo:
SELECT apellido, loc
FROM emp, dept
WHERE apellido LIKE ‘%M’
APELLIDO LOC
MARTIN SEVILLA
MUÑOZ SEVILLA
MARTIN MADRID
MUÑOZ MADRID
MARTIN BARCELONA
MUÑOZ BARCELONA
MARTIN BILBAO
MUÑOZ BILBAO
Solución:
SQL SELECT E.FAULTY-NAME, E.SALARY “FAC SAL”,
2 B.FACULTY-NAME “BOSS NAME”, B.SALARY “BOSS SAL”
3 FROM PERSONNEL E, PERSONNEL B
4 WHERE E.BOSS-ID=B.FAC-ID AND E.SALARY>B.SALARY;
EMP TABLE
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERCK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 31-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 09-DEC-82 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERCK 7788 12-JAN-83 1100 20
7900 JAMES CLERCK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERCK 7782 23-JAN-82 1300 10
4. 29
4.7.3 Subconsultas
Las subconsultas seleccionan filas desde una tabla con una
condición que depende de valores de otra consulta.
Sintaxis SELECT
SELECT....
FROM...
WHERE...
Sintaxis SELECT
(SELECT...
FROM...
WHERE...);
Ejemplo:
SELET apellido
FROM plantilla
WHERE salario > (SELECT AVG(salario)
FROM plantilla)
)
SELECT apellido
FROM emp
WHERE oficio = (SELECT oficio
FROM emp
WHERE apellido = ‘JIMENEZ’)
Subconsultas que devuelven más de un valor y se ha de comparar con uno de ellos
• Información sobre los empleados que ganan más que cualquier empleado del departamento
30.
SELECT *
FROM emp
WHERE salario > (SELECT MAX(salario)
FROM emp
GROUP BY dept_no
HAVING dept_no = 30)
ó bien
4. 31
SELECT *
FROM emp
WHERE salario > ALL
(SELECT salario
FROM emp
WHERE dept_no = 30)
APELLIDO
JIMENEZ
ALONSO
SANCHEZ
SELECT
FROM
WHERE
[NOT]
EXISTS
SELECT
FROM
WHERE
Ejemplos:
Se trabajará con la base de datos de Partes-Proveedores, constituida por las tablas: S, P, SP.
4. 33
SP S# P# Cantidad
S1 P1 300
S1 P2 200
S2 P1 300
S3 P2 200
1) Obtener el nombre del proveedor para aquellos proveedores que suministran la parte P2.
SELECT NomProv
FROM S
WHERE EXISTS
(SELECT *
FROM SP
WHERE S# = S.S# AND P# = ‘P2’)
2) Obtener el nombre del proveedor, para los proveedores que no suministran la parte P2.
SELECT NomProv
FROM SP
WHERE NOT EXISTS
(SELECT *
FROM SP
WHERE S# = S.S# AND P# = ‘P2’)
3) Obtener los nombres de proveedor, para los proveedores que suministran todas las partes.
SELECT NomProv
FROM S
WHERE NOT EXISTS
(SELECT *
FROM P
WHERE NOT EXISTS
(SELECT *
FROM SP
WHERE S# = S.S# AND
P# = P.P#))
4. 34
( <columna> )
<bloque
selecc>
;
VALUES ( <valor> )
Ejemplos
4. 35
3 GENDER, ADDRESS)
Ejemplos:
1) DELETE
FROM enfermo
WHERE inscripcion = 74385
UPDATE <Tabla>
<Column> = <Expresión>
SET
( <Column> ) = ( <Bloque )
Selección>
WHERE <predi ;
cado>
Ejemplos
1) UPDATE enfermo
SET direccion = ‘Castellana 95’
WHERE inscripcion = 74835
2) UPDATE enfermo
4. 38
3) UPDATE enfermo
SET (direccion, fecha_nac) =
(SELECT direccion, fecha_nac
FROM enfermo
WHERE inscripcion = 67328
)
WHERE inscripcion = 12345
4) UPDATE enfermo
SET direccion = ‘Castellana 60’
WHERE inscripcion = 63827
SQL COMMIT;
4. 39
Commit completed
Ejemplo de Rollback:
SQLUPDATE emp
SQL ROLLBACK;
Rollback completed
4. 40
COMMIT
INSERT
INSERT
DELETE
INSERT
UPDATE
UPDATE
COMMIT
Concepto de transacción
4. 41
COMMIT
INSERT
UPDATE
INSERT
DELETE
ROLLBACK
4. 42
SQL SAVEPOINT A;
Savepoint creado.
SQL SAVEPOINT B;
1 savepoint creado.
SQL ROLLBACK TO B;
4. 43
Rollback completo.
4.14 Tablas
4.14.1 Creación de una tabla
Sintaxis del comando CREATE
Ejemplo:
<nombre
CREATE TABLE tabla>
Table created
Table created
,
Tipo de dato de la columna
( )
DEFAULT expr column_constraint
table_constraint
PCTFREE integer
PCTUSED integer
INITRANS integer
MAXTRANS integer
TABLESPACE tablespace
STORAGE storage_clause
,
CLUSTER cluster ( columna )
Cláusula CONSTRAINT
• Sintaxis:
4. 46
table_constraint ::=
CONSTRAINT constraint ,
UNIQUE ( columna )
PRIMARY KEY
esquema. , ON DELETE
CASCADE
( columna )
CHECK (condición)
PCTFREE integer
esquema.
PCTUSED integer
INITRANS integer
MAXTRANS integer
TABLESPACE tablespace
STORAGE storage_clause
DISABLE
(Continuación)
4. 47
Column_constraint::
4. 48
(Continuación)
CONSTRAINT constraint
NULL
NOT
UNIQUE
PRIMARY KEY
REFERENCES table.
(columna)
CHECK (condición)
PCTFREE integer
esquema.
PCTUSED integer
INITRANS integer
MAXTRANS integer
TABLESPACE tablespace
STORAGE storage_clause
DISABLE
Ejemplos:
4. 49
DISABLE)
PCTFREE 5 PCTUSED 75
4.14.2 Borrado de una tabla
ADD
MODIFY
,
;
4. 53
Ejemplo:
ALTER TABLE enfermo
ADD (altura NUMBER(3,2))
Ejemplo:
ALTER TABLE enfermo
MODIFY (altura NUMBER(4,2))
Debe considerarse:
Modificación de tablas:
En caso de requerir remover una columna de una tabla, se
deben seguir los tres siguientes pasos:
4. 54
TEMPTAB
1. Crear una tabla duplicada
Table created.
ORIGTAB
Table dropped.
Table renamed.
4. 55
4.15 Vistas
4.15.1 Concepto de vista
( <columna>> )
AS <bloque ;
selecc>
Ejemplo:
CREATE VIEW pagos (NOMBRE, SAL_MES,
SAL_AÑO, DEPT_NO)
AS
SELECT APELLIDO, SALARIO,
SALARIO*12, DEPT_NO
FROM emp;
Ejemplo: Cambiar los nombres de los atributos a través de una vista
SQL CREATE VIEW TEACHERS2 (FID, NAME, DEPT, SEX)
2 AS SELECT FAC_ID, FACULTY_NAME,
4. 57
View created.
SQL UPDATE empvu20
2 SET deptno = 30
4.16 Indices
Los índices son estructuras opcionales asociadas con tablas, usados para agilizar la ejecución de la
consulta y/o garantizar la unicidad.
Ejemplo de un índice
C SM
Creación de índices
Ejemplo:
Crear un índice simple en la columna ENAME
4. 60
Index created.
Indice usado:
SQL SELECT *
SQL SELECT *
2 FROM emp
2 FROM emp;
3 WHERE ename = ‘SMITH’;
SQL
SQLCRETE
CRETEINDEX
UNIQUE
i_empno_ename
INDEX i_empn_ename
2 2 ON
ONemp
emp(empno,
(empno);ename);
Index
Indexcreated
created