Vous êtes sur la page 1sur 56

OTOO - 2006 4.

4.1 SQL
SQL considera cuatro tipos de comandos:

a) Lenguaje de definicin de datos


Alter, Create, Drop, Grant, Rename, Revoke.
DDL = Data Definition Language

b) Lenguaje de manipulacin 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)

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 2

SQL: Lenguaje de base de datos relacional

Relacionamiento entre las tablas EMP y DEPT

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 3

4.1 Tablas
4.1.1 Creacin de una tabla
<nombre
CREATE TABLE tabla>

( <especific NOT NULL ) ;


columna>

Sintaxis del comando CREATE


Ejemplo:
SQL CREATE TABLE STUDENT (STU_ID CHAR (6)
NOT NULL,STUDENT_NAME CHAR (17),
ADDRESS CHAR (20),
BIRTHDATE DATE,
GENDER CHAR (6))

Table created

SQL CREATE TABLE COURSE (COURSE_ID


CHAR(6) NOT NULL,COURSE_TITLE CHAR(20),
SECTION_NO NUMBER (2),
STU_ID CHAR (6) NOT NULL,
FAC_ID CHAR (6) NOT NULL) )
Table created
DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 4

SQL CREATE TABLE FACULTY (FAC_ID CHAR (6) NOT NULL,


FACULTY_NAME CHAR (17),
DEPARTMENT CHAR (10),
GENDER CHAR (6),
SALARY NUMBER (5) )
Table created
ELIMINAR TABLA
SQL DROP TABLE STUDENT;
Table dropped.

SQL DROP TABLE COURSE;


Table dropped.

SQL DROP TABLE FACULTY;


Table dropped.

Creacin de una tabla con datos recuperados en una consulta:


CREATE TABLE bonus (APELLIDO, OFICIO,
SALARIO, COMISION)
AS SELECT APELLIDO, OFICIO, SALARIO, COMISION
FROM emp
WHERE OFICIO = director
OR COMISION > 0.25 * SALARIO
DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 5

Restricciones declarativas para restringir valores de columnas


en SQL
TIPO DEFINICION
NOT NULL No se permiten columnas con valores nulos
UNIQUE Requiere que valores de la columna sean nicos
CHECK Requiere que valores de la columna satisfagan una expresin lgica
PRIMARY KEY Requiere que valores de la columna sean nicos y NOT NULL
FOREIGN KEY Requiere que valores de la columna tengan un valor igual a uno
definido UNIQUE o PRIMARY KEY en una tabla relacionada

Clusula CONSTRAINT
Sintaxis:
Ejemplos:
a) CREATE TABLE emp
(empno NUMBER(4),
ename VARCHAR2 (10),
job VARCHAR2 (9),
mgr NUMBER (4),
hiredate DATE,
sal NUMBER (7,2),
comm NUMBER (7,2),
deptno NUMBER (2),
CONSTRAINT fk_deptno

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 6

FOREIGN KEY (deptno)


REFERENCES dept (deptno) )

b) CREATE TABLE emp


(empno NUMBER(4),
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER (4),
hiredate DATE
sal NUMBER (7,2),
comm NUMBER(7,2),
deptno NUMBER(2)
CONSTRAINT fk_deptno
REFERENCES dept(deptno)
ON DELETE CASCADE )

d) CREATE TABLE dept


(deptno NUMBER, CONSTRAINT
pk_dept PRIMARY KEY,
dname VARCHAR2(9),
loc VARCHAR2(10) )
e) CREATE TABLE dept
(deptno NUMBER,
dname VARCHAR2(9),
loc VARCHAR2(10),
DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 7

CONSTRARINT pk_dept PRIMARY KEY (deptno) )


f) CREATE TABLE dept
(deptno NUMBER,
City NUMBER,
dname VARCHAR2(9),
loc VARCHAR2(10),
CONSTRARINT pk_dept PRIMARY KEY (deptno,city) )

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 8

TIPO DE DATOS
Longitud Precisin Descripcin
TIPOS DE DATOS:

