Académique Documents
Professionnel Documents
Culture Documents
4.1 SQL
SQL considera cuatro tipos de comandos:
4.1 Tablas
4.1.1 Creacin de una tabla
<nombre
CREATE TABLE tabla>
Table created
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
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
ADD
DROP
,
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.
Ejemplo:
( <columna> )
<bloque
selecc>
;
VALUES ( <valor> )
Ejemplos
1) INSERT INTO plantilla (hospital_cod, sala_cod,
empleado_no, apellido, funcion, turno, salario)
VALUES (22,2,12345, Garca J., Enfermero, M, 3000000)
Ejemplos:
1) DELETE
FROM enfermo
WHERE inscripcion = 74385
UPDATE <Tabla>
<Column> = <Expresin>
SET
( <Column> ) = ( <Bloque )
Seleccin>
WHERE <predi ;
cado>
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
5.3 Transacciones
SQLUPDATE emp
2 SET job = SALESMAN, deptno = 30
3 WHERE ename = JONES;
1 row updated
SQL ROLLBACK;
Rollback completed
COMMIT
INSE
INSE
DELE
INSE
UPD
UPD
COMMIT
Concepto de transaccin
SQL SAVEPOINT A;
Savepoint creado.
SQL SAVEPOINT B;
1 savepoint creado.
SQL ROLLBACK TO B;
Rollback completo.
SELECT...
FROM...
WHERE...
GROUP BY...
HAVING...
ORDER BY...
Formato Bsico:
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, direccin
FROM enfermo
WHERE s = F
ORDER BY apellido
SELECT <expr_
columna>
FROM <Tabla>
WHERE <Predicado>
<expr_ ASC
ORDER BY ;
columna>
DESC
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
Clusula FROM
SELECT apellido nombres de Juan
FROM Juan.enfermo
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)
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
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
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
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
<expr_
SELECT columna> FROM <Tabla>
WHERE <Predicado>
GROUP BY <expr_
columna>
HAVING <Predicado>
DESC
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)
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
FROM plantilla
SELECT COUNT(DISTINCT funcion)
FROM plantilla
NVL(expr1, expr2)
Funcin NVL:
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;
Ejemplo
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.
Join de tablas
Ejemplo:
SELECT *
FROM LABORATORIO
Server
EMP DEP
SELECT *
FROM test;
INSCRIPCION LAB_NO TCO RES
10995 16 ABC POS
14024 42 PTY NEG
10995 16 BCD NEG
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
APELLIDO LOC
MARTIN SEVILLA
MUOZ SEVILLA
MARTIN MADRID
MUOZ MADRID
MARTIN BARCELONA
MUOZ BARCELONA
MARTIN BILBAO
MUOZ BILBAO
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;
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
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...);
Ejemplo:
SELET apellido
FROM plantilla
WHERE salario > (SELECT AVG(salario)
FROM plantilla)
)
SELECT apellido
FROM emp
WHERE oficio = (SELECT oficio
FROM emp
DOCENTE: WILFREDO SOLER J.
OTOO - 2006 4. 46
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)
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.
SELECT NomProv
FROM S
WHERE EXISTS
(SELECT *
FROM SP
WHERE S# = S.S# AND P# = P2)
P# = P.P#))
4.9 Vistas
4.9.1 Concepto de 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;
5.11 Indices
Los ndices son estructuras opcionales asociadas con tablas,
usados para agilizar la ejecucin de la consulta y/o garantizar la
unicidad.
Ejemplo de un ndice
C SM
Creacin de ndices
Ejemplo:
Crear un ndice simple en la columna ENAME
Indice usado: