Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SQL: introducción y
estructura básica
Índice
Esquema 3
Ideas clave 4
4.1. ¿Cómo estudiar este tema? 4
4.2. Introducción 4
4.3. La definición de datos 6
© Universidad Internacional de La Rioja (UNIR)
Lo + recomendado 18
+ Información 21
Test 23
© Universidad Internacional de La Rioja (UNIR)
Orígenes del lenguaje: IBM Con el DDL de SQL podemos: SELECT: Operación proyección.
• Definir el esquema de una
FROM: Producto cartesiano.
Componentes: relación.
• Establecer el dominio de WHERE: Operación selección.
- DDL
cada atributo.
- DML • Definir restricciones de
- Integridad integridad.
- Definición de vistas • Definir y gestionar índices.
- Control de transacciones • Seguridad y autorización de
cada relación.
- SQL incorporado y SQL dinámico
• Definir la estructura de
- Autorización almacenamiento.
Tema 4. Esquema
Esquema
Para estudiar este tema deberás leer las páginas 61-70 de: Silberschatz, A., Korth, H. F. y
Sudarshan, S. (2006). Fundamentos de bases de datos (5a. ed.). Madrid: McGraw-Hill
España.
Disponible a través de la Biblioteca Virtual de UNIR.
Además se deberán leer las ideas clave expuestas a continuación.
E
n este tema comenzaremos a aprender el lenguaje declarativo SQL,
iniciando con una pequeña introducción. A continuación, conoceremos sus
diferentes tipos de datos y aprenderemos a transcribir algunas de las
operaciones del álgebra que hemos visto en el tema anterior.
4.2. Introducción
A
unque el álgebra relacional es un lenguaje potente que nos proporciona
la posibilidad de especificar las operaciones de forma precisa, es necesario
contar con un lenguaje más sencillo para el usuario. Este lenguaje será
© Universidad Internacional de La Rioja (UNIR)
SQL.
(Data Definition Language, DDL por sus siglas en inglés), para la definición de
Lenguaje de definición de
esquemas de relación, borrado de relaciones y modificación de los esquemas de
datos
relación.
(Data Manipulation Language, DML por sus siglas en inglés). El DML de SQL
Lenguaje interactivo de
incluye un lenguaje de consultas basado en el álgebra relacional y el cálculo
manipulación de datos
relacional, que permite insertar, borrar y modificar tuplas.
El DDL de SQL presenta una serie de comandos para especificar las limitaciones
Integridad de integridad. Las actualizaciones que violan las restricciones de integridad se
rechazan.
Definición de vistas El DDL de SQL permite crear vistas sobre sus relaciones.
Control de transacciones SQL incluye comandos para especificar el comienzo y el final de las transacciones.
dinámico
Fortran.
El DDL de SQL tiene una serie de comandos para definir los derechos de acceso a
Autorización
las relaciones y a las vistas
E
l DDL de SQL permite especificar las relaciones de la BD, así como
información relativa a las mismas, incluyendo:
La norma SQL soporta gran variedad de tipos de dominio predefinidos, entre ellos:
numeric (p, d). Representa un número de coma fija, cuya precisión está especificada
del esquema de la relación r y Di es el tipo de dominio de los valores del dominio del
atributo Ai.
Nótese que para este sencillo ejemplo mantenemos el nombre del cliente como clave
© Universidad Internacional de La Rioja (UNIR)
Cuando se crean las relaciones, inicialmente están vacías. Para poder añadir datos a
la relación se utiliza el comando INSERT, dando los valores de cada atributo en el
mismo orden en el que están definidos en el esquema. Por ejemplo, si se desea añadir
una cuenta C-0001 en la sucursal del centro con un saldo de 1300 euros, hay que
escribir:
Borrar
Para borrar tuplas se utiliza el comando DELETE. Si lo aplicamos sobre una relación,
borrará todas las tuplas de dicha relación. Para borrar un subconjunto de tuplas,
tendremos que especificar una condición, tal como veremos más adelante. Por
ejemplo, la siguiente sentencia borraría todas las tuplas de la tabla cuenta:
El hecho de borrar todas las tuplas no implica que la relación desaparezca, sino que
queda vacía. Para borrar una tabla de la BD, se utiliza el comando DROP TABLE. Cuando
aplicamos esta sentencia eliminamos tanto las tuplas como la propia tabla. Por
ejemplo, esta sentencia eliminaría las tuplas que contuviera la relación r y también la
tabla r:
DROP TABLE r;
© Universidad Internacional de La Rioja (UNIR)
Modificar
Donde r representa una relación que ya existe, A es el nombre del campo que se va
a añadir y D representa al dominio del atributo añadido.
Eliminar atributos
También podemos eliminar atributos de una relación. La forma general del comando
para hacer esta operación sería la siguiente:
L
as BD relacionales están formadas por un conjunto de relaciones que tienen
un nombre único. El lenguaje SQL permite el uso de valores nulos para
representar valores desconocidos o inexistentes, pero también deja al
usuario definir que los atributos no permitan valores nulos. La estructura básica de
una expresión SQL comprende tres cláusulas que son SELECT, FROM y WHERE.
© Universidad Internacional de La Rioja (UNIR)
SELECT 𝐴1 , 𝐴2 , … , 𝐴𝑛
FROM 𝑟1 , 𝑟2 , … , 𝑟𝑚
WHERE P;
En teoría, SQL realiza el producto cartesiano de todas las relaciones que se indican en
el FROM, hace la selección utilizando el predicado indicado en el WHERE y proyecta el
© Universidad Internacional de La Rioja (UNIR)
resultado sobre los atributos indicados en la cláusula SELECT. Sin embargo, el DBMS
tiene un módulo optimizador de consultas que permite transformaciones en
expresiones equivales que se pueden ejecutar de forma más eficiente.
El resultado de una consulta SQL es una relación. Esta cláusula es la que nos permite
consultar los diferentes datos que se encuentran almacenados en una tabla de la base
de datos. Consideremos la siguiente consulta para nuestro ejemplo bancario:
«obtener los nombres de las sucursales de la relación prestamo»:
SELECT nombre_sucursal
FROM prestamo;
Nos devuelve una relación con un único atributo que contiene los valores de la tabla
prestamo en su atributo nombre_sucursal. Presumiblemente, cada sucursal tendrá
varios préstamos asociados, por lo que su nombre aparecerá una vez por cada uno
de esos préstamos. Si no queremos que los valores aparezcan duplicados, utilizamos
la palabra distinct justo después de SELECT.
Para definir de una manera explícita que no se eliminen los duplicados utilizamos la
palabra all.
Para denotar «todos los atributos» se utiliza el símbolo llamado asterisco «*». Por
ejemplo, para seleccionar todos los atributos de la relación prestamo, en la cláusula
SELECT indicaremos SELECT *. Entonces, si realizamos esta operación recuperaremos
una relación con el mismo esquema y los mismos valores que tiene la relación
© Universidad Internacional de La Rioja (UNIR)
SELECT *
FROM prestamo;
La cláusula WHERE
La cláusula WHERE permite establecer condiciones sobre las tuplas, de tal forma que
solo se devolverán las tuplas que, una vez realizado el producto cartesiano indicado
en el FROM, cumplan las condiciones establecidas. Si no se emplea esta cláusula, la
consulta devolverá todas las filas generadas.
Por ejemplo, para «obtener todos los préstamos concedidos en la sucursal del centro
cuyo importe supere los 2000 euros», escribiríamos la siguiente consulta:
SELECT numero_prestamo
FROM prestamo
WHERE nombre_sucursal = ’Centro’ and importe > 2000;
En la cláusula WHERE se pueden utilizar las conectivas and, or y not, así como los
operadores de comparación <, < =, >, > =, = y <>. Además, existe un comparador
between, cuya función es simplificar las condiciones que se establezcan en función de
rangos. Por ejemplo, si queremos seleccionar «los préstamos con importe entre 80
000 € y 90 000 €», podríamos escribir:
SELECT numero_prestamo
FROM prestamo
© Universidad Internacional de La Rioja (UNIR)
En vez de:
SELECT numero_prestamo
FROM prestamo
WHERE importe>=80000 and importe<=90000
La cláusula FROM
La cláusula FROM define una operación de producto cartesiano entre las tablas que se
listan a continuación. En general, se listarán las tablas que son necesarias para
obtener los atributos especificados en el SELECT.
La operación renombramiento
© Universidad Internacional de La Rioja (UNIR)
nombre_antiguo as nombre_nuevo
Esta consulta devolverá una tabla cuyas columnas son Cliente, idPrestamo e importe,
frente al resultado anterior, que sería nombre_cliente, numero_prestamo e importe.
Variables tupla
Para ilustrar las variables tupla podemos realizar la siguiente consulta: «mostrar los
clientes que tienen un préstamo, el número del préstamo y su importe». La consulta
sería:
Las variables tupla son especialmente útiles para comparar tuplas de la misma
© Universidad Internacional de La Rioja (UNIR)
relación. Por ejemplo, para «determinar todas las sucursales que tienen activos
superiores que, al menos, una sucursal del centro», escribiríamos lo siguiente:
Para especificar las cadenas de caracteres en SQL se emplean las comillas simples,
como en ‘Centro’. La operación que más se utiliza sobre las cadenas de caracteres es
la comparación de patrones, por medio del operador like. Para la descripción de los
patrones se utilizan dos caracteres especiales:
‘Cen%’ hace referencia a cualquier cadena de caracteres que empiece con «Cen».
‘%cer%’ coincide con las cadenas de caracteres que tengan «cer» como
subcadena, como ‘Navacerrada’, ’Cáceres’ y ‘Becerril’.
‘_ _ _ _’ serían cadenas que tengan exactamente cuatro caracteres.
‘_ _ _ _ %’ serían cadenas que tengan, al menos, cuatro caracteres.
El operador de comparación like se utiliza para expresar los patrones en SQL. Así, la
consulta «conseguir el nombre de todos los clientes cuya ciudad tenga la subcadena
de caracteres ‘%San%’» se expresaría de la siguiente manera:
SELECT nombre_cliente
FROM cliente
WHERE ciudad_cliente like ‘%San%’;
Para que los patrones puedan incluir los caracteres «%» y «_», se utiliza un carácter
© Universidad Internacional de La Rioja (UNIR)
de escape que se define con la cláusula escape colocada justo delante del carácter
que se usará. Así, en el siguiente ejemplo se muestran patrones que utilizan la barra
invertida como carácter de escape:
like ‘ab\%cd% ‘ escape ‘\’ Serían las cadenas que empiezan por «ab%cd».
SQL permite otras funciones que operan sobre cadenas de caracteres, como la
concatenación (||), la extracción de cadenas de caracteres, el cálculo de longitud y la
conversión a mayúsculas (upper()).
La cláusula order by permite determinar el orden en el que se van a mostrar las tuplas
resultado de una consulta. Por ejemplo, para obtener la relación de todos los clientes
que tienen un préstamo en la sucursal centro, por orden alfabético de cliente,
escribiríamos:
El orden por defecto es ascendente, asc, aunque se puede especificar también orden
descendente utilizando la cláusula desc.
SELECT *
FROM prestamo
order by importe desc, numero_prestamo asc;
© Universidad Internacional de La Rioja (UNIR)
Ordenar los atributos de las tuplas puede ocasionar un gran coste computacional por
lo que se debe de ordenar solo cuando es necesario.
Lecciones magistrales
SQL Server
Aunque en esta asignatura vamos a trabajar con Oracle, muchas empresas manejan
SQL Server. Por eso, pensamos que tener recursos disponibles para familiarizarte con
este DBMS puede serte de utilidad. En concreto, en este vídeo puedes encontrar
cómo instalar SQL Server y Microsoft SQL Server Management Studio.
Accede al vídeo a través del aula virtual o desde la siguiente dirección web:
https://www.youtube.com/watch?v=yasfZuou3zI
© Universidad Internacional de La Rioja (UNIR)
Este vídeo revisa las cláusulas que podemos utilizar en SQL y explica los operadores
lógicos y de comparación.
Accede al vídeo a través del aula virtual o desde la siguiente dirección web:
https://www.youtube.com/watch?v=np6PH_vs-GI
© Universidad Internacional de La Rioja (UNIR)
Webgrafía
Tutorial de SQL
Accede a la página web a través del aula virtual o desde la siguiente dirección web:
https://desarrolloweb.com/manuales/tutorial-sql.html
© Universidad Internacional de La Rioja (UNIR)
Accede a la página web a través del aula virtual o desde la siguiente dirección web:
http://www.oracle-dba-online.com/sql/oracle_data_definition_language.htm
Accede a la página web a través del aula virtual o desde la siguiente dirección web:
https://www.w3schools.com/sql/
© Universidad Internacional de La Rioja (UNIR)
6. ¿Qué consulta debe realizarse para encontrar los títulos de los cursos en el
departamento con nombre Comp. Sci que tienen 3 créditos?
A. La relación department no tiene el atributo name
B. select title from course where dept_name = ’Comp. Sci.’ and credits = 3;
C. select title from department where dept_name = ’Comp. Sci.’ and credits =3;
D. select title from course where AND(dept_name =’Comp. Sci.’ credits= 3);
8. ¿Qué consulta debe realizarse para encontrar a todos los instructores que ganan
el salario más alto?
A. select ID, name from instructor where salary = (select max(salary) from
instructor);
B. select max(salary) from instructor;
© Universidad Internacional de La Rioja (UNIR)