Enteros:
BIT 1 byte 1 o 0
TINYINT 1 byte 3 Un entero sin signo entre 0 y 255.
SMALLINT 2 byte 5 Entre 32767 y 32767 (16 bits)
INT 4 byte 10 Entre 2147483647 y 2147483647
(32 bits)
Decimales:
DECIMAL 9 byte 18
NUMERIC 9 byte 18
Reales:
FLOAT 8 byte 53
REAL 4 byte 24
Datos Alfanumericos:
CHAR 1 hasta 8000 (ANSI)* Cadenas de longitud fija
NCHAR 1 hasta 4000 (Unicode)* Cadenas de longitud fija
VARCHAR 1 hasta 8000 (ANSI)* Cadenas de longitud variable
NVARCHAR 1 hasta 4000 (Unicode)* Cadenas de longitud variable
31
TEXT 2 Gb (ANSI)* Num. Max. Caracteres 2 1
(2,147,483,647)
30
NTEXT 2 Gb (Unicode)* Num. Max. Caracteres 2 1
(1,073,741,823)
Datos Temporales:
DATETIME 8
SMALLDATETIME 4

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 9

4.1.2 Borrado de una tabla


Ejemplo: DROP TABLE enfermo

DROP TABLE <Tabla> ;

Sintaxis del comando DROP TABLE

5.1.3 Modificacin de la estructura de una tabla


Sintaxis del comando ALTER TABLE

ALTER TABLE <tabla>

ADD

( <especific NOT NULL )


column>

DROP
,

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 10

AGREGAR COLUMNA A TABLA

Ejemplo:
ALTER TABLE enfermo
ADD (altura NUMBER(3,2))
MODIFICAR COLUMNA DE UNA TABLA

Ejemplo:
ALTER TABLE enfermo
ALTER COLUMN (altura NUMBER(4,2))
ELIMINAR UNA COLUMNA DE UNA TABLA
Ejemplo:
ALTER TABLE enfermo
DROP COLUMN
Las Columnas que se quitan son irrecuperables. Antes de eliminar
una columna, debe eliminar todos los ndices y las restricciones
basadas en esa columna.

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 11

AGREGA UNA RESTRICCION A LA TABLA.

Ejemplo:

ALTER TABLE NOMBRE_TABLA_DESTINO


ADD CONSTRAINT NOMBRE_CONSTRAINT
FOREIGN KEY (CAMPO_TABLA_DESTINO)
REFERENCES
NOMBRE_TABLA_ORIGEN(CAMPO_TABLA_DESTINO)

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 12

4.2 Insercin, eliminacin y actualizacin de datos


5.2.1 Insercin de datos
Se insertar un paciente en la tabla enfermo

INSERT INTO enfermo(inscripcion, apellido, direccion)


VALUES (63827, Prez P, Luz 8)
Sintaxis de la clusula INSERT

INSERT INTO <tabla>

( <columna> )

<bloque
selecc>
;

VALUES ( <valor> )

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 13

Ejemplos
1) INSERT INTO plantilla (hospital_cod, sala_cod,
empleado_no, apellido, funcion, turno, salario)
VALUES (22,2,12345, Garca J., Enfermero, M, 3000000)

2) INSERT INTO plantilla


VALUES (22,2, 12345, Garca J. Enfermero, M, 3000000)

3) INSERT INTO plantilla (empleado_no, apellido)


VALUES (12345, Garcia J.)

4) INSERT INTO varon


SELECT inscripcion, apellido, direccion, fecha_nac, s, nss
FROM enfermo
WHERE s = M

5) SQL INSERT INTO STUDENT


2 VALUES (S001, DOTTIE WILSON,
3 1600 PENN AVE, 10-OCT-65, FEMALE);

6) SQL INSERT INTO FACULTY


2 VALUES (L01, LEO JONES,MANAGEMENT,
3 MALE, 45000);
DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 14

7) SQL INSERT INTO STUDENT


2 (BIRTHDATE, STUDENT_NAME, STU_ID,
3 GENDER, ADDRESS)
4 VALUES (22-NOV-63, WINSTON NEELY,
5 S012, MALE, #1 BULLDOG DR.);

8) SQL INSERT INTO STUDENT VALUES


2 (S013, BONNY SIMPSON,NULL, NULL, FEMALE);

9) SQL INSERT INTO STUDENT


2 (STU-ID, STUDENT_NAME, GENDER)
3 VALUES (S013, BONNY SIMPSON, FEMALE);

