0% encontró este documento útil (0 votos)
65 vistas

Módulo 3. SQL

Cargado por

Mario Savedra
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
65 vistas

Módulo 3. SQL

Cargado por

Mario Savedra
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 48

Módulo 3.

SQL

En el módulo 3 conoceremos el lenguaje estructurado de consulta (SQL) y cómo


este contiene diferentes lenguajes para la definición (DDL) y manipulación (DML) de
los datos. Veremos además los diferentes tipos de datos para luego aprender a
crear esquemas, tablas y realizar restricciones. Algunas restricciones comunes son
las claves las primarias y foráneas, y la creación de índices. Realizaremos
asimismo consultas con SQL. Ampliaremos en operaciones cómo proyección,
selección, operadores SQL y operaciones de conjunto. Por último, veremos
consultas con uniones (joins) de tablas, tipos de uniones existentes y consultas
agrupadas, funciones de grupo y ordenamiento.

Unidad 3.1. Creación de estructura (DDL)

Unidad 3.2. Consultas y manipulación de datos (DML)

Video de habilidades

Cierre

Referencias

Descargá la lectura
Lección 1 de 6

Unidad 3.1. Creación de estructura (DDL)

Video de inmersión

Verify to continue
We detected a high number of errors from your
connection. To continue, please confirm that
you’re a human (and not a spambot).

I'm not a robot


reCAPTCHA
Privacy - Terms

3.1.1 Introducción. Tipos de datos SQL

Introducción a SQL

Del inglés Structured Query Language (SQL) es el lenguaje estándar para trabajar con bases de datos
relacionales y es soportado prácticamente por todos los productos en el mercado. Originalmente, SQL
fue desarrollado en IBM Research a principios de los años setenta. Se usó por primera vez a gran escala
en un prototipo de IBM denominado System R, luego fue aplicado en numerosos productos comerciales
de IBM y de otros fabricantes. En este capítulo presentamos una introducción al lenguaje SQL, los tipos
de datos y como generar la estructura de una base de datos. Esto último es lo que se conoce por sus
siglas en inglés como DDL (Data Definition Language). En cuanto a la actualización, se especifica
también otro lenguaje, el DML (Data Manipulation Language) que nos permite modificar el estado de la
base de datos.

Para comprender mejor un concepto, además de su definición, siempre es útil para ampliar nuestro
conocimiento conocer su contexto e historia. Para poder entender mejor qué es SQL veamos 2 artículos.
El primero de ellos define SQL y muestra algo de historia del estándar ANSI para en el segundo artículo
ver más en detalle la historia del lenguaje.

 1. ¿Qué es el lenguaje SQL?

2. Situación actual de los estándares SQL3 y SQL/MM

Tipos de datos en SQL

Las bases de datos almacenan datos mediante registros, pueden ser distintos en su característica,
soporte, etc. Así, como un aspecto previo es necesario conocer la naturaleza de los distintos tipos de
datos.

Los DBMS proveen distintos tipos de datos con los cuales podemos trabajar, sin embargo, es necesario
especificar cual nos conviene más y para eso debemos de saber sus características en búsqueda,
capacidad, uso de los recursos, etc

Cada DMBS introduce tipos de valores de campos que no se encuentran precisamente presentes en
otras. A pesar de esto, existe un conjunto de tipos que están presentes en la totalidad de las
implementaciones de bases de datos. En la tabla 1 podemos ver estos tipos comunes.

Tabla 1. Tipos de datos genéricos en SQL


Alfanuméricos Contienen cifras y letras. Presentan una longitud limitada
(varchar, varchar2, text). En general son similares, pero
pueden variar en cada DBMS.

Existen de varios tipos, principalmente, enteros (sin decimales)


Numéricos y reales (con decimales). Algunos ejemplos son short, int,
bigint, decimal.

Booleanos Poseen dos formas: verdadero y falso (Sí o No). Boolean.

Almacenan fechas facilitando posteriormente su explotación.


Por lo general los DBMS también incorporan funciones para
Fechas
manipular fechas, comparar y obtener un valor particular (día,
mes, año).

Son campos alfanuméricos de longitud ilimitada. Presentan el


Memos inconveniente de no poder ser indexados (veremos más
adelante lo que esto quiere decir).

Son campos numéricos enteros que incrementan en una


unidad (o más) su valor para cada registro incorporado. Su
Autoincrementales
principal utilidad es la de identificador ya que resultan
exclusivos de un registro.

Fuente: elaboración propia.

En este curso en particular, recomendamos el uso del motor Postgre SQL. Como en todos los
manejadores de bases de datos implementa los tipos de datos definidos para el estándar SQL3 y
aumenta algunos otros. Detallando algunos de los tipos mencionados antes veamos los tipos definidos
por el estándar SQL3 que se muestran en la tabla 2.

Tabla 2. Tipos de datos en Postgre SQL

Tipos de datos del estándar SQL3 en Postgre SQL


