Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
2: SQL
Bases de datos
Mster en Tecnologas de Informacin Geogrfica
Introduccin a SQL
Caractersticas de SQL
Definicin de vistas
Autorizacin
Integridad de datos
Control de Transacciones
SQL - LDD
CREATE
ALTER
DROP
Creacin de tablas
La
Lenguaje SQL
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))
Ejemplo
Ejemplo
10
SQL - LMD
Seleccin:
SELECT
Modificacin:
INSERT
UPDATE
DELETE
11
FROM T1, , Tn
WHERE P
- Nombres de columnas
12
SELECT
FROM
de tres clusulas:
WHERE
13
14
DEPTNO
A00
B01
C01
D01
D11
D21
E01
E11
E21
DEPTNAME
ADMRDEPT
A00
A00
A00
A00
D01
D01
A00
E01
E01
15
16
WORKDEP
A0 T
A0
0
A0
0
B0
0
C0
1
C0
1
D11
1
D11
D2
D2
1
E0
1
E11
1
E11
E2
E2
1
1
JOB
CLER
PRE
K
SALESRE
S
MANAGER
P
ANALYST
MANAGER
DESIGNE
MANAGER
R
CLER
MANAGER
K
MANAGER
MANAGER
OPERATOR
FIELDRE
MANAGER
P
17
DEPTNO
A00
B01
C01
D01
D11
D21
E01
E11
E21
DEPTNAME
000010
000020
000030
-----000060
000070
000050
000090
000100
A00
A00
A00
A00
D01
D01
A00
E01
E01
18
Salida ordenada
SQL
19
DEPTNO DEPTNAME
ADMRDEPT
A00
C01
B01
E01
D01
D11
D21
E21
E11
A00
A00
A00
A00
A00
D01
D01
E01
E01
20
ADMRDEPT DEPTNAME
A00
A00
A00
A00
A00
D01
D01
E01
E01
SUPPORT SERVICES
DEVELOPMENT CENTER
INFORMATION CENTER
PLANNING
SPIFFY COMPUTER SERVICE DIV.
ADMINISTRATION SYSTEMS
MANUFACTURING SYSTEMS
SOFTWARE SUPPORT
OPERATIONS
DEPTNO
E01
D01
C01
B01
A00
D21
D11
E21
E11
21
Seleccin de filas
La
El
Las
BETWEEN
de comparacin
Op1 AND Op2
IN
23
LIKE
IS
24
DEPTNO
A00
B01
C01
D01
E01
ADMRDEPT
A00
A00
A00
A00
A00
25
26
EMPNO LASTNAME
BIRTHDATE
000160
000100
1955-04-12
1956-12-18
PIANKA
SPENCER
27
EMPNO
JOB
000130
ANALYST
EDLEVEL
16
28
ANALYST
ANALYST
DESIGNER
MANAGER
PRES
EDLEVEL
16
18
18
18
18
29
EDLEVEL
000310
000290
000300
000330
000100
000230
000120
000270
000250
12
12
14
14
14
14
14
15
15
30
SELECT con IN
Listar
EDLEVEL
14
14
14
14
14
19
20
31
SELECT LASTNAME
FROM EMPLOYEE
WHERE LASTNAME LIKE 'G%';
32
THOMPSON
HENDERSON
ADAMSON
JEFFERSON
JOHNSON
SELECT LASTNAME
FROM EMPLOYEE
WHERE LASTNAME LIKE '%M%N%';
THOMPSON
ADAMSON
MARINO
33
SELECT LASTNAME
FROM EMPLOYEE
WHERE LASTNAME LIKE '_C%';
34
DEPTNO DEPTNAME
A00
B01
C01
E01
E11
E21
35
SALARY
COMM
INCOME
000210
000250
000260
000290
000300
000310
000320
18270.00
19180.00
17250.00
15340.00
17750.00
15900.00
19950.00
1462.00
1534.00
1380.00
1227.00
1420.00
1272.00
1596.00
19732.00
20714.00
18630.00
16567.00
19170.00
17172.00
21546.00
36
Renombramiento de tablas
Es
SELECT NOM
FROM EMP, HIJOS H1, HIJOS H2
WHERE EMP.DNI = H1.DNI AND EMP.DNI = H2.DNI AND
H1.NOMH <> H2.NOMH;
Realiza
37
Ejemplo:
Es
39
Ejemplo
BIGINT
8589934592
INTEGER
186282
SMALLINT
186
NUMERIC(8,2)
DECIMAL(8,2)
REAL
6.02257E23
DOUBLE PRECISION
3.141592653589
FLOAT
6.02257E23
CHARACTER(max)
'GREECE
VARCHAR(n)
'hola'
DATE
date 'YYYY-MM-DD'
TIME
time 'hh:mm:ss.ccc'
TIMESTAMP
40
Expresiones
Aunque
Referencias a columnas
Valores literales
Operadores aritmticos
Llamadas a funciones
Los
Aunque
41
Descripcin
IBM DB2
SQL
Server
Oracle
MySQL
Valor absoluto
ABSs
ABS
ABS
ABS
CEIL
CEILING
CEIL
CEILING
FLOOR
FLOOR
FLOOR
FLOOR
Potencia
POWER
POWER
POWER
POWER
Redondeo a un nmero
ROUND
de cifras decimales
ROUND
ROUND
ROUND
Mdulo
MOD.
MOD.
42
Funciones de cadena
Descripcin
IBM DB2
SQL Server
Oracle
MySQL
LOWER
LOWER
LOWER
LOWER
UPPER
UPPER
UPPER
UPPER
RTRIM
RTRIM
RTRIM
RTRIM
LTRIM
LTRIM
LTRIM
SUBSTR
SUBSTRING
SUBSTR
SUBSTRING
CONCAT
CONCAT
CONCAT
43
Operaciones aritmticas
Necesito
EMPNO
SALARY
COMM
000210
000250
000260
000290
000300
000310
000320
18270.00
19180.00
17250.00
15340.00
17750.00
15900.00
19950.00
1462.00
1534.00
1380.00
1227.00
1420.00
1272.00
1596.00
19732.00
20714.00
18630.00
16567.00
19170.00
17172.00
21546.00
44
EMPNO, SALARY,
SALARY*1.0375
FROM EMPLOYEE
WHERE SALARY < 20000
ORDER BY EMPNO
EMPNO
SALARY
000210
000250
000260
000290
000300
000310
000320
18270.00
19180.00
17250.00
15340.00
17750.00
15900.00
19950.00
18955.125000
19899.250000
17896.875000
15915.250000
18415.625000
16496.250000
20698.125000
45
Expresiones en predicados
SELECT
EMPNO, SALARY,
(COMM/SALARY)*100
FROM EMPLOYEE
WHERE (COMM/SALARY) * 100 > 8
ORDER BY EMPNO
EMPNO
COMM
SALARY
000140
000210
000240
000330
2274.00
1462.00
2301.00
2030.00
28420.00
18270.00
28760.00
25370.00
8.001400
8.002100
8.000600
8.001500
46
Uso de funciones
SELECT
EMPNO, SALARY,
TRUNC(SALARY*1.0375, 2)
FROM EMPLOYEE
WHERE SALARY < 20000
ORDER BY EMPNO
EMPNO
SALARY
000210
000250
000260
000290
000300
000310
000320
18270.00
19180.00
17250.00
15340.00
17750.00
15900.00
19950.00
18955.12
19899.25
17896.87
15915.25
18415.62
16496.25
20698.12
47
NAME
HAAS, CHRISTA
LUCCHESI, VINCENZO
O'CONNELL, SEAN
48
Operadores de conjunto
SQL
UNION
INTERSECT
EXCEPT (MINUS en Oracle)
Por
49
UNION
Cada
Lenguaje SQL
50
UNION
Cada entrada debe tener 2 lineas: la
primera debe incluir el nmero y
nombre del director y la seguna el
nmero y el nombre del
departamento.
MGRNO
000010
000010
000020
000020
000030
000030
000050
000050
Mgr.:
Dept.:
Mgr.:
Dept.:
Mgr.:
Dept.:
Mgr.:
Dept.:
SELECT
MGRNO , 'Dept.:', DEPTNAME
FROM
DEPARTMENT
UNION
SELECT
MGRNO, 'Mgr.:', LASTNAME
FROM
DEPARTMENT D, EMPLOYEE E
WHERE
D.MGRNO = E.EMPNO
ORDER BY 1,2 DESC
DEPTNAME
HAAS
SPIFFY COMPUTER SERVICE DIV.
THOMPSON
PLANNING
KWAN
INFORMATION CENTER
GEYER
SUPPORT
Lenguaje
SQLSERVICES
51
LASTNAME
000010
000020
000030
000040
HAAS
THOMPSON
KWAN
PULASKI
WORKDEPT. . .
A00
C01
C01
D21
DEPARTMENT
DEPTNO
A00
C01
D01
D21
...
DEPTNAME
SPIFFY COMPUTER SERVICE DIV.
INFORMATION CENTER
DEVELOPMENT CENTER
ADMINISTRATION SYSTEMS
Lenguaje SQL
52
SELECT
FROM
WHERE
AND
EMPNO
LASTNAME
WORKDEPT
DEPTNAME
000010
HAAS
A00
Lenguaje SQL
53
PROJNAME
ADMIN SERVICES
GENERAL AD SYSTEMS
PAYROLL PROGRAMMING
PERSONELL PROGRAMMING
ACCOUNT. PROGRAMMING
QUERY SERVICES
DEPTNO
D01
D21
D21
D21
D21
C01
...
DEPARTMENT
DEPTNO
A00
B01
C01
D01
D11
D21
E01
DEPTNAME
SPIFFY COMPUTER SERVICE DIV.
PLANNING
INFORMATION CENTER
DEVELOPMENT CENTER
MANUFACTURING SYSTEMS
ADMINISTRATION SYSTEMS
SUPPORT SERVICES
MGRNO . . .
000010
000020
000030
-----000060
000070
000050
EMPLOYEE
EMPNO
000010
000020
000030
000050
000060
000070
000090
000100
FIRSTNME
CHRISTA
MICHAEL
SALLY
JOHN
IRVING
EVA
EILEEN
THEODORE
MIDINIT
I
L
A
B
F
D
W
Q
LASTNAME
HAAS
THOMPSON
KWAN
GEYER
STERN
PULASKI
HENDERSON
SPENSER
Lenguaje SQL
...
54
PROJNO
DEPTNO
DEPTNAME
AD3110
AD3111
AD3112
AD3113
D21
D21
D21
D21
ADMINISTRATION
ADMINISTRATION
ADMINISTRATION
ADMINISTRATION
MGRNO LASTNAME
SYSTEMS
SYSTEMS
SYSTEMS
SYSTEMS
Lenguaje SQL
000070
000070
000070
000070
PULASKI
PULASKI
PULASKI
PULASKI
55
PROJNO
DEPTNO
DEPTNAME
AD3110
AD3111
AD3112
AD3113
D21
D21
D21
D21
ADMINISTRATION
ADMINISTRATION
ADMINISTRATION
ADMINISTRATION
MGRNO LASTNAME
SYSTEMS
SYSTEMS
SYSTEMS
SYSTEMS
Lenguaje SQL
000070
000070
000070
000070
PULASKI
PULASKI
PULASKI
PULASKI
56
WORKDEPT . . . BIRTHDATE . . .
000100
SPENSER
E21
1956-12-18
000330
LEE
E21
1941-07-18
WORKDEPT . . . BIRTHDATE . . .
000100
SPENSER
E21
1956-12-18
000330
LEE
E21
1941-07-18
Lenguaje SQL
57
SELECT
FROM
WHERE
AND
AND
E.EMPNO, E.LASTNAME,
E.BIRTHDATE, M.BIRTHDATE, M.EMPNO
EMPLOYEE E, EMPLOYEE M,
DEPARTMENT D
E.WORKDEPT = D.DEPTNO
D.MGRNO
= M.EMPNO
E.BIRTHDATE < M.BIRTHDATE
EMPNO
LASTNAME
BIRTHDATE BIRTHDATE
EMPNO
000110
000130
000200
000230
000250
000260
000280
000300
000310
000320
000330
000340
LUCCHESI
QUINTANA
BROWN
JEFFERSON
SMITH
JOHNSON
SCHNEIDER
SMITH
SETRIGHT
MEHTA
LEE
GOUNOT
1929-11-05
1925-09-15
1941-05-29
1935-05-30
1939-11-12
1936-10-05
1936-03-28
1936-10-27
1931-04-21
1932-08-11
1941-07-18
1926-05-17
000010
000030
000060
000070
000070
000070
000090
000090
000090
000100
000100
000100
1933-08-14
1941-05-11
1945-07-07
1953-05-26
1953-05-26
1953-05-26
1941-05-15
1941-05-15
1941-05-15
1956-12-18
1956-12-18
1956-12-18
Lenguaje SQL
58
Funciones de columna
Las
Lenguaje SQL
59
Funciones de columna
Por
Adicionalmente
60
Funciones de columna
Clculo
Contar
Lenguaje SQL
61
Funciones de columna
SELECT
FROM
SUM
873715.00
SUM(SALARY) AS SUM,
AVG(SALARY) AS AVG,
MIN(SALARY ) AS MIN,
MAX(SALARY) AS MAX,
COUNT (*)
AS COUNT,
COUNT (DISTINCT WORKDEPT) AS DEPT
EMPLOYEE
AVG
27303.59375000
MIN
MAX
COUNT
DEPT
15340.00
52750.00
32
Lenguaje SQL
62
GROUP BY
Necesito conocer los salarios de todos los
empleados de los departamentos A00, B01,
y C01. Adems, para estos departamentos
quiero conocer su masa salarial.
SELECT
FROM
WHERE
ORDER BY
WORKDEPT, SALARY
EMPLOYEE
WORKDEPT IN ('A00', 'B01', 'C01')
WORKDEPT
WORKDEPT
A00
A00
A00
B01
C01
C01
C01
SELECT
WORKDEPT, SUM(SALARY) AS SUM
FROM
EMPLOYEE
WHERE
WORKDEPT IN ('A00', 'B01', 'C01')
GROUP BY WORKDEPT
ORDER BY WORKDEPT
SALARY
52750.00
46500.00
29250.00
41250.00
38250.00
23800.00
28420.00
WORKDEPT
A00
B01
C01
Lenguaje SQL
SUM
128500.00
41250.00
90470.00
63
GROUP BY-HAVING
Ahora slo quiero ver los departamentos
cuya masa salarial sea superior a 50000
SELECT
WORKDEPT, SUM(SALARY) AS SUM
FROM
EMPLOYEE
WHERE
WORKDEPT IN ('A00', 'B01', 'C01')
GROUP BY WORKDEPT
ORDER BY WORKDEPT
WORKDEPT
A00
B01
C01
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
SUM
128500.00
41250.00
90470.00
WORKDEPT
A00
C01
Lenguaje SQL
SUM
128500.00
90470.00
64
GROUP BY-HAVING
Necesito, agrupado por departmento, los
trabajadores que no sean managers,
designer, y fieldrep, con una media de
salario mayor que 25000.
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
WORKDEPT
JOB
AVG
A00
A00
A00
C01
CLERK
PRES
SALESREP
ANALYST
29250.00000000
52750.00000000
46500.00000000
26110.00000000
Lenguaje SQL
65
GROUP BY-HAVING
Mostrar los departamentos con ms de un empleado
SELECT 2
SELECT 1
SELECT
FROM
GROUP BY
ORDER BY
WORKDEPT
B01
E01
A00
C01
E21
E11
D21
D11
SELECT
FROM
GROUP BY
HAVING
ORDER BY
NUMB
1
1
3
3
4
5
6
9
WORKDEPT
A00
C01
E21
E11
D21
D11
Lenguaje SQL
NUMB
3
3
4
5
6
9
66
GROUP BY-HAVING
SELECT 1
SELECT
FROM
GROUP BY
ORDER BY
WORKDEPT
ED
YEARS
E11
E21
D21
E01
D11
A00
B01
C01
14
15
15
16
16
17
18
18
27
31
22
49
24
35
24
23
WORKDEPT
E21
E01
A00
ED
15
16
17
YEARS
31
49
35
SELECT 2
SELECT
FROM
GROUP BY
HAVING
ORDER BY
Lenguaje SQL
67
GROUP BY-HAVING
SELECT 1
SELECT
FROM
GROUP BY
WORKDEPT
ED
MIN
A00
B01
C01
D11
D21
E01
E11
17
18
18
16
15
16
14
600.00
800.00
500.00
400.00
300.00
800.00
300.00
WORKDEPT
E11
D21
ED
14
15
MIN
300.00
300.00
SELECT 2
SELECT
FROM
GROUP BY
HAVING
ORDER BY
Lenguaje SQL
68
1.
2.
3.
4.
5.
69
Subconsulta con IN
Tabla DEPARTMENT
Qu departamentos no
tienen proyectos
asignados?
DEPTNO
DEPTNAME
A00
B01
C01
...
SELECT
FROM
WHERE
DEPTNO, DEPTNAME
DEPARTMENT
DEPTNO NOT IN (SELECT DEPTNO
FROM PROJECT)
Resultado subconsulta
Resultado final
DEPTNO
DEPTNAME
A00
Lenguaje SQL
B01
C01
D01
D11
D21
E01
E11
E21
70
Modificacin de la BBDD
Las
Lenguaje SQL
71
La instruccin INSERT
La
Ejemplos:
Es
72
EMPNO
LASTNAME
WORKDEPT
HIREDATE
SALARY
000111
SMITH
C01
1998-06-25
25000.00
Lenguaje SQL
BONUS
-
73
Ejemplo:
Para la siguiente base de datos, queremos incluir en la relacin GRUPOS
a todos los grupos, junto con su nmero de lbumes publicados:
Solucin:
INSERT INTO GRUPOS
SELECT GRUPO, COUNT (DISTINCT
GROUP BY GRUPO;
TIT) FROM LP
Lenguaje SQL
74
EMPNO
LASTNAME
WORKDEPT HIREDATE
SALARY
000010
000020
000030
000050
000111
HAAS
THOMPSON
KWAN
GEYER
SMITH
A00
B01
C01
E01
C01
52750.00 1000.00
41250.00 800.00
38250.00 800.00
40175.00 800.00
----25000.00
1965-01-01
1973-10-10
1975-04-05
1949-08-17
1998-06-25
Lenguaje SQL
BONUS
75
La instruccin UPDATE
Lenguaje SQL
76
Modificar datos
Antes:
EMPNO
LASTNAME
WORKDEPT
HIREDATE
SALARY BONUS
000010
000020
000030
000050
000111
HAAS
THOMPSON
KWAN
GEYER
SMITH
A00
B01
C01
E01
C01
1965-01-01
1973-10-10
1975-04-05
1949-08-17
1998-06-25
52750.00 1000.00
41250.00 800.00
38250.00 800.00
40175.00 800.00
25000.00 - - - - -
UPDATE TESTEMP
SET SALARY = SALARY + 1000
WHERE WORKDEPT = 'C01'
Despus:
EMPNO
LASTNAME
WORKDEPT
HIREDATE
SALARY BONUS
000010
000020
000030
000050
000111
HAAS
THOMPSON
KWAN
GEYER
SMITH
A00
B01
C01
E01
C01
1965-01-01
1973-10-10
1975-04-05
1949-08-17
1998-06-25
52750.00 1000.00
41250.00 800.00
39250.00 800.00
40175.00 800.00
26000.00 - - - - -
Lenguaje SQL
77
La instruccin DELETE
Lenguaje SQL
78
Borrar filas
Antes:
EMPNO
LASTNAME
WORKDEPT
HIREDATE
SALARY BONUS
000010
000020
000030
000050
000111
HAAS
THOMPSON
KWAN
GEYER
SMITH
A00
B01
C01
E01
C01
1965-01-01
1973-10-10
1975-04-05
1949-08-17
1998-06-25
52750.00 1000.00
41250.00 800.00
38250.00 800.00
40175.00 800.00
25000.00 - - - - -
Despus:
EMPNO
LASTNAME
WORKDEPT
HIREDATE
SALARY BONUS
000010
000020
000030
000050
HAAS
THOMPSON
KWAN
GEYER
A00
B01
C01
E01
1965-01-01
1973-10-10
1975-04-05
1949-08-17
52750.00 1000.00
41250.00 800.00
38250.00 800.00
40175.00 800.00
Lenguaje SQL
79