5.2.2 Eliminacin de filas de una tabla

DELETE FROM <tabla> WHERE <Predi- ;


cado>

Sintaxis de la clusula DELETE

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 15

Ejemplos:
1) DELETE
FROM enfermo
WHERE inscripcion = 74385

2) DELETE FROM enfermo

5.2.3 Actualizacin de datos

UPDATE <Tabla>

<Column> = <Expresin>

SET

( <Column> ) = ( <Bloque )
Seleccin>

WHERE <predi ;
cado>

Sintaxis de la clusula UPDATE


DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 16

Ejemplos
1) UPDATE enfermo
SET direccion = Castellana 95
WHERE inscripcion = 74835

2) UPDATE enfermo
SET direccion = NULL
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

INSCRIPCION APELLIDO DIRECCION


63827 Ruiz P. Castellana 60

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 17

5.3 Transacciones

5.3.1 Sentencias COMMIT y ROLLBACK


Permiten consolidar y deshacer una transaccin.
Tipos de COMMIT:
Explcitos
Implcitos:
Toda instruccin DDL es hecha permanente (Commited)
implcitamente. Por ejemplo: CREATE DROP, etc.
Cuando se termina la sesin en forma normal en cualquier
ambiente (SQL *Plus, etc), hay un commit implcito.
Ejemplo de Commit:

SQL DELETE FROM emp


2 WHERE ename = LERNER
1 row deleted
SQL COMMIT;
Commit completed
Ejemplo de Rollback:

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 18

SQLUPDATE emp
2 SET job = SALESMAN, deptno = 30
3 WHERE ename = JONES;
1 row updated

SQL ROLLBACK;
Rollback completed

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 19

COMMIT

INSE

INSE

DELE
INSE

UPD

UPD

COMMIT
Concepto de transaccin

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 20

Ejemplo de Rollback hasta el Savepoint:


SQL INSERT INTO dept
2 VALUES (70, PERSONNEL, TAHITI),
1 fila creada

SQL SAVEPOINT A;
Savepoint creado.

SQL INSERT INTO dept


2 VALUES (80,EDUCATION,MAUI);
1 fila creada

SQL SAVEPOINT B;
1 savepoint creado.

SQL UPDATE dept


2 SET loc = KAUAI
3 WHERE deptno = 80;
1 fila actualizada

SQL ROLLBACK TO B;

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 21

Rollback completo.

5.4 Consulta de los datos: Instruccin SELECT


Formato General:

SELECT...
FROM...
WHERE...
GROUP BY...
HAVING...
ORDER BY...

Formato Bsico:

SELECT Ri1.A1,...,Rir.Ar
FROM R1,.....,RK
WHERE

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 22

SELECT <expr_ FROM


columna> <Tabla>

WHERE <Predicado>

<expr_
GROUP BY columna>

HAVING <Predicado>

<expr_ ASC
ORDER BY columna> ;

DESC

Sintaxis general de la instruccin SELECT

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 23

SELECT Sirve para elegir ciertas columnas o valores


derivados de ellas.
FROM Especifica una lista de tablas.
WHERE Los valores de los campos especificados deben
cumplir una o varias condiciones, por cada fila de la
tabla.
ORDER BY Especifica el criterio de ordenacin basado en los
valores de los datos recuperados o de otros derivados
de ellos.

Seleccin a nivel de fila

Ejemplo:
SELECT apellido, direccin
FROM enfermo
WHERE s = F
ORDER BY apellido

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 24

SELECT <expr_
columna>

FROM <Tabla>

WHERE <Predicado>

<expr_ ASC
ORDER BY ;
columna>

DESC

Sintaxis simplificada de la instruccin SELECT

Seleccin de columnas
Seleccin de todas las columnas de una tabla:
SQL> SELECT EMP_NO, APELLIDO, OFICIO, DIR,
FECHA_CONTR, SALARIO, COMISION, DEPT_NO
FROM EMP;
SQL SELECT *
FROM EMP;
DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 25

SQL SELECT DNOMBRE, DEPT_NO


FROM DEPT;

Clusula FROM
SELECT apellido nombres de Juan
FROM Juan.enfermo

SELECT enfermo.inscripcin, enfermo.apellido


FROM enfermo
WHERE inscripcin = 63827;

SELECT e.inscripcin, e.apellido