Tipos de datos del estándar SQL3 en Postgre SQL

Correspondiente en
Tipos de Postgres Descripción
SQL3

Valor lógico o booleano


Bool Boolean
(true/false)

Cadena de caracteres de
char(n) character(n)
tamaño fijo

Date Date Fecha (sin hora)

Número de punto flotante


float4/8 real, double precisión
de doble precisión

Entero de dos bytes con


int2 Smallint
signo

Entero de cuatro bytes


int4 int, integer
con signo

int4 decimal(87#87) Número exacto con 88#88

int4 numeric(87#87) Número exacto con 89#89

money decimal(9,2) Cantidad monetaria

Hora en horas, minutos,


time time
segundos y centésimas

Time stamp Interval Intervalo de tiempo


Tipos de datos del estándar SQL3 en Postgre SQL

Fecha y hora con


timestamp timestamp with time zone
zonificación

Cadena de caracteres de
varchar(n) character varying(n)
tamaño variable

Fuente: elaboración propia.

3.1.2. Creación y relaciones entre tablas

Tablas

La estructura más elemental de almacenamiento en un Sistema de Administración de Base de Datos


(DBMS) es la tabla.

Los datos son almacenados en las tablas por medio de filas y columnas. La definición de las tablas se
realiza con un nombre que la identifica unívocamente y un conjunto de columnas. Una vez creada se le
pueden insertar datos en las filas. Sobre las filas de las tablas se pueden hacer operaciones de consulta,
eliminación o actualización de datos.

CO L UMNA FI LA CAMP O

Una columna o atributo representa un tipo de datos en una tabla, por ejemplo, el nombre de un artículo
en la tabla “artículos”. Cada columna cuenta con un nombre, un tipo de dato (char, date o number) y un
tamaño (cantidad de caracteres, si es un tipo texto, un ancho, si es un tipo fecha) o una escala y
precisión (para tipos numéricos). Los valores de una columna siempre van a tener el mismo tipo de
datos. Las columnas se van creando de izquierda a derecha, este dato no es relevante a la hora de
recuperar los datos de una tabla.
CO L UMNA FI LA CAMP O

Una fila es una composición de los valores de las columnas de una tabla, por ejemplo, la información
acerca de un artículo (nombre, precio) en la tabla “artículos”. Las filas también son conocidas como
tuplas o registros. Cada tabla puede contener cero o más registros o filas y su contenido es un único
valor en cada columna. Por defecto las filas están desordenadas, se van disponiendo en la medida que
se insertan.

CO L UMNA FI LA CAMP O

La intersección de una fila con una columna es el campo. Es la unidad más atómica de una tabla, no
puede ser descompuesto en valores más pequeños. El campo puede o no contener datos, la ausencia
de datos se conoce como campo nulo.

Según vimos antes, es necesario un lenguaje que nos permita crear tanto la estructura, es decir, las
tablas, como el acceso, consulta y actualización de los datos, además de la inserción, selección y
eliminación de tuplas o registros. SQL provee ambos lenguajes (DDL y DML). Comencemos viendo unos
ejemplos de cómo crear tablas a través de SQL.

Esquema y/o base de datos


Para crear nuestras tablas primero tendremos que crear una base de datos y teniendo en cuenta el motor
utilizado, cada base de datos puede tener múltiples esquemas. Previo a la creación de tablas veamos
las sentencias necesarias para crear una base de datos y un esquema.

Fuente: Producción propia.

La nomenclatura utilizada en esta sentencia y, de aquí en adelante, es la siguiente:

Las palabras en negrita son palabras reservadas del lenguaje.

La notación [...] quiere decir que lo que hay entre los corchetes se podría poner o no.

La notación {A|...|B} quiere decir que tenemos que escoger entre todas las opciones que
hay entre las llaves. Pero tenemos que poner una obligatoriamente.

La notación <A> quiere decir que A es un elemento pendiente de


definición.

Como ya hemos visto, la estructura de almacenamiento de los datos del modelo relacional son las
tablas. Para crear una tabla hay que utilizar la sentencia create table. Veamos el formato:
Donde la definición de columna es:

El proceso que hay que seguir para crear una tabla es el siguiente:

1 Decidir el nombre de la tabla (nombre tabla).

2 Dar nombre a cada uno de los atributos que formarán las columnas de la tabla (nombre
columna).

3 Asignar a cada una de las columnas un tipo de datos predefinido o bien un dominio definido
por el usuario. También se puede dar definiciones por defecto y restricciones de columna.

4 Una vez definidas las columnas, sólo habrá que dar las restricciones de tabla.

Si queremos crear una tabla para almacenar los empleados de una empresa, donde cada empleado tiene
obligatoriamente que tener un DNI y fecha de ingreso y opcionalmente se almacenará su nombre, su
apellido y su edad, podríamos tener la siguiente sentencia SQL (Dataprix, 2009, https://bit.ly/2UYOFnY).
Las columnas que no pueden tener valores nulos, se indica con las palabras reservadas not null.

Restricciones de columna

En cada una de las columnas de la tabla, una vez que les hemos dado un nombre y hemos definido el
dominio, podemos imponer ciertas restricciones que siempre se tendrán que cumplir. Las restricciones
que se pueden dar son las que aparecen en la tabla que apareces a continuación.

Tabla 3. Restricciones de columna

Restricción Descripción

Not null La columna no puede tener valores nulos.

La columna no puede tener valores


Unique
repetidos. Es una clave alternativa.

La columna no puede tener valores


Primary key
repetidos ni nulos. Es la clave primaria.

References <nombre_tabla> La columna es la clave foránea de la


[(<nombre_columna>)] columna de la tabla especificada.
Restricción Descripción

Constraint [<nombre_restricción>] Check La columna tiene que cumplir las


(<condiciones>) condiciones especificadas.

Fuente: elaboración propia en base a Dataprix, 2009.

3.1.3 Claves primarias, secundarias y foráneas

CL AV E P RI MARI A CL AV E F O RÁNE A

La clave primaria está compuesta por una o más columnas que permiten identificar de manera unívoca a
cada fila de una tabla, por ejemplo, el código de barras de un artículo. La clave primaria es única por
tabla y siempre debe contener un valor.

CL AV E P RI MARI A CL AV E F O RÁNE A

La clave foránea está compuesta por una o más columnas que hacen referencia a una clave primaria
de otra tabla o de la misma, por eso la relación entre las tablas que las contienen se conoce como
padre/hijo. Las claves foráneas tienen el fin de ayudar al cumplimiento de las reglas de diseño de la base
de datos relacional. Se puede contar con más de una clave foránea por tabla. Estas claves surgen de la
necesidad de relacionar diferentes tablas. Como vimos en el ejemplo de curso-alumno (en la lectura 2) la
forma de relacionar una tabla con otra es a través de este tipo de claves.
Restricciones de tabla

Una vez hemos dado un nombre, definido un dominio y hemos impuesto ciertas restricciones para cada
una de las columnas podemos aplicar restricciones sobre toda la tabla que siempre se tendrán que
cumplir. Las restricciones que se pueden dar son las siguientes:

Tabla 4. Restricciones de tabla

Restricción Descripción

El conjunto de las columnas especificadas


Unique (<nombre_columna> [,
no puede tener valores repetidos. Es una
<nombre_columna>...])
clave alternativa.

El conjunto de las columnas especificadas


Primary key (<nombre_columna> [,
no puede tener valores nulos ni repetidos.
<nombre_columna>...])
Es una clave primaria.

El conjunto de las columnas especificadas


es una clave foránea que referencia la
Foreing key (<nombre_columna>[,
clave primaria formada por el conjunto de
<nombre_columna>...])
las columnas 2 de la tabla dada. Si las
References<nombre_tabla>
columnas y las columnas 2 se llaman
[(<nombre_columna2>
exactamente igual, entonces no habría
que poner columnas2.

Constraint[<nombre_restricción>] La tabla tiene que cumplir las condiciones


Check(<condiciones>) especificadas.

Fuente: elaboración propia en base a Dataprix, 2009.


 Ejercicio propuesto: agregar a la tabla de empleado vista antes restricciones de
primary key al atributo DNI y de unique al par nombre-apellido.

3.1.4 Índices y vistas

Vistas

Los índices y las vistas son mecanismos que facilitan el acceso a los datos. Para el caso de los
índices, como vimos en el módulo 1, sirven para mejorar la performance de la base de datos ya que son
estructuras auxiliares de rápido acceso. El caso de las vistas nos permite resumir o conjugar diferentes
consultas agrupándolas con un mismo nombre lógico. Veamos la estructura de la consulta SQL y
algunos ejemplos.

Lo primero que tenemos que hacer para crear una vista es decidir qué nombre le queremos poner
(nombre_vista). Si buscamos cambiar el nombre de las columnas, o bien poner nombre a alguna que en
principio no tenía. Lo podemos hacer en lista de columnas. A partir de ahí solo nos quedará definir la
consulta que formará nuestra vista.

Las vistas no existen realmente como un conjunto de valores almacenados en la BD, son tablas ficticias
denominadas derivadas (no materializadas). Se construyen a partir de tablas reales (materializadas)
almacenadas en la BD y conocidas con el nombre de tablas básicas (o tablas de base) (Dataprix, 2009).
La no-existencia real de las vistas hace que puedan ser actualizables o no.
Creamos una vista que de, por ejemplo, para cada cliente el número de proyectos que tiene encargados
el cliente.

Más adelante detallaremos, pero vemos en esta vista varios componentes nuevos. La consulta
propiamente dicha (slect) retorna lo indicado en el enunciado y nos permite consultar los datos
directamente utilizando la vista “proyectos por cliente” si tuviésemos las siguientes extensiones:

Tabla 5. Clientes

codigo_cl nombre_c
Nif dirección ciudad teléfono
i li

38.567.89
10 ECIGSA Aragón 11 Barcelona NULL
3-C

38.123.89 Valencia 972.23.57.


20 CME Gerona
8-E 22 21

36.432.12 Mallorca 973.23.45.


30 ACME Lérida
7-A 33 67

Fuente: programación, 2015, https://bit.ly/2OXHQ23

Tabla 6. Proyectos
codigo nombre fecha_i fecha_p fecha_fi codigo_
precio
_proy _proy nicio rev_fin n cliente

GESCO
1 1,0E+6 1-1-98 1-1-99 NULL 10
M

2 PESCI 2,0E+6 1-10-96 31-3-98 1-5-98 10

3 SALSA 1,0E+6 10-2-98 1-2-99 NULL 20

4 TINELL 4,0E+6 1-1-97 1-12-99 NULL 30

Fuente: Programación, 2015, https://bit.ly/2OXHQ23

Y si mirásemos la extensión de la vista proyectos por clientes veríamos lo que encontramos en la


siguiente tabla.

Tabla 7. Proyectos por clientes

codigo_cli numero_proyecto

10 2

20 1

30 1

Fuente: elaboración propia.

Índices
Los índices, si bien siempre están asociados a una tabla, son objetos independientes, ya sea desde el
punto de vista lógico como del punto de vista físico. Ellos se pueden crear o eliminar sin que afecten a la
información almacenada en una tabla.

El DBMS utiliza el índice como se puede utilizar el índice de un libro. El índice contiene una entrada por
cada valor que aparece en las columnas indexadas de la tabla y punteros (orowid) a las filas que
contienen esos valores. Cada puntero conduce directamente a la fila apropiada; en consecuencia, se
evita el barrido total de la tabla (Oracle, 2017, https://bit.ly/2SZuT9a).

En el índice los valores de los datos están dispuestos en orden ascendente o descendente, de modo que
el DBMS es capaz de buscar rápidamente el índice para encontrar un valor particular. A continuación,
puede seguir el puntero para localizar la fila que contiene el valor.

En general es una buena idea crear un índice para las columnas que se utilizan con frecuencia en las
condiciones de búsqueda. La indexación también es más apropiada cuando las consultas en una tabla
son más frecuentes que las inserciones y las actualizaciones.

Clave primaria: la mayoría de los productos de DBMS siempre establecen un índice para
la clave primaria de una tabla porque anticipan que el acceso a la tabla será más frecuente
a través de la clave primaria. El índice de clave primaria también ayuda al DBMS a
comprobar rápidamente los valores duplicados a medida que se insertan nuevas filas en la
tabla.

Clave foránea: un índice de columnas de clave foránea a menudo puede mejorar el


rendimiento de las combinaciones.

Restricción de unicidad: la mayoría de los productos DBMS también establece


automáticamente un índice para cualquier columna (o combinación de columnas) definida
con una restricción de unicidad. Al igual que con la clave primaria, el DBMS debe
comprobar el valor de dicha columna en cualquier nueva fila que desee insertar o en
cualquier actualización de una fila existente para asegurarse de que el valor no duplique un
valor ya contenido en la tabla. Sin un índice en la (s) columna (s) el DBMS tendría que
buscar secuencialmente en cada fila de la tabla para verificar la restricción. Con un índice,
el DBMS puede simplemente usar el índice para encontrar una fila (si existe) con el valor en
cuestión, una operación mucho más rápida que una búsqueda secuencial.
Desventajas de los índices:

Consume espacio adicional en disco.

Deben actualizarse cada vez que se agrega una fila a la


tabla. Impone una sobrecarga adicional en inserts y
updates.

Tipos de índices

Algunos productos DBMS soportan dos o más tipos diferentes de índices, que están optimizados para
diferentes tipos de acceso a la base de datos.

Árbol B (B*Tree): es el tipo predeterminado en casi todos los productos de DBMS. Utiliza una estructura
de árbol de entradas de índice y bloques de índice (grupos de entradas de índice) para organizar los
valores de datos que contiene en orden ascendente o descendente. Proporciona una búsqueda eficiente
de un valor único o de un intervalo de valores, como lo es la búsqueda requerida para un operador de
comparación de desigualdad o una operación de prueba de intervalo (between).

En la práctica, los DBMS soportan índices a través de alguna forma de la sentencia create index
mostrada en la figura 1.

Figura 1. Create index


La sentencia asigna un nombre al índice y especifica la tabla para la que se crea el índice. La sentencia
también especifica las columnas a indexar y si deben ser indexadas en orden ascendente o
descendente. Veamos unos ejemplos de creación de índices:

Una columna indexada: cree un índice único para la tabla offices.

CREATE UNIQUE INDEX OFC_MGR_IDX ON OFFICES (MGR);

Dos columnas indexadas: cree un índice para la tabla orders.

CREATE INDEX ORD_PROD_IDX ON ORDERS (MFR, PRODUCT);

Si crea un índice para una tabla y posteriormente decide que no es necesario, la instrucción drop index
elimina el índice de la base de datos. La instrucción elimina el índice creado en el ejemplo anterior:
DROP INDEX ORD_PROD_IDX.
Lección 2 de 6

Unidad 3.2. Consultas y manipulación de datos


(DML)

Para manipular los datos de cualquier base de datos se cuenta con dos operaciones básicas: las de
recuperación y las de inserción o actualización de datos. Para realizar estas operaciones utilizamos el
lenguaje SQL, específicamente el sublenguaje que permite manipular los datos (Data Manipulation
Language).

La sentencia del lenguaje utilizada para la recuperación de datos a partir de la base de datos es la
sentencia select. SQL posee diversos operadores que pueden ser utilizados al escribir una consulta SQL
o select. La sentencia select, además, posee cláusulas que permiten restringir y ordenar el conjunto
resultado, lo que permite presentar el resultado de una consulta según el formato requerido por el usuario
final de la base de datos. SQL también provee la facilidad de invocar funciones, programas que reciben
argumentos y calculan o retornan un valor en la sentencia select. La invocación de funciones brinda
mayor flexibilidad y potencia al lenguaje a la vez que provee un mecanismo de extensión.

Los datos en una base de datos relacional se almacenan en diferentes tablas que se encuentran
relacionadas por valores en común. Utilizando la sentencia select es posible escribir consultas que unen
dos o más tablas relacionadas y presentan la información de manera unificada.

A parte del acceso a datos almacenados en diferentes tablas es posible agregar o agrupar datos según
valores comunes, de esta manera se pueden calcular valores sumarizados a nivel de grupo de filas. La
sentencia select posee una cláusula para especificar el agrupamiento de datos y existen diferentes
funciones de grupo para llevar a cabo cálculos a nivel de grupo. Este tipo de consultas son las que se
denominan agrupadas (Oracle, 2017, https://goo.gl/rEo0gS).

Estructura de una consulta:


Select {lista De Columnas}

From Tablas

Where Condiciones - Filas Group By {lista De Columnas} Having Condiciones - Grupo Order By {lista
De Columnas}

Todas las palabras marcadas en negrita son reservadas del lenguaje


SQL y el orden que se ve es el que debemos seguir al momento de
crear nuestras consultas.

3.2.1 Inserción, selección y proyección

INSERCIÓN

Un primer aspecto a tener en cuenta en una base de datos, es que debemos tener un modo de insertar
datos para poder poblarla. Veamos entonces las consultas básicas para insertar.

Es posible insertar una nueva fila en una tabla de dos formas distintas:

Indicando las columnas de la tabla


Sólo indicando el nombre de la tabla, lo que obliga a respetar el orden en que las columnas
fueron creadas. Si la tabla posee 3 columnas y queremos asignar 3 valores, debemos
escribir el siguiente código.

Para hacer consultas sobre una tabla con el SQL es preciso utilizar la sentencia select from que tiene el
siguiente formato:

La selección es el proceso por el cual elegimos que registros tomamos de una tabla en particular. Esto
se hace a través del where, es opcional ya que si no se escribe indica que queremos todos las tuplas de
una tabla. La proyección es la que nos permite elegir que campos o atributos mostrar de una determinada
tabla, se hace a través del select. Por último pero no menos importante, aparece el from. A través de
esta palabra indicamos sobre qué tabla estamos realizando la consulta. Veamos unos ejemplos.

Si tenemos una tabla clientes (código, nombre, dirección, ciudad) y queremos listar todos los clientes
mostrando todas las columnas simplemente basta con escribir.
Select*

From clientes;

Vemos que con “*” indicamos todas las columnas. Ahora si quisiéramos ver sólo el código del cliente y
el nombre, sería así:

Select código, nombre

From clientes;

Por último, si quisiéramos sólo ver aquellos códigos de clientes de la ciudad de Buenos Aires, se vería:

Select código

From clientes Where ciudad = “Buenos Aires”.

Condiciones y operadores

Para definir las condiciones en la cláusula where podemos utilizar los operadores que dispone SQL.

Tabla 8. Condiciones y operadores

Operadores lógicos

Not Para la negación de condiciones

And Para la conjunción de condiciones


Operadores lógicos

Or Para la disyunción de condiciones

Operadores de comparación

= Igual

< Menor

> Mayor

<= Menos igual

>= Mayor igual

<> Distinto

Fuente: elaboración propia.

Actualización

Para actualizar los datos, debemos hacer una consulta, incluyendo también una selección de los
mismos. Podemos ver como la estructura de la consulta es similar a la de un SELECT, pero con la
palabra UPDATE. Dentro del SET colocamos los pares columna-valor y en el WHERE restringimos los
registros a actualizar. ¡Pero OJO! Porque si no usamos el WHERE, se actualizarán todas las tuplas de la
tabla.
Eliminación

Finalmente, si queremos eliminar datos usamos la cláusula DELETE. La estructura es muy parecida a la
de la actualización. Luego de “DELETE FROM” ponemos el nombre de la tabla a eliminar los registros y
a continuación una o más restricciones en un WHERE. Nuevamente, es importante tener presente esto,
ya que si no usamos WHERE se eliminarán todos los registros.

3.2.2 Operaciones de conjuntos

Las operaciones de conjuntos son operaciones derivadas de la matemática de conjuntos. Existen


múltiples operaciones de conjunto. En este tema veremos que SQL reserva una palabra en particular, la
unión, intersección y diferencia. En el próximo tema veremos las reuniones (del inglés join) que se llevan
a cabo entre diferentes tablas. Las desarrolladas a continuación tienen como condición necesaria que
ambos conjuntos posean la misma cantidad y el mismo tipo de columnas.

Unión
La cláusula union permite unir consultas de dos o más sentencias select from. Su formato es el
siguiente:

Si se utiliza la opción all aparecen todas las filas obtenidas al hacer la unión. No se escribirá esta opción
si se quieren eliminar las filas repetidas. Lo más importante de la unión es que somos nosotros los que
tenemos que vigilar que se haga entre columnas definidas sobre dominios compatibles; es decir, que
tengan la misma interpretación semántica. Como ya se ha dicho, SQL no ofrece herramientas para
asegurar la compatibilidad semántica entre columnas.

La intersección

Para hacer la intersección entre dos o más sentencias select from, se puede utilizar la cláusula
intersect cuyo formato es el siguiente:
Si se utiliza la opción all aparecen todas las filas obtenidas al hacer la intersección. No se escribirá esta
opción si se quieren eliminar las filas repetidas. En la intersección es de suma importancia tener en
cuenta que somos nosotros los que tenemos que vigilar que se aplique entre columnas definidas sobre
dominios compatibles, es decir, que tengan la misma interpretación semántica.

La diferencia

Para encontrar la diferencia entre dos o más sentencias select from podemos utilizar la cláusula except
que tiene este formato:
Si se utiliza la opción all, aparecen todas las filas obtenidas al hacer la diferencia. No se escribirá esta
opción si se quieren eliminar las filas repetidas. Lo más importante de la diferencia es que somos
nosotros los que tenemos que vigilar que se haga entre columnas definidas sobre dominios compatibles.

En las operaciones de conjunto las columnas de los conjuntos a operar deben


ser las mismas.

Verdadero.

Falso.
SUBMIT

A modo resumen la siguiente imagen nos muestra gráficamente cómo se comportan cada una de las
operaciones de conjunto. Esto nos permite saber fácilmente cuál de las operaciones elegir según lo que
precisamos.

Fuente: Imagen extraída de: https://jorgesanchez.net/manuales/sql/select-conjuntos-


sql2016.html

3.2.3 Uniones entre tablas (joins)

Muchas veces queremos consultar datos de más de una tabla haciendo combinaciones de columnas de
tablas diferentes. En SQL es posible listar más de una tabla especificándolo en la cláusula from.

Combinación
La combinación consigue crear una sola tabla a partir de las tablas especificadas en la cláusula from.
Hace coincidir los valores de las columnas relacionadas de estas tablas.

Ejemplo de una combinación (join):

Se quiere saber el NIF, el código y el precio del proyecto que se desarrolla para el cliente número 20:

El resultado sería el siguiente:

Tabla 9. Resultado

proyectos.codigo_pro proyectos.precio clientes.nif

3 1000000.0 38.123.898-E

Fuente: elaboración propia.

Si trabajamos con más de una tabla puede pasar que la tabla resultante tenga dos columnas con el
mismo nombre. Por eso, es obligatorio especificar a qué tabla corresponden las columnas a las que nos
referimos, se nombra la tabla a la que pertenecen antes de ponerlas (por ejemplo, clientes.codigo_cli).
Para simplificarlo se utilizan los alias que, en este caso, se definen en la cláusula from.
Nota: un alias se define automáticamente después de nombrar la
tabla dentro del from (ejemplo from persona p, p es un alias para
persona).

La opción on, además de expresar condiciones con la igualdad en caso de que las columnas que
queremos relacionar tengan nombres diferentes, nos ofrece la posibilidad de expresar condiciones con
los otros operadores de comparación que no sean el de igualdad. También podemos utilizar una misma
tabla dos veces con alias diferentes, para poder distinguirlas.

Combinación natural

La combinación natural (natural join) de dos tablas consiste básicamente en hacer una equicombinación
entre columnas del mismo nombre y eliminar las columnas repetidas. La combinación natural, utilizando
SQL: 1992, se haría de la siguiente manera:

Ejemplo de una combinación natural: se quiere saber el código y el nombre de los empleados que están
asignados al departamento que tiene por teléfono 977.333.852.
Combinación interna y externa

Cualquier combinación puede ser interna o externa. La combinación interna (inner join) solo se queda
con las filas que tienen valores idénticos en las columnas de las tablas que compara. Esto puede hacer
que se pierda alguna fila interesante de alguna de las dos tablas, por ejemplo, porque se encuentra null
en el momento de hacer la combinación. Su formato es el siguiente:

Si no se quiere perder ninguna fila en una tabla determinada se puede hacer una combinación externa
(outer join). Permite obtener todos los valores de la tabla que hemos puesto a la derecha, los valores
de la que hemos puesto a la izquierda o todos los valores de ambas tablas. Su formato es el siguiente:
Combinaciones con más de dos tablas

Si se quieren combinar tres tablas o más sólo hay que añadir todas las tablas en el from y los vínculos
necesarios en el where. Hay que ir haciendo combinaciones por parejas de tablas y la tabla resultante se
convertirá en la primera pareja de la siguiente.

Veamos ejemplos de los dos casos. Supongamos que se quieren combinar tablas empleados, proyectos
y clientes:

o bien:
Resumiendo, podemos ver en la siguiente imagen los diferentes tipos de joins, la estructura que la
consulta SQL debe tener y el resultado gráfico de utilizar ese tipo de unión.

Fuente: Imagen: https://jorgesanchez.net/manuales/sql/select-conjuntos-sql2016.html

3.2.4 Consultas agrupadas y/u ordenadas

Funciones de agregación
SQL ofrece las siguientes funciones de agregación para efectuar diferentes operaciones con los datos de
una BD.

Tabla 10. Funciones de agregación

Función Descripción

Nos da el número total de filas


Count
seleccionadas

Sum Suma los valores de una columna

Min Nos da el valor mínimo de una columna

Max Nos da el valor máximo de una columna

AVG Calcula la media de una columna

Fuente: elaboración propia.

En general las funciones de agregación se aplican a una columna, excepto la función de agregación
count que normalmente se aplica a todas las columnas de la tabla o tablas seleccionadas: count (*)
contaría las filas de la tabla o tablas que cumplan las condiciones. Veamos un ejemplo de uso de la
función count que aparece en la cláusula select para hacer la consulta: ¿cuántos departamentos están
ubicados en la ciudad de Lérida?
La respuesta a esta consulta es la siguiente:

Consultas con agrupación de filas de una tabla

Las cláusulas que añadimos a la sentencia select from permiten organizar las filas por grupos:

La cláusula group by nos sirve para agrupar filas según las columnas que indique esta
cláusula.

La cláusula having especifica condiciones de búsqueda para grupos de filas; lleva a cabo
la misma función que antes hacía la cláusula where para las filas de toda la tabla, pero
ahora las condiciones se aplican a los grupos obtenidos.

Presenta el siguiente formato:


Prestemos especial atención a que en las sentencias SQL se van añadiendo cláusulas a medida que la
dificultad o la exigencia de la consulta lo requiere.

Consulta con agrupación de filas: se quiere saber el sueldo medio que ganan los empleados de cada
departamento.

Los factores de agrupación de la cláusula group by tienen que


ser, como mínimo, las columnas que figuran en select, exceptuando
las columnas afectadas por las funciones de agregación.
La cláusula group by podríamos decir que empaqueta a los empleados de la tabla empleados según el
departamento en que están asignados. En la siguiente figura podemos ver los grupos que se formarían
después de agrupar.

Tabla 11. Empleados

Fuente: elaboración propia.

Y así con la agrupación anterior es sencillo obtener el resultado de esta consulta:

Tabla 12. Resultados

nombre_dpt ciudad_dpt suelo_medio

DIR Gerona 100000.0

DIR Barcelona 90000.0


nombre_dpt ciudad_dpt suelo_medio

DIS Lerida 70000.0

DIS Barcelona 70000.0

PROG Tarragona 33000.0

NULL NULL 40000.0

Fuente: elaboración propia.

Ejemplo de uso de la función de agregación SUM

Veamos un ejemplo de uso de una función de agregación SUM de SQL que aparece en la cláusula
having de group by: queremos saber los códigos de los proyectos en los cuales la suma de los sueldos
de los empleados es mayor de 180.000 euros;

Nuevamente, antes de mostrar el resultado de esta consulta veamos gráficamente qué grupos se
formarían en este caso.
Tabla 13. Empleados

Fuente: elaboración propia.

Consultas ordenadas

Si se quiere que, al hacer una consulta, los datos aparezcan en un orden determinado hay que utilizar la
cláusula order by en la sentencia select que tiene el siguiente formato:
Ejemplo: se quiere consultar los nombres de los empleados ordenados según el sueldo que ganan, y si
ganan el mismo sueldo, ordenados alfabéticamente por el nombre.

Esta consulta daría la siguiente respuesta:

Tabla 14. Resultados

codigo_empl nombre_empl apellido_empl sueldo

6 Laura Tort 30000.0

8 Segio Grau 30000.0

5 Clara Blanc 40000.0

7 Roger Salt 40000.0

3 Ana Ros 70000.0

4 Jorge Roca 70000.0

2 Padro Mas 90000.0

1 María Puig 10000.0


Fuente: elaboración propia.

Si no se especifica nada más el orden que se seguirá será ascendente pero si se quiere seguir un orden
descendente hay que añadir desc detrás de cada factor de ordenación expresado en la cláusula order
by:

También se puede explicitar un orden ascendente poniendo la palabra clave ASC (opción por defecto).
Lección 3 de 6

Video de habilidades

Es muy importante adquirir práctica en el armado de las consultas y sentencia SQL. La sentencia que
posee más complejidad es el select por eso haremos más hincapié en ella. Tenemos que ser capaces de
poder combinar más de una tabla y saber hacer las agrupaciones o restricciones necesarias.

Consultas en SQL: SELECT, FROM, WHERE

Si deseo buscar la materia administración de redes, ¿qué sentencia debo


escribir y mostrar todos los campos de la tabla?
Select from clases where materia = ‘administracion de
redes’

Select * from clases = ‘administracion de redes’

Select * from clases where materia = ‘administracion de


redes’

SUBMIT

¿Qué sentencia me permite eliminar las filas duplicadas?

Union.

SUM.

AVG.

Count.
Distinct.

SUBMIT

Si deseamos ordenar los datos por una columna en particular debemos escribir
order by (campo por el cual ordenar).

Verdadero.

Falso.

SUBMIT

Escribe una sentencia que muestre todas las materias de programación,


mostrando como resultado solo la columna materia.

Escriba su respuesta aquí


SUBMIT

Escribe una sentencia que muestre la materia elaboración de texto avanzado y


la materia manejo de db, mostrando como resultado todas las columnas de la
tabla clases.

Escriba su respuesta aquí

SUBMIT
Lección 4 de 6

Cierre

Creación y relaciones entre tablas



La estructura más elemental de almacenamiento en un Sistema de Administración de Base de Datos
(DBMS) es la tabla.
Los datos son almacenados en las tablas por medio de filas y columnas. La definición de las tablas se
realiza con un nombre que la identifica unívocamente y un conjunto de columnas. Una vez creada se le
pueden insertar datos en las filas. Sobre las filas de las tablas se pueden hacer operaciones de
consulta, eliminación o actualización de datos.

Claves primarias y foráneas



Clave primaria: está compuesta por una o más columnas que permiten identificar de manera unívoca a
cada fila de una tabla, por ejemplo, el código de barras de un artículo. La clave primaria es única por
tabla y siempre debe contener un valor.
Clave foránea: está compuesta por una o más columnas que hacen referencia a una clave primaria de
otra tabla o de la misma, por eso la relación entre las tablas que las contienen se conoce como
padre/hijo. Las claves foráneas tienen el fin de ayudar al cumplimiento de las reglas de diseño de la
base de datos relacional.

Índices y vistas

Los índices y las vistas son mecanismos que facilitan el acceso a los datos. Para el caso de los
índices sirven para mejorar la performance de la base de datos ya que son estructuras auxiliares de
rápido acceso. El caso de las vistas nos permite resumir o conjugar diferentes consultas agrupándolas
con un mismo nombre lógico. Veamos la estructura de la consulta SQL y algunos ejemplos.

Consultas y manipulación de datos (DML)



Para manipular los datos de cualquier base de datos se cuenta con dos operaciones básicas: las de
recuperación y las de inserción o actualización de datos. Para realizar estas operaciones utilizamos el
lenguaje SQL, específicamente el sublenguaje que permite manipular los datos (Data Manipulation
Language).

Selección y proyección

La selección es el proceso por el cual elegimos que registros tomamos de una tabla en particular. Esto
se hace a través del where, es opcional ya que si no se escribe indica que queremos todos las tuplas
de una tabla. La proyección es la que nos permite elegir que campos o atributos mostrar de una
determinada tabla, se hace a través del select. Por último pero no menos importante, aparece el from. A
través de esta palabra indicamos sobre qué tabla estamos realizando la consulta.
Lección 5 de 6

Referencias

Dataprix. (2009) Creación de tablas. Recuperado de https://www.dataprix.com/es/book/export/html/654

Oracle. (2017) Objetos de bases de datos. Recuperado de http://docplayer.es/2135056-5-objetos-de-


base-de-datos.html

Programación. (2015) SQL Creación y borrado de vistas Creación de una vista en BDUOC. Recuperado
de https://ayudaparaprogramacion.blogspot.com/2015/07/sql-creacion-y-borrado-de-vistas.html

También podría gustarte