Escolar Documentos
Profissional Documentos
Cultura Documentos
Clase BD
Los lenguajes formales proporcionan una notación concisa para representar consultas.
Sin embargo los sistemas comerciales de BD requieren un lenguaje de consulta más
“amigable para el usuario”.
Algunos de estos lenguajes son: SQL, QBE y Quel.
QBE (Query By Example) está basado en el cálculo relacional de dominios.
Quel está basado en el cálculo relacional de tuplas.
SQL (Structured Query Languaje) usa una combinación de construcciones del álgebra y
del cálculo relacional.
Aunque estos lenguajes se les referencia como “lenguajes de consulta”, SQL, QBE y
Quel tienen muchas otras capacidades además de consultar una BD. Estas incluyen
características para definir la estructura de los datos, para modificarlos y para especificar
restricciones de seguridad.
- DML inmerso: La forma inmersa de SQL está diseñada para usar dentro de los
lenguajes de programación de propósito general, tales como Cobol, Pascal, C ...
SQL es usado para interactuar con una base de datos relacional, está clasificado como
el lenguaje estándar para la administración de los datos en estas bases de datos.
Es un archivo plano con extensión sql, en el cual se almacenan las instrucciones SQL
para acceder a los datos de la base de datos.
La característica fundamental es que no posee formato; puede ser creado con cualquier
editor de archivos planos: Editor del DOS, Word, Block de Notas, Vi.
Sentencias SQL
Son las instrucciones con las cuales el usuario (Administrador de datos, Administrador de
la base de datos, Programador, usuario final) realiza la comunicación entre él y la base
de datos.
Tipos de datos.
Para SQL/plus, existen varios tipos de datos, pero trabajaremos básicamente con 3
(Tres) tipos de datos: Varchar2, Number y Date.
Nombre_variable varchar2(n).
Number: Almacena datos tipo numérico, incluyendo valores con punto flotante. El
formato general es:
Date: Almacena datos tipo fecha, el tamaño del dato es fijo, no hay que definirlo. El
Formato general es:
Nombre_variable date.
Operadores Aritméticos
Suma “+”
Resta “-“
Multiplicación “ * “
División “/”
Operadores Relacionales.
Igual a “=“
Mayor que “>”
José Ignacio Botero O. 2005 60
Margarita María Hincapié V.
Mayor o igual a “ >= “
Menor que “<“
Menor o igual “ <= “
Diferente “ =! “
Operadores Lógicos
AND
OR
NOT
Otros Operadores
IN
NOT
BETWEEN
LIKE
Definición de datos
El DDL de SQL permite crear varias estructuras de datos tales como: Relaciones o
tablas, índices, vistas, secuencias.
Una relación recién creada está inicialmente vacía. La orden Insert puede usarse para
cargar datos en la relación.
Permite establecer la integridad de los datos en la base de datos. Hay varios tipos:
José Ignacio Botero O. 2005 61
Margarita María Hincapié V.
- NOT NULL (NN): especifica que el campo no puede tener valor nulo.
- UNIQUE (UK): indica que el campo debe tener valores únicos para todas las filas de la
tabla.
- PRIMARY KEY (PK): quien identifica de una manera única cada fila de una tabla.
- REFERENCES (FK): establece y refuerza la relación existente entre una clave foránea
y la clave primaria de una tabla referenciada.
Sintaxis:
Create table nombre_tabla
(nombre_campo1 tipo_datos
Constraint nombre_constraint tipo_constraint,
nombre_campo2 tipo_dato
Constraint nombre_constraint tipo_constraint
…
);
Ejemplo de uso, corresponde al cuadro dado a continuación:
Tabla: Asociados
columnas id nombre_a telefono cod_c
tipo clave PK FK
nulos/unico NN, UK NN NN
tabla_de_fk Carreras
col_ref_fk código
tipo_dato num char char num
long_max 8 30 10 3
Si el tamaño de una columna se va a cambiar a una longitud menor, la tabla debe estar
vacía.
Ej.: Otra forma de definir las claves primarias y foráneas con la instrucción ALTER TABLE
a la tabla Asociado, seria:
Nota: Cuando se crea un objeto tipo índex con parámetro unique, es equivalente a
definir una clave primaria.
Instrucción Drop.
Ejemplos:
Esta orden no sólo suprime todas las tuplas en r sino también el esquema de r.
Sentencia SELECT
La operación más común en SQL es la consulta de datos para recuperar información. La
estructura básica de esta instrucción en SQL, está compuesta de tres cláusulas:
SELECT (elegir)
FROM (de) y
WHERE (donde).
Ejemplo:
ID_DEPART NOMBRE_DEPART
10 División de Sistemas
20 Ensamble
30 Pintura
Resultado:
Resultado:
ID_EMP NOMBRE_EMP
---------- ----------------------------------------
1011 Pedro
1012 Juan
1013 Pedro
1014 Jorge
1015 Valentina
1016 Cristina
Resultado:
COUNT(*)
---------6
Seleccione los números de departamento en los que están adscritos los empleados
SELECT Dep._emp
FROM empleados
Resultado:
DEPART_EMP
---------- -------------
10
20
30
10
10
20
DEPART_EMP
---------- -------------
10
20
30
Sentencia Where:
Resultado:
ID_EMP NOMBRE_EMP NOMBRE_DEPART
---------- ---------------------------------------- ----------------------
1011 Pedro División de Sistemas
1012 Juan Ensamble
1013 Pedro Pintura
1014 Jorge División de Sistemas
1015 Valentina División de Sistemas
1016 Cristina Ensamble
Resultado:
COUNT(EMP.ID_EMP) NOMBRE_DEPART
----------------- ----------------------------------------
3 División de Sistemas
2 Ensamble
1 Pintura
Resultado:
Nombre_depart avg(emp.salario)
División de Sistemas 1066666
Ensamble 1100000
Pintura 1100000
Sentencia Having
A veces es útil declarar una condición que se aplica a los grupos más que a las tuplas.
Por Ej. Podríamos estar interesados únicamente en seleccionar los departamentos en los
que el saldo promedio de salarios sea menor que 1100000.
Esta condición no se aplica a una tupla, sino a cada grupo construído mediante la
cláusula group by. Para expresar una consulta de este tipo, se usa la cláusula having de
SQL. Los predicados de la cláusula Having se aplican después de la formación de
grupos, por lo que pueden utilizarse funciones de grupo.
La consulta expresada en SQL, sería:
Resultado.
Nombre_depart avg(emp.salario)
Resultado:
COUNT(EMP.ID_EMP) NOMBRE_DEPART
-------------------------------- ----------------------------------------
3 División de Sistemas
2 Ensamble
Sentencia Order By
SQL ofrece al usuario cierto control sobre el orden en el que se van a presentar las
tuplas en una relación. La cláusula order by hace que las tuplas en el resultado de una
consulta aparezcan en un orden determinado.
Resultado:
COUNT(EMP.ID_EMP) NOMBRE_DEPART
-------------------------------- ----------------------------------------
2 Ensamble
3 División de Sistemas
Por defecto SQL lista los elementos en orden ascendente (asc). Si queremos en orden
descendente especificamos desc después del nombre del campo. Además el
ordenamiento puede hacerse sobre múltiples atributos.
Resultado:
ID_EMP NOMBRE_EMP DEPART_EMP SALARIO
---------- ---------------------------------- ------------------------------------------
1014 Jorge 10 1200000
1012 Juan 20 1200000
1013 Pedro 30 1100000
1016 Cristina 20 1000000
1011 Pedro 10 1000000
1015 Valentina 10 1000000
Resultado:
NOMBRE SALARIO
------------------------- ----------------
Juan 100000
Pedro 100000
Luis 100000
Operadores aritméticos
En los siguientes ejemplos se muestra la forma de aplicar cada uno de los operadores.
Resultado:
SALARIO+SALARIO
---------------------
2000000
2400000
2200000
2400000
2000000
2000000
Resultado:
(SALARIO+SALARIO)-100000
-----------------------------------------------
1900000
2300000
2100000
2300000
1900000
1900000
Resultado:
Resultado:
(SALARIO*2)/5
----------------
400000
480000
440000
480000
400000
400000
Operadores Relacionales
Respuesta:
Seleccionar todos los registros que tengan salario mayor que $1,000,000.
Respuesta:
Seleccionar todos los registros que tengan salario mayor o igual que $1,000,000.
Operadores Lógicos
Seleccionar todos los registros que tengan salario mayor que $1,000,000 y menor a
$2,000,000.
Select * from empleados where salario > 1000000 and salario <2000000;
Resultado:
Otros Operadores
IN
Resultado:
NOT IN
Resultado:
BETWEEN
Resultado:
LIKE
Resultado:
ID_EMP NOMBRE_EMP DEPART_EMP SALARIO
------------ ---------------------- --------------------- ----------------------
1011 Pedro 10 1000000
1013 Pedro 30 1100000
Utilización de Funciones
Son consultas contenidas dentro de la cláusula WHERE de otra consulta. Las consultas
anidadas (subconsultas) pueden retornar un solo valor, múltiples valores, una o más
columnas.
Sintaxis:
Si la subconsulta retorna:
Para ilustrar esto, considere la consulta: “Seleccionar el nombre de los empleados cuyo
salario sea igual al salario de los empleados del departamento 10”.
Solución:
Resultado:
Ejercicio: Seleccionar a todos los empleados que tienen un salario igual al salario del
empleado Jorge.
Ej.: Seleccionar los nombres de todos los empleados que tienen un salario mayor al de
algún empleado del departamento 10.
Select depart_emp,salario,nombre_emp
From empleados
Where salario >any (SELECT salario
FROM empleados
WHERE dept_emp = 10)
Resultado:
La subconsulta genera el conjunto de todos los valores de salario del departamento 10.
La comparación >any es verdadera si el valor de salario de la tupla es mayor que al
menos un miembro del conjunto de todos los valores de salario del departamento 10.
SQL también admite las comparaciones <all, <=all, >=all, =all, <>all.
Si la consulta se modifica: “Seleccionar los nombres de todas los empleados que
tienen un salario mayor que todos los salarios del departamento 10”.
SELECT depart_emp,salario,nombre_emp
FROM empleados
WHERE salario >all (SELECT salario
FROM empleados
WHERE dept_emp = 10)
Los conectores IN, =any, >all, etc. nos permiten probar un único valor con los miembros
de un conjunto completo.
Nota: La(s) columna(s) retornadas por la subconsulta deben coincidir en número y tipo
con las columnas con las cuales ellas son comparadas.
Para este tipo de operaciones se deben cumplir cierto tipo de restricciones sobre las
consultas que ellos operan:
Unión
El operador UNION retorna sin repetir, las filas comunes y no comunes a todas las
consultas.
Ejemplo:
Resultado:
DEPART_EMP
------------
10
20
30
Intersección
El operador INTERSECT retorna aquellas filas que sean comunes en todas las
consultas.
Ejemplo:
Resultado:
DEPART_EMP
------------
10
20
30
Minus
El operador MINUS retorna aquellas filas que existen en la primera consulta y que
además no existen en la segunda consulta.
Ejemplo:
Resultado:
Resultado:
ID_DEPART
-----------------
40
Sintaxis:
Una orden DELETE opera sobre una sola relación. Si queremos eliminar tuplas de varias
relaciones debemos usar una orden DELETE para cada relación. La cláusula WHERE
puede ser tan compleja como la de un SELECT o podemos tener una cláusula WHERE
vacía.
Insert into empleados select identif,nombre from empl where estado = ‘1’;
Sintaxis:
Update nombre_tabla set campo1 = valor ó consulta,
campo2=valor ó exp
[where condicion];
así creada deja insertar y actualizar tuplas para la tabla empleados en cualquier
departamento.
Ej.: Crear una vista que contenga todas las columnas de la tabla empleados para el
departamento 20, utilizando la cláusula With check option.
CREATE VIEW emp_20
AS SELECT * FROM empleados
WHERE depart_emp = ‘20’;
WITH CHECK OPTION
NOTA: Se pueden actualizar e insertar datos a una tabla a través de una vista si ésta es
creada a partir de una tabla, pero no de un join de tablas.
Para saber cuál es el valor actual de una secuencia puedo averiguarlo siguiendo los
siguientes pasos:
1- SELECT nom_seq.NEXTVAL
FROM dual
2- SELECT nom_seq.CURRVAL
FROM dual