FROM enfermo e
WHERE inscripcin = 63827

Clusula WHERE
Operadores de comparacin:
Aritmticos: =, <, >
De caracteres: LIKE
Lgicos: IN
Operadores lgicos 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 = Garca)

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 26

Clusula ORDER BY
ORDER BY sala_cod, hospital_cod DESC
ORDER BY mod(empleado_no, 6)
ORDER BY 2

SELECT DISTINCT
SELECT DISTINCT funcin SELECT DISTINCT funcin, turno

Select funcion Select funcion, turno


from plantilla from plantilla
Enfermero
Enfermero Enfermero
Enfermero TT
Enfermera
Enfermera Enfermera
Enfermera TT
Interno
Interno Interno
Interno TT
Enfermero Enfermero
Enfermero MM
Enfermera Enfermera
Enfermera MM
Interno Interno
Interno MM
Enfermero Enfermero
Enfermero NN
Enfermero Enfermero
Interno TN
Interno Interno N
Enfermero Enfermero T

FROM plantilla FROM plantilla

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 27

5.5 Operadores
5.5.1 Operadores aritmticos: + - * /

Ejemplo:
SELECT col1 * col2, col1 col2
FROM tabla1
WHERE col1 + col2 = 34
5.5.2 Operadores de Comparacin
a) Comparacin general:
= != > >= < <=
Ejemplos:
SELECT salario, comisin
FROM vendedor
WHERE comisin > salario

SELECT apellido, direccin


FROM enfermo
WHERE apellido > A AND apellido < B

b) Comparacin de cadenas de caracteres


[NOT] LIKE
% cualquier cadena de 0 ms caracteres
_ cualquier carcter
DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 28

Ejemplos:
LIKE Director
LIKE M%
LIKE %X%
LIKE _ _ M
LIKE N_
LIKE _R%
c) Comparacin lgica
[NOT] BETWEEN valor_1 AND valor_2
[NOT] IN (lista_de_valores_entre_comas)
IS [NOT] NULL
<general> ANY
<general> ALL

= ANY es equivalente a IN
!= ANY es equivalente a NOT IN

Ejemplos:
SELECT apellido, salario
FROM plantilla
WHERE salario BETWEEN 1000000 AND 2000000
DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 29

SELECT apellido, fecha_nac


FROM enfermo
WHERE apellido BETWEEN A AND B AND
fecha_nac BETWEEN 01-JAN-35 AND 31-
DEC-45

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)

5.6 Funciones
Existen los siguientes tipos de funcin:
Aritmticas
De cadenas de caracteres
De conversin
De grupo
Otras funciones
DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 30

5.6.1 Funciones aritmticas


ABS (n) Valor absoluto de n
CEIL (n) Entero inmediatamente superior o igual a n
FLOOR (n) Entero inmediatamente inferior o igual a n
MOD (m,n) Resto de dividir m entre n
SELECT MOD(inscripcion, nss)
FROM enfermo

POWER (m,n) m elevado a la potencia de n


SELECT POWER (inscripcion, 2) Potencias,
inscripcin FROM enfermo

ROUND (n, [,m]) n redondeado a m decimales


SELECT ROUND(1.5634,1)
FROM dual

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 31

4.6.2 Manipulacin de datos de conjuntos y funciones de


conjuntos

<expr_
SELECT columna> FROM <Tabla>

WHERE <Predicado>

GROUP BY <expr_
columna>

HAVING <Predicado>

ORDER BY <expr_ ASC ;


columna>

DESC

Sintaxis del select para la seleccin de conjuntos


DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 32

a) Seleccin de conjuntos
La evaluacin de las clusulas en tiempo de ejecucin se efecta
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 } )
Nmero de veces que expr evala algn dato con valor no nulo.
La opcin * cuenta todas las filas seleccionadas.

MAX(expr)
Mximo valor de expr.

MIN(expr)

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 33

Mnimo valor de expr.


STDDEV(expr)
Desviacin estndar 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
HAVING AVG(salario) > 200000

SELECT MAX(salario), MIN(salario),


MAX(salario) MIN(salario)
FROM plantilla

SELECT SUM(salario) / COUNT(salario)


DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 34

FROM plantilla
SELECT COUNT(DISTINCT funcion)
FROM plantilla

