Lenguaje de Consulta de Datos SQL
Lenguajes de Datos
– DDL (Data Definition Language): Lenguaje de definición de datos, que comprende todas las instrucciones relativas a la definición de los elementos que componen una base de datos: creación de bases de datos, tablas, índices, etc.
– DML (Data Management Language): Lenguaje de manipulación de datos, se encarga del mantenimiento de los datos en la base de datos, permite actuar sobre las tablas de la base de datos, dando de alta nuevos valores, modificarlos o borrarlos. Incluye QL (Query Language): lenguaje de consulta, que se encarga de extraer información de las tablas de la base de datos, está formado por la instrucción SELECT.
– DCL (Data Control Language): Lenguaje de control de acceso a datos, se encarga de conceder y retirar permisos a usuarios sobre las bases de datos, tablas y columnas, también se encarga de los bloqueos o control de concurrencia entre usuarios.
Las instrucciones de SQL demandan una acción específica al DBMS, como crear una tabla, recuperar determinados datos, etc., y todas ellas tienen la misma estructura:
Relaciones entre Tablas
- RELACIÓN N:M: Tabla con todas las claves primarias
- RELACIÓN 1:N: Se propaga la clave de la máxima
- RELACIÓN 1:1: Se unen en una tabla común
- 1.1 y 0.1 Propagar
- 0.1 y 0.1 Tabla
Conceptos Clave
Tupla
Cada una de las filas de la relación. Se corresponde con la idea clásica de registro. Representa por tanto cada elemento individual de esa relación.
Dominio
Un dominio contiene todos los posibles valores que puede tomar un determinado atributo. Dos atributos distintos pueden tener el mismo dominio.
Un dominio en realidad es un conjunto finito de valores del mismo tipo. A los dominios se les asigna un nombre y así podemos referirnos a ese nombre en más de un atributo.
- Generales (ó continuos): contienen todos los valores entre un mínimo y un máximo. Por ejemplo los DNI enteros 8 dígitos
- Restringidos (o discretos): contienen ciertos valores entre un mínimo y un máximo. Por ejemplo los valores de sexo pueden ser H o M.
Grado
Indica el tamaño de una relación en base al número de columnas (atributos) de la misma. Lógicamente cuanto mayor es el grado de una relación, mayor es su complejidad al manejarla.
Cardinalidad
Número de tuplas de una relación, o número de filas de una tabla.
Atributo
Es la columna de una relación que representa una propiedad de la misma y que es caracterizada por un nombre. Un atributo toma sus valores finitos dentro de un dominio.
Ejemplos de Consultas SQL
Visualizar los nombres y el año de nacimiento de los científicos de más de 50 años
select nombre, year (fecha_nac) from cientificos
where datediff (yy, fecha_nac, getdate()) >50
Seleccionar los datos de los científicos, visualizando solo sus apellidos y la descripción de su categoría ordenados por descripción de categoría
select substring(nombre, charindex(‘,’, nombre)+1, len (nombre) – charindex (‘,’, nombre)) as apellido, descripcion
from cientificos, categorias where cientificos.cod_cat=categorias.cod_cat order by descripcion
Visualizar los nombres de los científicos que hayan nacido en Agosto.
select nombre from cientificos
where datename (mm, fecha_nac) = ‘agosto’
Buscar las notas en FOL de los alumnos que viven en Madrid
select notas.nota
from alumnos, notas, asignaturas
where notas.dni=alumnos.dni
and notas.cod=asignaturas.cod
and asignaturas.nombre like ‘FOL’
and alumnos.pobla like ‘MADRID’
Visualizar los nombres de los departamentos con longitud hasta 36 caracteres rellenando con ‘*’ por la derecha
select dnombre + replicate (‘*’, (36 – len (dnombre))) from depart
Seleccionar todos los empleados cuya fecha de alta sea posterior al 1 de mayo 1991
select apellido, convert (varchar(15), fecha_alt, 106) as FECHA from emple
where fecha_alt > ’01-05-1991′
Visualizar para cada empleado su nombre con los días que lleva en la empresa
select apellido, datediff (dd,fecha_alt,getdate ()) AS ‘DIAS EN LA EMPRESA’ from emple
A partir de la tabla emple, obtén el apellido de los empleados que lleven más de 19 años trabajando
select apellido from emple
where datediff (yy,fecha_alt,getdate ())>19
Visualiza el apellido, salario y número de departamento de aquellos empleados de la tabla emple cuyo salario supere la media de su departamento
select apellido, salario, dept_no from emple e1
where salario>(select avg(salario) from emple e2
where e1.dept_no=e2.dept_no)