SELECT sala_cod, AVG(salario), COUNT(*)


FROM plantilla
WHERE hospital_cod = 22
GROUP BY sala_cod
HAVING avg(SALARIO) >= 170000
ORDER BY sala_cod

Los valores nulos no participan en el clculo de las funciones de


conjuntos
Por lo tanto: SELECT AVG(salario)
y SELECT SUM(salario) / COUNT(*)
no siempre dan el mismo resultado.

a) Funciones relacionadas con la fecha


b.1) El tipo DATETIME
- El formato del tipo DATETIME es: DD-MON-YY
- El tipo de dato DATETIME contiene realmente la fecha y la hora.

- La funcin GETDATE() entrega la fecha y la hora actual2) Operaciones, valores numricos y


funciones
DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 35

NVL(expr1, expr2)
Funcin NVL:

Modo de operacin: Se evala expr1; si expr1 es no nula retorna


expr1, o si no retorna expr2.

Ejemplos:
1. Despliegue el nombre, trabajo, salario, comisin y sueldo total de un
empleado, para los empleados del departamento 30.
SQL SELECT ename, job, salary, comm,
ISNULL(sal, 0) + ISNULL(comm, 0)
FROM emp
WHERE deptno = 30;

ENAME JOB SAL COMM NVL(SAL, 0) + NVL(COMM,0)


ALLEN SALESMAN 1600 300 1900
WARD SALESMAN 1250 500 1750
JONES SALESMAN 2975 2975
MARTIN SALESMAN 1250 1400 2650
BLAKE MANAGER 2850 2850
SCOTT SALESMAN 3150 3150
TURNER SALESMAN 1500 0 1500
JAMES CLERCK 950 950

Ejemplo

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 36

Desplegar nombre, salario, comisin y salario total para todos los


vendedores ordenados por salario total.
SQL SELECT ename, sal, comm, 12*(sal + comm) TOTAL
FROM emp
WHERE job = SALESMAN
Order by 12*(sal + comm ) total;
ENAME SAL COMM TOTAL
TURNER 1500 0 18000
WARD 1250 500 21000
ALLEN 1600 300 22800
MARTIN 1250 1400 31800
JONES 2975
SCOTT 3150

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 37

4.7 Combinaciones de mltiples tablas

Una instruccin Select que trabaja con mltiples tablas se puede


clasificar como:

COMBINACIONES
SUBCONSULTAS

Combinaciones (JOINS)
Utilizadas para recuperar datos desde ms de una tabla.

Subconsultas (Sub-queries)
Utilizadas para generar preguntas subsidiarias necesitadas por la
consulta principal.

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 38

4.7.1 Combinaciones (JOINS)

Join de tablas
Ejemplo:
SELECT *
FROM LABORATORIO

Server

EMP DEP

ENAME DEPTNO DEPTNO LOC


SMITH 20 20 DALLAS
ALLEN 30 30 CHICAGO
WARD 30 30 CHICAGO
JONES 20 20 DALLAS
MARTIN 30 30 CHICAGO
BLAKE 30 30 CHICAGO
CLARK 10 10 NEW YORK
SCOTT 20 20 DALLAS
KING 10 10 NEW YORK
TURNER 30 30 CHICAGO
ADAMS 20 20 DALLAS
JAMES 30 30 CHICAGO
FORD 20 20 DALLAS

LAB_NO NOMBRE DIRECCION TELEFONO


DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 39

16 Atcom Gran va, 14 532-4433


42 Clini Castellana, 55 447-6484
56 Alpa Juan Bravo, 18 929-9611
84 Nucro Alcal, 62 368-9793

SELECT *
FROM test;
INSCRIPCION LAB_NO TCO RES
10995 16 ABC POS
14024 42 PTY NEG
10995 16 BCD NEG

SELECT l.lab_no, l.nombre, l.telefono, t.lab_no, t.tcode,


t.inscripcin, t.resultado
FROM laboratorio l, test t;

LAB_NO NOMBRE TELEFONO LAB_NO TCO INSCRIPCION RESULTADO


16 Atcon 532-4453 16 ABC 10995 POS
42 Clini 447-6448 16 ABC 10995 POS
56 Alpha 929-9611 16 ABC 10995 POS
84 Nucro 368-9793 16 ABC 10995 POS
16 Atcon 532-4453 42 PTY 14024 NEG
42 Clini 447-6448 42 PTY 14024 NEG
56 Alpha 929-9611 42 PTY 14024 NEG
84 Nucro 368-9793 42 PTY 14024 NEG
16 Atcon 532-4453 16 BCD 10995 NEG
42 Clini 447-6448 16 BCD 10995 NEG
56 Alpha 929-9611 16 BCD 10995 NEG
84 Nucro 368-9793 16 BCD 10995 NEG

SELECT l.lab_no, l.nombre, l.telefono, t.lab_no, t.tcode,


t.inscripcion, t.resultado

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 40

FROM laboratorio l, test t


WHERE l.lab_no = t.lab_no;

LAB_NO NOMBRE TELEFONO LAB_NO TCO INSCRIPCION RESULTADO


16 ATCON 532-4453 16 ABC 10995 POS
42 CLINI 447-6484 42 PTY 14024 NEG
16 ATCON 532-4453 16 BCD 10995 NEG

SELECT l.nombre, l.telefono t.tcode, t.resultado, e.apellido


FROM laboratorio l, test t, enfermo e
WHERE l.lab_no = t.lab_no AND t.inscripcion = e.inscripcion;

NOMBRE TELEFONO TCODE RESULTADO APELLIDO


Atcon 532-4453 ABC NEG Lagua, M.
Atcon 532-4453 BCD NEG Lagua, M.
Clini 447-6448 PTY NEG Fernndez, M.

Sintaxis de un Join:
SELECT columnas de las tablas citadas en la clusula from
FROM tabla1, tabla2
WHERE Tabla1.columna = Tabla2.columna
Ejemplo:
SELECT apellido, loc
DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 41

FROM emp, dept


WHERE apellido LIKE %M

APELLIDO LOC
MARTIN SEVILLA
MUOZ SEVILLA
MARTIN MADRID
MUOZ MADRID
MARTIN BARCELONA
MUOZ BARCELONA
MARTIN BILBAO
MUOZ BILBAO

SELECT apellido, oficio, emp_no, dnombre, loc


FROM emp, dept
WHERE emp.dept_no = dept.dept_no;
APELLIDO OFICIO EMP_NO DNOMBRE LOC
CEREZO DIRECTOR 7782 CONTABILIDAD SEVILLA
MUOZ EMPLEADO 7934 CONTABILIDAD SEVILLA
REY PRESIDENTE 7839 CONTABILIDAD SEVILLA
ALONSO EMPLEADO 7876 INVESTIGACION MADRID
SANCHEZ EMPLEADO 7369 INVESTIGACION MADRID
JIMENEZ DIRECTOR 7566 INVESTIGACION MADRID
GIL ANALISTA 7788 INVESTIGACION MADRID
FERNANDEZ ANALISTA 7902 INVESTIGACION MADRID
ARROYO VENDEDOR 7499 VENTAS BARCELONA
MARTIN VENDEDOR 7654 VENTAS BARCELONA
TOVAR VENDEDOR 7844 VENTAS BARCELONA
JIMENO EMPLEADO 7900 VENTAS BARCELONA
NEGRO DIRECTOR 7698 VENTAS BARCELONA
Join de una tabla con la misma tabla
Quin gana ms que su jefe?
DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 42

NOMBRE DE LA TABLA: PERSONNEL


FAC_ID FACULTY-NAME BOSS-ID TITLE-OR-RANK SALARY
D02 GREG DAVIS PRESIDENT $80.000
M01 SCOTT MIZE D02 DEAN $60.000
S02 LARRY SIMPSON D02 DEAN $44.000
N02 NICK NORMAN S02 DEPATMENT CHAIR $50.000
C021 JAN CARNER M01 DEPATMENT CHAIR $42.000
H01 BYRON HOGAN S02 DEPATMENT CHAIR $43.000
F01 LEE FALDO S02 DEPATMENT CHAIR $45.000
J01 RAYMOND J. JOHNSON F01 PROFESSOR $40.000
S01 WENDY SWIMMER F01 PROFESSOR $45.000
D01 AMY DANCER F01 ASOCC PROFESSOR $34.500
J02 BOB JONES C01 ASOCC PROFESSOR $35.000
N01 JACK NELSON N02 INSTRUCTOR $28.000
N03 BEN NELSON H01 ASSIT PROFESSOR $30.000
S03 MARK STEWART H01 ASSIT PROFESSOR $30.500
C02 PAT CARNER H01 PROFESSOR $44.000

Solucin:
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;

FACULTY-NAME FAC_SAL BOSS_NAME BOSS_SAL


NICK NORMAN $50.000 LARRY SIMPSON $44.000
LEE FALDO $45.000 LARRY SIMPSON $44.000
PAT CARNER $44.000 BYRON HOGAN $43.000

Ejercicio Propuesto:
Nombre de cada empleado y el nombre de su jefe directo
DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 43

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

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 44

4.8.2 Subconsultas
Las subconsultas seleccionan filas desde una tabla con una
condicin que depende de valores de otra consulta.

Sintaxis SELECT

SELECT....

FROM...

WHERE...
Sintaxis SELECT
(SELECT...
FROM...
WHERE...);

Sintaxis de una subconsulta

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 45

Las subconsultas pueden aparecer en la clusula WHERE de las


siguientes sentencias:
SELECT
INSERT
UPDATE
DELETE

Ejemplo:
SELET apellido
FROM plantilla
WHERE salario > (SELECT AVG(salario)
FROM plantilla)
)

Subconsultas que devuelven un solo valor


Presentar los nombres de los empleados que tienen el mismo
trabajo que JIMENEZ.

SELECT apellido
FROM emp
WHERE oficio = (SELECT oficio
FROM emp
DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 46

WHERE apellido = JIMENEZ)


Subconsultas que devuelven ms de un valor y se ha de
comparar con uno de ellos
Informacin sobre los empleados que ganan ms 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

SELECT *
FROM emp
WHERE salario > ALL
(SELECT salario
FROM emp
WHERE dept_no = 30)

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 47

Subconsultas que devuelven una lista de valores


Conseguir los nombres de los empleados del departamento 20
cuyo trabajo sea idntico al de cualquiera de los empleados del
departamento de ventas
SELECT apellido
FROM emp
WHERE dept_no = 20 AND oficio IN (SELECT oficio
FROM emp
WHERE dept_no =
(SELECT dept_no
FROM dept
WHERE dnombre = VENTAS) )
APELLIDO
JIMENEZ
ALONSO
SANCHEZ

Mostrar todos los empleados que trabajan en Madrid o


Barcelona.
SELECT apellido, oficio, fecha_contr, dept_no, salario
FROM emp
WHERE dept_no IN
(SELECT dept_no
FROM dept
WHERE loc IN (MADRID, BARCELONA)
)
ORDER BY apellido;
DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 48

APELLIDO OFICIO FECHA_ALT DEPT_NO SALARIO


ALONSO EMPLEADO 03-MAY-87 20 143000
ARROYO VENDEDOR 20-FEB-81 30 208000
FERNANDEZ ANALISTA 03-DEC-81 20 390000
GIL ANALISTA 30-MAR-87 20 390000
JIMENEZ DIRECTOR 02-APR-81 20 386750
JIMENO EMPLEADO 03-DEC-81 30 123500
MARTIN VENDEDOR 28-SEP-81 30 162500
NEGRO DIRECTOR 01-MAY-81 30 370500
SALA VENDEDOR 22-FEB-81 30 162500
TOVAR VENDEDOR 08-SEP-81 30 195000

5.9 EXISTS, el cuantificador existencial de SQL


Uso del cuantificador existencial EXISTS

SELECT
FROM
WHERE

[NOT]
EXISTS SELECT
FROM
WHERE

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 49

La expresin EXISTS (SELECT...) toma el valor verdadero


si y slo si el resultado de evaluar SELECT... no es vaco, es
decir, si y slo si existe al menos un registro resultante del
SELECT.

Ejemplos:
Se trabajar con la base de datos de Partes-Proveedores,
constituida por las tablas: S, P, SP.

S S# NomProv Estado Ciudad


S1 Salazar 20 Londres
S2 Perez 10 Pars
S3 Bernal 30 Pars
P P# NomParte Color Peso Ciudad
P1 Tuerca Rojo 12 Londres
P2 Perno Verde 17 Pars
P3 Tornillo Rojo 17 Roma
SP S# P# Cantidad
S1 P1 300
S1 P2 200
S2 P1 300
S3 P2 200

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 50

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
DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 51

P# = P.P#))

4.9 Vistas
4.9.1 Concepto de vista

EMP_NO APELLIDO OFICIO


7782 CEREZO DIRECTOR
7839 REY PRESIDENTE 7839 09-JUN-81 318500 10

7934 MUOZ EMPLEADO 17-NOV-81 650000 10


7782 23-ENE-82 169000 10

7566 JIMENEZ DIRECTOR 7839 02-ABR-81 386750 20


7902 FERNANDEZ ANALISTA 7566 03-DEC-81 390000 20
7369 SANCHEZ EMPLEADO 2902 17-DEC-80 104000 20
7876 ALONSO EMPLEADO 7788 03-MAY-87 143000 20
7788 GIL ANALISTA 7566 30-MAR-87 390000 20
7499 ARROYO VENDEDOR 7698 20-FEB-81 208000 39000 30
7521 SALA VENDEDOR 7698 22-FEB-81 162500 65000 30
7654 MARTIN VENDEDOR 7698 28-SEP-81 162500 182000 30
7698 NEGRO DIRECTOR 7839 01-MAY-81 370500 30
7844 TOVAR VENDEDOR 7698 08-SEP-81 195000 30
7900 JIMENO EMPLEADO 7698 03-DEC-81 123500 30

Una VISTA es una ventana a travs de la que se puede ver o


cambiar informacin de una tabla.
Tiene la misma estructura que una tabla: filas y columnas.
No contiene datos.
DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 52

Las vistas se tratan de forma semejante a una tabla.


4.9.2 Creacin de una vista
Sintaxis del comando CREATE VIEW
CREA VIEW <vista>

( <column )

AS <bloque ;
selecc>

Ejemplo:
CREATE VIEW pagos (NOMBRE, SAL_MES,
SAL_AO, DEPT_NO)
AS
SELECT APELLIDO, SALARIO,
SALARIO*12, DEPT_NO
FROM emp;

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 53

Ejemplo: Cambiar los nombres de los atributos a travs de


una vista
SQL CREATE VIEW TEACHERS2 (FID, NAME, DEPT, SEX)
2 AS SELECT FAC_ID, FACULTY_NAME,
3 DEPARTMENT, GENDER FROM FACULTY;
View created.

Ejemplo: Especificar valores calculados en la vista


SQL CREATE VIEW DOUBLE_SAL (NAME, SAL) AS
2 SELECT FACULTY_NAME, SQRT(SALARY*2)
3 FROM FACULTY;
View created.
5.10.3 Borrado de una vista

Ejemplo: Eliminar la vista TEACHERS.

SQL DROP VIEW TEACHERS;

5.11 Indices
Los ndices son estructuras opcionales asociadas con tablas,
usados para agilizar la ejecucin de la consulta y/o garantizar la
unicidad.

DOCENTE: WILFREDO SOLER J.


OTOO - 2006 4. 54

Ejemplo de un ndice

El servidor ORACLE accesa a los datos de la tabla en una de dos


formas:
FULL TABLE SCAN (secuencial)
INDEX (selectivo)
Caractersticas de las columnas para indexar

C SM

ADAMS . rowid CLARK rowid KING rowid SMITH rowid


ALLEN rowid FORD rowid MARTIN rowid TURNER rowid
BLAKE - rowid
DOCENTE: JAMES J.rowid
WILFREDO SOLER MILLER rowid WARD - rowid
JONES - rowid SCOTT - rowid
OTOO - 2006 4. 55

La columna es frecuentemente usada en la clusula


WHERE
Cada valor es nico (mejor caso)
Amplio rango de valores
Muchos nulos / relativamente pocos valores

Creacin de ndices

SQL CRETE UNIQUE INDEX i_empn_ename


ON emp (empno);
Index created

Ejemplo:
Crear un ndice simple en la columna ENAME
Indice usado:

SQL CREATE INDEX i_emp_ename


ON emp (ename);
Index created.
SQL SELECT *
FROM emp
WHERE ename = SMITH;
DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 56

DOCENTE: WILFREDO SOLER J.

Vous aimerez peut-être aussi