Subido por Juan Mateo

Sql Para Mancos Y Feeders

Anuncio
2022
SQL Para Mancos y Feeders
Arismendy Polanco Valdez
3/26/2022
Contents
Fundamentos de bases de datos
3
Que es una base de datos
3
Ventajas de las bases de datos
3
Desventajas de las bases de datos
4
Modelos de bases de datos
4
Sistema de gestión de bases de datos (SGBD)
4
Base de datos
5
Tabla
6
Registro y fila
6
Campo y columna
7
Tipo de datos
7
Llave primaria y Llave foránea
7
¿Qué es SQL?
8
Lenguajes que componen a SQL
9
DDL (Data Definition Language).
9
TCL (Transaction Control Language).
9
DML (Data Manipulation Language).
10
DCL (Data Control Language).
10
Preparación del entorno de trabajo
11
MySQL y MariaDB
11
Modelo Cliente-Servidor
11
Instalación de XAMPP
12
Exportación e Importación de la base de datos
14
Recuperando Datos
18
Palabras reservadas y Clausuras
18
Búsqueda de los datos
18
Eliminar los resultados repetidos
20
Condicionando la búsqueda
21
Aritméticas y búsquedas avanzadas
25
Operadores aritméticos y operaciones matemáticas
25
Alias
25
Valores nulos
26
1
Uso de patrones en búsquedas
27
Ordenando los resultados de la búsqueda
29
Funciones de agregación
31
Agrupar resultados
32
Recuperar datos desde varias tablas
35
Operaciones con dos tablas o mas
35
Inner join
35
Left Join
38
Right Join
39
Cross Join
41
Natural Join
41
Alias en las tablas
42
Self Join
42
Join con más de dos tablas
43
Subquery
44
Unión
45
Manipulación de los datos
47
Insertar registros
47
Modificar registros
48
Eliminar registros
48
Bibliografía
49
2
1. Fundamentos de bases de datos
Que es una base de datos
Una base de datos es definida por muchos como una colección de elementos los cuales
contienen información, estos pueden ser de diferente naturaleza pudiendo contarse entre estos
los libros, fotos, récords escolares, etc.
En informática una base de datos es una colección de datos
relacionados entre sí, que forman una estructura lógica, esta
estructura puede ser accedida y utilizada desde un software,
aplicación móvil, sitio web u otro programa informático. Esta
estructura no sólo contiene los datos en sí, sino la forma en la
que se relacionan y se almacenan.
Cada base de datos es diseñada con el objetivo de satisfacer
las necesidades de administrar los datos de una institución,
persona o empresa como pueden ser un banco, una universidad
u otra institución, empresa o persona.
Antes de los años 70 los sistemas informáticos utilizaban ficheros o archivos para gestionar
los datos, esto presentaban algunas desventajas como son:
✔ Almacenar información de forma descentralizada.
✔ Redundancia de datos.
✔ Cada programa utiliza más de un fichero, lo que dificultaba el trabajo y mantener la
información actualizada en todos los ficheros.
✔ Falta de independencia de los datos.
✔ Falta de protección de los datos.
✔ Etc.
Ventajas de las bases de datos
Utilizar bases de datos en los programas informáticos tiene sus ventajas y entre ellas podemos
destacar las siguientes
✔ Independencia de los programas y procesos: Los datos son no dependen de los
programas que acceden a ellos, sino que pueden ser modificados y generados sin
necesidad de modificar el código del programa que los usa.
✔ Menos redundancia: Se reduce la repetición de datos innecesaria.
✔ Integridad de los datos: Se garantiza la coherencia de los datos, y su existencia en
el sistema.
✔ Mayor seguridad en los datos: El acceso y los procesos realizados sobre los datos
son limitados por usuarios y privilegios.
✔ Documentación de datos: Es posible realizar diagramas relacionales y tener
diccionarios de datos.
✔ Fácil acceso a los datos: Al estar organizado es más fácil buscar en los datos.
3
✔ Todo en un solo lugar: No es necesario lidiar con ficheros, ya que en una base de
datos están todas las informaciones almacenadas.
Desventajas de las bases de datos
Ningún sistema, mecanismo o estructura es perfecta en sí misma, aunque podemos destacar
que en cuanto a administrar datos e información las bases de datos son la elección perfecta
hay que tener en cuenta ciertos factores como son:
● Costo de instalación. Dependiendo de la base de datos seleccionada, en ocasiones
será necesario utilizar hardware costoso y pagar por licencias de sistemas operativos.
● Requiere Experto. Al ser un sistema y poseer un entorno y lenguaje es necesario de
alguien que tenga los conocimientos necesarios para trabajar con ella.
Modelos de bases de datos
El modelo se refiere a cómo se almacenan los datos, como son organizados y cómo se
acceden a estos.
Existen diferentes modelos de bases de datos, no vamos a profundizar en ellos, sino que solo
nos limitaremos a mencionarlos:
✔
✔
✔
✔
✔
✔
✔
✔
Bases de datos jerárquicas
Base de datos de red
Bases de datos transaccionales
Bases de datos multidimensionales
Bases de datos orientadas a objetos
Bases de datos documentales
Bases de datos deductivas
Bases de datos Relacionales
En este curso de SQL utilizaremos el modelo relacional.
Este modelo está basado en el álgebra relacional y la teoría de conjuntos, fue originado en
los años 70 por Edgar Frank Codd en los laboratorios IBM en California, para este modelo
se creó el lenguaje estructurado de consultas SQL y se ha popularizado de manera que hoy
en día la mayoría de los Sistemas de gestión de bases de datos lo utilizan.
Sistema de gestión de bases de datos (SGBD)
El SGBD es el software que permite al administrador de bases de datos gestionar las bases
de datos, desde su creación, modificación, consulta a los datos, inserción entre otras tareas.
Está dedicado a servir como interfaz entre la base de datos
y el administrador de la base datos o usuarios y tiene como
propósito manejar de manera clara, sencilla y ordenada un
conjunto de datos que posteriormente se convertirán en
información relevante para una organización.
4
Existen un sin número de SGBD en el mercado, unos gratuitos y otros de pagos, entre los
cuales podemos listar los siguientes:
Estos logos y nombre son marcas registradas
Base de datos
En un sistema de gestión de bases de datos pueden coexistir muchas bases de datos con
diferentes nombres y fines, la una puede ser de un sitio web, otra de un sistema de
contabilidad, otra de un punto de venta, etc. Sin embargo, cada una de estas se encuentra
aislada de la otra de manera que los datos solo pueden ser accedido desde la base de datos
seleccionada. Estas bases de datos están compuestas por tablas.
En la siguiente imagen podemos ver el entorno de trabajo de phpMyAdmin y a la izquierda
una columna que muestra la base de datos llamada librería con su conjunto de tablas que la
componen.
Base de datos
Tablas que componen la
base de datos
5
Tabla
Una tabla representa la estructura lógica donde se almacenarán los
datos, esta contiene las descripciones de los campos, su longitud y
tipo de datos que pueden almacenar, las tablas están compuestas
por columnas y el grupo de columnas forman registros.
Cada tabla es identificada con un nombre único dentro del esquema
y servirá como recipiente para almacenar los datos.
Las relaciones son visualizadas como tablas donde la primera fila
contiene los encabezados de cada columna.
En la imagen de la derecha podemos visualizar la estructura de la
tabla autores del esquema librería.
En la imagen siguiente podemos visualizar una tabla que lleva
como nombre clientes donde la información se presenta organizada
en filas y columnas.
Registro y fila
Al conjunto de columnas se le conoce como registro y visualmente se representa como una
fila, por lo tanto, al leer cualquiera de estos nombres, debemos entender que nos referimos a
él mismo elemento.
Las informaciones en las tablas se organizan en registros, cada registro contiene uno o más
campos que contienen los valores de ese registro.
Un registro podría ser los datos de un producto en específico en una tabla.
Id
1
2
3
4
Descripción
Auriculares
Bocinas Bluetooth
Mouse Inalámbrico
Teclado
Código
El-011
El-101
EL-112
El-999
Precio
500.00
1500.00
650.00
150.00
Id, Descripción, Código y
precio son las columnas, y
al conjunto de columnas
registrados componen la
fila
6
Campo y columna
El campo es la unidad mínima dentro de una tabla, que representa el espacio donde será
almacenado o donde está almacenado un dato en específico. También es llamado columna.
Id
1
2
3
4
Descripción
Auriculares
Bocinas Bluetooth
Mouse Inalámbrico
Teclado
Código
El-011
El-101
EL-112
El-999
Precio
500.00
1500.00
650.00
150.00
Descripción es la
columna o campo y
Bocinas Bluetooth es el
valor almacenado
Hay que tener en claro que, aunque las columnas se pueden tratar individuales siempre
formaran parte de una fila.
Tipo de datos
Las bases de datos almacenan datos, los datos son tratado de forma independientes, y son
almacenados dentro de las columnas, estas columnas definen la longitud del valor que
recibirán, sin embargo, los datos también tienen tipos y es necesario conocer el tipo o
naturaleza de los datos.
En el estándar SQL existen diferentes tipos de datos, cada uno con un propósito específico.
Los tipos de datos pueden ser agrupados en: Numéricos, caracteres y tiempo (fecha y horas).
En el grupo de los numéricos podemos encontrar los siguientes:
-
Tinyint
Smallint
Mediumint
Int
-
Bigint
Float
Double
Decimal
-
Text
Blob
Enum
Set
Los caracteres están definidos por los:
-
Char
Varchar
Binary
Varbinary
Para las fechas y horas SQL provee de los siguientes tipos de datos:
-
Date
Datetime
Time
-
Timestamp
Year
Llave primaria y Llave foránea
Una llave primaria es una columna única dentro de una tabla, esto quiere decir que ningún
valor debe repetirse en ningún registro dentro de esta tabla, un ejemplo de esto sería la cédula
la cual debe ser un valor único para cada persona ya que dos personas no deberían tener la
misma cedula, de igual forma un campo definido como llave primaria no permite repeticiones
de valores.
7
En el modelo relacional existen diferentes tipos de llaves, está la llave primaria, que identifica
una columna como única y define a esta columna como el campo distintivo de cada fila, es
utilizada para identificar cada registro de la tabla y también para relacional dos o más tablas
y cuando una llave primaria de una tabla se encuentra presente en otra tabla se le conoce
como llave foránea.
En la siguiente imagen podemos ver como la columna id_pub se encuentra presente en las
dos tablas, indicando en la tabla publicadores cuál es la llave primaria, pero en la tabla títulos
es la llave foránea, la columna que vincula ambas tablas.
¿Qué es SQL?
SQL es el acrónimo de structure languaje query, que en español se traduce como lenguaje
estructurado de consultas, es el lenguaje más popular en el mundo de las bases de datos, y el
más utilizado por su simpleza en el manejo de los datos. Fue diseñado para administrar, y
recuperar información de sistemas de gestión de bases de datos relacionales. Una de sus
principales características es el manejo del álgebra y el cálculo relacional para efectuar
consultas con el fin de recuperar, de forma sencilla, información de bases de datos, así como
realizar cambios en ellas.
En 1970 E. F. Codd propone el modelo relacional y asociado a este un sublenguaje de acceso
a los datos basado en el cálculo de predicados. Basándose en estas ideas, los laboratorios de
IBM definieron el lenguaje SEQUEL (Structured English Query Language) que más tarde
fue ampliamente implementado por el sistema de gestión de bases de datos (SGBD)
experimental System R, desarrollado en 1977 también por IBM. Sin embargo, fue Oracle
quien lo introdujo por primera vez en 1979 en un producto comercial.
El SEQUEL terminó siendo el predecesor de SQL, que es una versión evolucionada del
primero. SQL pasa a ser el lenguaje por excelencia de los diversos sistemas de gestión de
bases de datos relacionales surgidos en los años siguientes y fue por fin estandarizado en
1986 por el ANSI, dando lugar a la primera versión estándar de este lenguaje, "SQL-86" o
"SQL1". Al año siguiente este estándar es también adoptado por ISO.
Sin embargo, este primer estándar no cubría todas las necesidades de los desarrolladores e
incluía funcionalidades de definición de almacenamiento que se consideró suprimirlas. Así
que, en 1992, se lanzó un nuevo estándar ampliado y revisado de SQL llamado "SQL-92" o
"SQL2".
8
En la actualidad SQL es el estándar de facto de la inmensa mayoría de los SGBD comerciales.
Y, aunque la diversidad de añadidos particulares que incluyen las distintas implementaciones
comerciales del lenguaje es amplia, el soporte al estándar SQL-92 es general y muy amplio.
Es un lenguaje declarativo de acceso a bases de datos relacionales que permiten diversos
tipos de operaciones en ellas. Es un lenguaje que permite combinar la manipulación y la
definición de los datos, así como también permite expresar diversas operaciones con los datos
almacenados en las bases de datos relacionales.
Lenguajes que componen a SQL
SQL es un lenguaje muy amplio y está compuesto por sublenguajes los cuales tienen
propósitos específicos dentro del SQL.
Del SQL se derivan sublenguajes los cuales son utilizados para la manipulación, definición
y control de la información o estructura de una base de datos relacional. Estos sublenguajes
son:
DDL (Data Definition Language).
Es el sublenguaje que se encarga de la modificación de la estructura de los objetos de la base
de datos. Incluye órdenes para modificar, borrar o definir tablas, vistas, base de datos,
procedimientos almacenados, funciones o base de datos como tal. Estas sentencias son:
✔
✔
✔
✔
create.
alter.
drop.
truncate.
TCL (Transaction Control Language).
Es un subconjunto de SQL que se utiliza para controlar el procesamiento de transacciones en
una base de datos. Una transacción es una unidad lógica de trabajo que comprende una o más
sentencias SQL, por lo general son grupo de sentencias que se encuentran en el sublenguaje
DML.
Las sentencias que posee este sublenguaje son:
✔ commit
✔ rollback
✔ savepoint.
DML (Data Manipulation Language).
Es el que permite a los usuarios llevar a cabo las tareas de consulta o manipulación de datos,
recoge todas las operaciones de intercambio de datos entre tablas. Las operaciones se dividen
en
9
✔ Consultas. (Recuperación de Información)
✔ Tratamiento de Datos (Insertar, Actualizar y Eliminar).
Las sentencias utilizadas en este sublenguaje son.
✔
✔
✔
✔
select
insert.
update.
delete.
DCL (Data Control Language).
Es un sublenguaje que incluye una serie de comandos que permiten la administración del
control de acceso de datos contenidos en la base de datos. Las sentencias incluidas en este
sublenguaje son:
✔ grant.
✔ revoke.
10
2. Preparación del entorno de trabajo
Para desarrollar este curso de SQL utilizaremos un entorno de trabajo llamado XAMPP
(Apache, MariaDB o MySql, PHP y Perl), este entorno de trabajo está especialmente
elaborado para programadores web especialmente en el lenguaje de programación PHP, sin
embargo, posee herramientas que nos facilitaran poner en ejecución este curso con facilidad.
MySQL y MariaDB
MySQL es un SGBD que utiliza el modelo relacional, fue desarrollado por la empresa
MySQL AB, en el 2008 MySQL AB fue adquirida por sun microsystem, sin embargo, MySql
fue adquirida por Oracle Corporation cuando esta compró a sun microsystem en el 2010.
Este SGBD es distribuido en varias versiones, una Community, distribuida bajo la Licencia
pública general de GNU, versión 2, y también cuenta con versiones Enterprise, las cuales
proveen de productos herramientas para mejorar la presentación y monitoreo de datos y
también estas incluyen soporte técnico.
MariaDB es un fork de MySql creado por Michael Widenius fundador de MySQL. Widenius
decidió crear esta variante porque estaba convencido de que el único interés de Oracle en
MySQL era eliminar la competencia que MySQL suponía para el mayor proveedor de bases
de datos relacionales del mundo, que es Oracle Database.
MySQL y MariaDB son utilizados por un gran número de sitios web populares, como lo es
la Wikipedia, Google, Facebook, Twitter, Flickr y YouTube.
Modelo Cliente-Servidor
Servidor: es un equipo que pone a disposición de otros dispositivos denominados clientes
uno o más servicios, algunos de estos servicios son file server (servidor de archivo), print
server (servidor de impresión), web server (servidor web páginas web), database server
(servidor de base de datos), entre otros servicios.
Cliente: es aquel dispositivo que demanda o consume los servicios ofrecidos por el servidor,
entre estos podemos mencionar un smartphone mediante el cual se accede a un sitio web, una
computadora portátil la cual accede a una base de datos en la nube, y cualquier otro
dispositivo el cual solicite datos a un servidor.
Algunos ejemplos de aplicaciones
computacionales que usen el
modelo cliente-servidor son el
Correo electrónico, un Servidor de
impresión y la World Wide Web.
MySql y MariaDB son SGBD
basados en el modelo cliente –
servidor.
11
Instalación de XAMPP
Para instalar XAMPP en nuestro sistema necesitaremos un sistema operativo Windows
preferiblemente 8.1 o superior, también puede ser instalado en Linux y Mac, aunque en este
curso nos limitaremos a explicar cómo instalarlo en Windows.
El primer paso es adquirir el instalador de XAMPP, esto lo podemos hacer accediendo a el
sitio web oficial https://www.apachefriends.org/es/index.html, descargaremos la versión
más reciente de XAMPP la 7.3.5 (esta es la última al momento de elaborar este material) y
ejecutaremos el instalador, es fácil instalarlo solo hay que seguir los siguientes paso:
2
1
3
Nota: en el paso numero dos (2) solo es necesario marcar la casilla de apache y MySql, el
resto no se utilizará en el este curso y por lo tanto no es necesario.
Una vez instalado el entorno de trabajo XAMPP
entonces iniciaremos el web server apache y el
database server MySql, para lograr esto abriremos el
panel de control de XAMPP, ubicado en el menú
inicio -> todos los programas -> xampp -> xampp
control panel o el icono de acceso directo creado en
el escritorio de Windows.
Una vez dentro del panel de control de xampp
inicializaremos los dos servicios que utilizaremos
durante este curso, apache y MySql, presionando los
12
botones start de cada uno, luego para trabajar con MySql presionamos el botón Admin el
cual nos abrirá el navegador y entraremos en una interfaz llamada PhpMyAdmin.
PhpMyAdmin será la interfaz que nos permitirá administrar a MySql y realizar todas las
operaciones y prácticas de este curso en el SGBD MySQL.
Exportación e Importación de la base de datos
Como definimos anteriormente un SGDB puede albergar una o más bases de datos, en
algunas ocasiones será necesario desarrollar la base de datos en un sistema o equipo, pero
que luego esa base de datos será implementada en un servidor donde se pondrá a disposición
de distintos clientes, en este caso es necesario realizar dos pasos importantes.
1. Exportación: consiste en empaquetar una base de datos existente en un archivo sql
con la finalidad de migrar o implementar una base de datos en otro equipo el cual no
es en el que se elaboró la base de datos.
2. Importación: este proceso es lo inverso a la exportación, y consiste en
desempaquetar el archivo sql generado en la exportación, recreando la base de datos
en el equipo de destino.
Para exportar una base de datos primero la seleccionamos y luego presionamos el botón
exportar tal como lo muestra la siguiente imagen:
13
2
1
Una vez presionado el botón continuar se descargará en nuestro equipo un archivo con el
nombre de la base de datos y la extensión sql el cual utilizaremos para importar en otro equipo
u otra instalación de MySql.
El proceso de importación es igual de fácil solo debemos crear una base de datos nueva y
luego presionar importar tal cual se muestra en las siguientes.
14
1
3
2
4
15
El siguiente y último paso consiste en seleccionar el archivo exportado de la base de datos el
cual tiene extensión sql y presionar el botón continuar tal y como se muestra en la imagen
x.x.
5
6
7
8
16
3. Recuperando Datos
El lenguaje SQL es un lenguaje declarativo el cual utiliza palabras claves o también
conocidas como palabras reservadas para formar una consulta y como ya mencionamos en
la primera unidad es un lenguaje que está conformado por otros sublenguaje. En esta
unidad iniciaremos trabajando con el sublenguaje DML e iniciaremos recuperando datos
desde la base de datos.
Palabras reservadas y Clausuras
Las palabras reservadas, palabras claves o como las llamaría todo SGBD, clausuras, son
aquellas palabras con las cuales formaremos las sentencia o instrucciones que queremos
ejecutar en SQL, tales como insertar datos cuya clausura es INSERT, de igual forma si
queremos eliminar algún registro la clausura es DELETE, sin embargo, una sentencia no
solo está conformada por una sola clausura, sino que utilizaremos varias clausuras para
formar una sentencia.
Búsqueda de los datos
Para buscar o recuperar datos desde la base de datos necesitaremos hacer uso de la
instrucción SELECT, sin embargo, esta instrucción está conformada por varias clausuras,
como son:
SELECT: es donde se indican cuales columnas se desean mostrar en el resultado de la
consulta ejecutada, por ejemplo, nombre, apellido, teléfono, etc. Sin embargo, existe un
comodín para mostrar todas las columnas sin necesidad de escribir el nombre de todas las
columnas, este comodín es el asterisco (*).
FROM: en esta clausura se especifica desde cual tabla se quieren recuperar los datos, por
ejemplo, tiendas, títulos, autores, etc.
La sintaxis del SELECT es la siguiente:
1. SELECT columnas
2. FROM tabla
Las columnas son separadas por comas (,)
1. SELECT columna_1, columna_2, ..., columna_n
2. FROM tabla
Si se quieren recuperar todas las columnas se utiliza el asterisco (*)
1. SELECT *
2. FROM tabla
Veamos algunos ejemplos.
Se requiere un listado mostrando todas las columnas de las categorías que tengo en mi base
de datos:
1. SELECT *
2. FROM categoria
17
IdCategoria
1
2
3
4
5
6
7
8
NombreCategoria
Bebidas
Condimentos
Repostería
Lácteos
Granos/Cereales
Carnes
Frutas/Verduras
Pescado/Marisco
Descripcion
Gaseosas, café, té, cervezas y maltas
Salsas dulces y picantes, delicias, comida para un...
Postres, dulces y pan dulce
Quesos
Pan, galletas, pasta y cereales
Carnes preparadas
Frutas secas y queso de soja
Pescados, mariscos y algas
Mostrar solo la columna nombre de las categorías
1. SELECT NombreCategoria
2. FROM categoria
NombreCategoria
Bebidas
Condimentos
Repostería
Lácteos
Granos/Cereales
Carnes
Frutas/Verduras
Pescado/Marisco
Desplegar un listado con la ciudad, código y el estado de los almacenes (tomar en cuenta
que el orden mostrado en el resultado dependerá del orden en que se coloquen en la
sentencia SELECT).
1. SELECT ciudad, codigo, estado
2. FROM almacenes
ciudad
codigo
estado
Seattle
Seattle
Portland
Columbus
Trenton
Seattle
Seattle
Columbus
al-01
al-02
al-03
al-04
al-05
al-06
al-07
al-08
WA
WA
OR
OH
NJ
WA
WA
OH
18
Eliminar los resultados repetidos
En algunas ocasiones obtendremos resultados que aparentemente se verán repetidos,
decimos aparentemente porque la sentencia SELECT recupera las columnas de cada
registro de la tabla especificada en el FROM, sin embargo, estos resultados pueden ser el
mismo valor para cada uno y puede darse el caso que queramos excluir de los resultados
esos valores repetidos, para eso necesitamos agregar una clausura a nuestra sentencia
SELECT, la clausura DISTINCT.
1. SELECT DISTINCT campos
2. FROM tabla
Veamos algunos ejemplos:
Lista de los estados de la tabla tiendas.
1. SELECT estado
2. FROM almacenes
estado
WA
WA
OR
OH
NJ
WA
WA
OH
En el resultado podemos notar como se repite el mismo valor según se encuentre
registrado en la base de datos.
Para excluir los registros repetidos utilizaremos la siguiente sentencia:
1. SELECT DISTINCT estado
2. FROM almacenes
estado
WA
OR
OH
NJ
19
Condicionando la búsqueda
Cuando ejecutamos la sentencia SELECT el SGDB realizará una búsqueda en la tabla
seleccionada y traerá como resultado todos los registros de esa tabla, esto no representaría
ningún problema si la cantidad de registros fuesen pocos, pero por lo general una tabla no
contiene pocos registros, sino que estos van en aumento según pasa el tiempo y según se
vallan agregando más registros a la tabla, de manera que si quiero un registro en específico
sería complicado buscar ese registro entre mil registros o peor aún entre millones de
registros.
Para dar solución a esta necesidad la sentencia SELECT provee de una clausura llama
WHERE, donde WHERE se utiliza para condicionar los resultados de una búsqueda.
La sintaxis de un SELECT con WHERE es la siguiente:
1. SELECT columnas
2. FROM tabla
3. WHERE condición
Hay que destacar que una condición es una expresión lógica, es decir es necesario hacer uso
de los operadores relacionales y operadores lógicos.
Operador
=
>
<
>=
<=
!=
Between
In
Significado
Igual que
Mayor que
Menor que
Mayor o igual que
Menor o igual que
Diferente de
Rango
Valores que Coinciden en una Lista
Observaciones:
▪
▪
▪
Los operadores <> y != son equivalentes.
Cuando la expresión utilice valores de tipo texto es necesario encerrar el texto en
comillas.
La clausura BETWEEN es utilizada para especificar rangos incluyendo el inicio y
el fin del rango
Ejemplos:
Encontrar los almacenes localizados en el estado Washington
1. SELECT codigo, ciudad, estado
2. FROM almacenes
3. WHERE estado = 'WA'
20
codigo
ciudad
estado
al-01
al-02
al-06
al-07
Seattle
Seattle
Seattle
Seattle
WA
WA
WA
WA
Encuentre aquellos almacenes cuyos idAlmacen estén entre 2 y 5
1. SELECT *
2. FROM almacenes
3. WHERE idAlmacen BETWEEN 2 AND 5
id
2
3
4
5
codigo
al-02
al-03
al-04
al-05
idEmpleadoEncargado
2
3
4
5
ciudad
Seattle
Portland
Columbus
Trenton
estado
WA
OR
OH
NJ
Encuentre los almacenes que estén en Ohio ('OH') y Washington ('WA')
1. SELECT codigo, idEmpleadoEncargado, ciudad, estado
2. FROM almacenes
3. WHERE estado in('WA','OH')
id
codigo
idEmpleadoEncargado
ciudad
estado
1
2
4
6
7
8
al-01
al-02
al-04
al-06
al-07
al-08
1
2
4
6
7
8
Seattle
Seattle
Columbus
Seattle
Seattle
Columbus
WA
WA
OH
WA
WA
OH
Además de los operadores relacionales SQL provee de operadores lógicos los cuales
permiten realizar condiciones más complejas, estos operadores son AND (y), OR (o) y
NOT (no).
El operador AND verifica que dos expresiones sean verdaderas, de ser así entonces la
consulta traerá resultados. La siguiente tabla muestra el resultado que puede dar AND
cuando sus expresiones evaluadas toman diferentes valores.
Operador AND
P Q P AND Q
V V
V
V F
F
F V
F
F F
F
21
Ejemplo de consulta con AND.
Listar los productos que tienen un precio mayor a 13 y tienen existencia mayor a 50
1. SELECT NombreProducto, PrecioUnidad, UnidadesEnExistencia
2. FROM producto
3. WHERE PrecioUnidad > 13
4. AND UnidadesEnExistencia > 50
NombreProducto
PrecioUnidad
UnidadesEnExistencia
22
25
38
21
24
55
28.5
21.05
53
120
86
104
115
79
113
76
Especias Cajun del chef Anton
Mermelada de grosellas de la abuela
Queso Manchego La Pastora
Pan de centeno crujiente estilo Gustaf's
Paté chino
Raclet de queso Courdavault
Sirope de arce
Salsa de pimiento picante de Luisiana
El operador OR verifica que al menos una de dos expresiones sea verdadera, de ser así
entonces la consulta traerá resultados. La siguiente tabla muestra el resultado que puede dar
OR cuando sus expresiones evaluadas toman diferentes valores.
Operador OR
P Q P OR Q
V V
V
V F
V
F V
V
F F
F
Hay que destacar que OR solo será falso cuando ambas expresiones sean falsas.
Ejemplo de consulta con OR.
1. SELECT NombreProducto, IdCategoria, Suspendido
2. FROM producto
3. WHERE IdCategoria = 5
4. OR Suspendido = 1
NombreProducto
Mezcla Gumbo del chef Anton
Buey Mishi Kobe
Cordero Alice Springs
Pan de centeno crujiente estilo Gustaf's
Pan fino
Refresco Guaraná Fantástica
Col fermentada Rössle
Salchicha Thüringer
Tallarines de Singapur
IdCategoria
2
6
6
5
5
1
7
6
5
Suspendido
1
1
1
0
0
1
1
1
1
22
Cereales para Filo
Empanada de carne
Gnocchi de la abuela Alicia
Raviolis Angelo
Bollos de pan de Wimmer
5
6
5
5
5
0
1
0
0
0
EL operador NOT niega o invierte el resultado de cualquier expresión, si el resultado de la
expresión es verdadero el operador NOT lo invertirá a falso, y viceversa. La siguiente tabla
muestra los posibles valores de NOT.
P
V
F
NOT P
F
V
Ejemplo de consulta utilizando NOT
Encuentre aquellos almacenes cuyos idAlmacen sean inferiores a 4 y superiores a 6
1. SELECT idAlmacen, codigo, idEmpleadoEncargado, ciudad, estado
2. FROM almacenes
3. WHERE idAlmacen NOT BETWEEN 4 AND 6
idAlmacen
codigo
1
2
3
7
8
al-01
al-02
al-03
al-07
al-08
idEmpleadoEncargado
1
2
3
7
8
ciudad
estado
Seattle
Seattle
Portland
Seattle
Columbus
WA
WA
OR
WA
OH
Listar los almacenes que no se encuentren en los estados ‘WA’ y ‘OH’
1. SELECT codigo, ciudad, estado
2. FROM almacenes
3. WHERE estado NOT IN('WA','OH')
codigo
ciudad
estado
al-03
al-05
Portland
Trenton
OR
NJ
23
4. Aritméticas y búsquedas avanzadas
Operadores aritméticos y operaciones matemáticas
En ocasione existirá la necesidad de realizar cálculos utilizando los valores de algunas
columnas, para estos fines el lenguaje SQL permite utilizar operadores aritméticos.
Operador
+
/
*
Significado
Suma
Resta
División
Multiplicación
Ejemplos:
Mostrar el monto del precio * cantidad en los detalles del pedido donde el idProducto se
igual a 11
1. SELECT IdProducto, PrecioUnidad, Cantidad, PrecioUnidad*Cantidad
2. FROM detalles_de_pedido
3. where IdProducto = 11
IdProducto
PrecioUnidad
Cantidad
PrecioUnidad*Cantidad
11
16.8
12
201.59999084472656
11
16.8
50
839.9999618530273
11
16.8
12
201.59999084472656
11
16.8
24
403.1999816894531
11
16.8
30
503.9999771118164
11
16.8
6
100.79999542236328
Alias
Un alias es un sobrenombre temporal que se le aplica a una o más columnas en el resultado
de un SELECT, es útil en resultados como los cálculos o cuando se desea utilizar un
nombre de columna diferente al que ya esté definido en la estructura de la tabla.
Nota: el nuevo nombre aplicado por el alias no es más que un apodo temporal y solo será
válido en ese resultado, la estructura de la tabla continuará siendo la misma y manteniendo
el nombre original de las columnas.
Sintaxis
1. SELECT columna as 'nuevo_nombre'
2. FROM tabla
24
Ejemplo SQL con Alias
1. SELECT IdProducto, PrecioUnidad, Cantidad, PrecioUnidad*Cantidad AS 'Total'
2. FROM detalles_de_pedido
3. WHERE IdProducto = 11
IdProducto
PrecioUnidad
Cantidad
Total
11
11
11
11
11
11
11
11
16.8
16.8
16.8
16.8
16.8
16.8
16.8
16.8
12
50
12
24
30
6
30
6
201.59999084472656
839.9999618530273
201.59999084472656
403.1999816894531
503.9999771118164
100.79999542236328
503.9999771118164
100.7999954223
Valores nulos
Un Valor nulo es un valor desconocido o simplemente y valor que no existe, esto quiere
decir que si una columna tiene un valor nulo entonces debemos asumir que no tiene
absolutamente nada.
El valor nulo es representado por la palabra NULL y esto no significa cero (0) en caso de
que los valores sean de tipo numérico, ni tampoco un espacio en blanco en el caso de que
sean caracteres.
Otro detalle a tener en cuenta es que no todas las columnas pueden contener valores NULL,
sino solo aquellas en las cuales se definió esta característica al momento de crearlas,
también podemos verificar si una columna puede contener valores nulos mirando su
estructura tal y como lo muestra la siguiente imagen.
otra cosa a tener en cuenta es que cuando se quiere establecer una condición en la clausura
La fila resaltada muestra
las características de la
columna
idEmpleadoEncargado, su
tipo, longitud y también se
puede ver como en la
columna Nulo el valor es si
WHERE en el caso de los valores NULL se debe utilizar el operador is en vez del =.
Ejemplo:
1. SELECT *
2. FROM almacenes
25
3.
WHERE idEmpleadoEncargado is NULL
O si quisiéramos que en vez de tomar en cuenta los valores NULL, sean excluidos podemos
combinarlo con el operador NOT.
Ejemplo:
1. SELECT *
2. FROM almacenes
3. WHERE idEmpleadoEncargado is NOT NULL
Uso de patrones en búsquedas
En ocasiones tendremos la necesidad de obtener resultados a partir de valores que es
posible que no recordemos con exactitud, sin embargo, puede que tengamos a mano alguna
proximidad al valor real, siendo este el caso SQL proporciona un operador llamado LIKE.
El operador LIKE trabaja apoyándose de dos comodines:
1. %: este comodín indica que existen caracteres en el lugar del patrón donde se
utilice, sin importar cuantos o cuales.
2. _: este comodín especifica que debe haber un carácter por cada _ que se utilice en el
patrón.
Veamos algunos ejemplos
Listar los productos que tengan un único carácter en el código:
1. SELECT idProducto, nombreProducto
2. FROM producto
3. WHERE IdProducto LIKE '_'
idProducto
1
2
3
4
5
6
7
8
9
nombreProducto
Té Dharamsala
Cerveza tibetana Barley
Sirope de regaliz
Especias Cajun del chef Anton
Mezcla Gumbo del chef Anton
Mermelada de grosellas de la abuela
Peras secas orgánicas del tío Bob
Salsa de arándanos Northwoods
Buey Mishi Kobe
Como podemos ver en el resultado solo se obtuvo una respuesta de 9 productos, sin
embargo, en la tabla existen más de 70 producto, ¿porque sucedió esto?, la respuesta está en
el patrón, en el patrón que se utilizó se expresa solo un único underscore (_), por lo tanto,
solo se tomaran en cuenta aquellos valores que solo tengan un solo digito.
Liste todos los productos que su idProducto inicie con 3 pero que solo tengan dos (2)
dígitos.
26
1. SELECT idProducto, nombreProducto
2. FROM producto
3. WHERE IdProducto LIKE '3_'
idProducto
30
31
32
33
34
35
36
37
38
39
nombreProducto
Arenque blanco del noroeste
Queso gorgonzola Telino
Queso Mascarpone Fabioli
Queso de cabra
Cerveza Sasquatch
Cerveza negra Steeleye
Escabeche de arenque
Salmón ahumado Gravad
Vino Côte de Blaye
Licor verde Chartreuse
En esta ocasión solo se obtuvieron aquellos productos cuyos idProducto tengan dos dígitos
pero que el primero sea el 3.
A diferencia del undersecore (_) el símbolo de porcentaje (%) funciona de una manera
distinta, el underscore (_) especifica cantidades de caracteres y deben coincidir
exactamente, sin embargo, el porcentaje (%) es algo más flexible que el underscore (_), este
solo expresa que existen cero o más caracteres en el lugar del patrón donde se coloca el %.
Veamos algunos ejemplos.
Se requieren conocer todos los productos que inicien con la letra a.
1. SELECT idProducto, nombreProducto
2. FROM producto
3. WHERE NombreProducto LIKE 'a%'
idProducto
13
30
44
45
46
nombreProducto
Algas Konbu
Arenque blanco del noroeste
Azúcar negra Malacca
Arenque ahumado
Arenque salado
Se requieren conocer todos los productos que inicien con la letra a.
1. SELECT idProducto, nombreProducto
2. FROM producto
3. WHERE NombreProducto LIKE '%a'
idProducto
1
6
nombreProducto
Té Dharamsala
Mermelada de grosellas de la abuela
27
10
12
16
24
25
33
41
43
44
56
58
65
66
68
Pez espada
Queso Manchego La Pastora
Postre de merengue Pavlova
Refresco Guaraná Fantástica
Crema de chocolate y nueces NuNuCa
Queso de cabra
Crema de almejas estilo Nueva Inglaterra
Café de Malasia
Azúcar negra Malacca
Gnocchi de la abuela Alicia
Caracoles de Borgoña
Salsa de pimiento picante de Luisiana
Especias picantes de Luisiana
Barras de pan de Escocia
Se requieren conocer todos los productos que contengan en su nombre la palabra queso.
1. SELECT idProducto, nombreProducto
2. FROM producto
3. WHERE NombreProducto LIKE '%queso%'
idProducto
11
12
31
32
33
59
69
71
72
74
nombreProducto
Queso Cabrales
Queso Manchego La Pastora
Queso gorgonzola Telino
Queso Mascarpone Fabioli
Queso de cabra
Raclet de queso Courdavault
Queso Gudbrandsdals
Crema de queso Fløtemys
Queso Mozzarella Giovanni
Queso de soja Longlife
Ordenando los resultados de la búsqueda
Cuando ejecutamos una consulta a la base de datos los datos no suelen recuperarse
ordenados o al menos no como uno esperaría, sin embargo, en SQL podemos ordenar los
resultados de una consulta agregando la clausura ORDER BY al final de una sentencia
SELECT.
1. SELECT *
2. FROM tabla
3. ORDER BY columna_1 ASC | DESC, columna_n ASC | DESC
28
O también podría ser
1.
2.
3.
4.
SELECT *
FROM tabla
WHERE expresión_logica
ORDER BY columna_1, columna_2, columna_n ASC | DESC
Lo importante a tener en cuenta es que la clausura ORDER BY siempre debe ir al final de
una consulta.
Veamos unos ejemplos
Listar el nombre de los productos con idProducto inferior a 10 y ordenarlo de menor a
mayor.
1.
2.
3.
4.
SELECT IdProducto, NombreProducto
FROM producto
WHERE idProducto < 10
ORDER BY IdProducto ASC
IdProducto
1
2
3
4
5
6
7
8
9
NombreProducto
Té Dharamsala
Cerveza tibetana Barley
Sirope de regaliz
Especias Cajun del chef Anton
Mezcla Gumbo del chef Anton
Mermelada de grosellas de la abuela
Peras secas orgánicas del tío Bob
Salsa de arándanos Northwoods
Buey Mishi Kobe
Si en cambio queremos ordenar de mayor a menor entonces tenemos que cambiar la
clausura ASC por DESC.
1.
2.
3.
4.
SELECT IdProducto, NombreProducto
FROM producto
WHERE idProducto < 10
ORDER BY IdProducto DESC
IdProducto
9
8
7
6
5
4
3
2
1
NombreProducto
Buey Mishi Kobe
Salsa de arándanos Northwoods
Peras secas orgánicas del tío Bob
Mermelada de grosellas de la abuela
Mezcla Gumbo del chef Anton
Especias Cajun del chef Anton
Sirope de regaliz
Cerveza tibetana Barley
Té Dharamsala
29
También el ordenamiento se puede hacer tomando en cuenta más de una columna, se
ordenan los resultados por orden de aparición.
Listar los nombres de los empleados ordenados primero por nombre y luego por apellido.
1. SELECT Nombre, Apellidos, Ciudad
2. FROM empleado
3. ORDER BY Nombre, Apellidos
Nombre
Andrew
Anne
Janet
Laura
Margaret
Michael
Nancy
Robert
Steven
1
Apellidos
Fuller
Dodsworth
Leverling
Callahan
Peacock
Suyama
Davolio
King
Buchanan
2
Ciudad
Tacoma
Londres
Kirkland
Seattle
Redmond
Londres
Seattle
Londres
Londres
Nota: cuando no se especifica el tipo de ordenamiento (ASC o DESC) por defecto se aplica
el ASC.
Funciones de agregación
Las funciones de agregación son funciones que reciben como entrada una colección de
valores y dan como resultado un solo valor. SQL cuenta con cinco (5) funciones de
agregación.
●
●
●
●
●
Promedio: AVG
Mínimo: MIN
Máximo: MAX
Total: SUM
Conteo: COUNT
Las funciones SUM y AVG solo reciben valores numéricos, sin embargo, MAX, MIN y
COUNT pueden recibir otros valores no numéricos como cadena de caracteres y fechas.
Nota: algo importante a tener en cuenta es que no es posible utilizar las funciones de
agregación en la clausura WHERE con finalidad de utilizarlas para condicionar los
resultados.
Por ejemplo, si se quisiera saber el precio máximo de los productos la consulta sería:
1. SELECT MAX(PrecioUnidad)
2. FROM producto
MAX(PrecioUnidad)
263.5
30
Como notaremos el resultado fue solamente un único registro con solo una columna, si
agregásemos otras columnas el resultado seguirá siendo un único registro y los valores de
las otras columnas no siempre coincide con el de la función de totalización.
En este ejemplo de código podemos agregar un alias para mejorar la visualización del
resultado.
1. SELECT MAX(PrecioUnidad) AS 'Precio Máximo'
2. FROM producto
Precio Máximo
263.5
Si quisiéramos saber cuántos pedidos se realizaron entre julio del 1996 y agosto de 1996:
1. SELECT COUNT(*) AS 'Total Pedido'
2. FROM pedido
3. WHERE FechaPedido BETWEEN '1996-07-01' AND '1996-08-01'
Total Pedido
24
Un detalle que tomar en cuenta es que la función de agregación SUM no tiene el mismo
funcionamiento que COUNT, la función SUM toma cada valor de la columna pasada como
parámetro y el resultado es la suma de todos los valores, en cambio COUNT cuenta el
número de registros.
Por ejemplo:
Se quiere conocer el monto total de los cargos aplicados a todos los pedidos:
1. SELECT SUM(Cargo) AS 'Monto Total'
2. FROM pedido
Monto Total
64942.69004831835
6
Agrupar resultados
La acción de agrupar resultados en SQL consiste en crear grupos con los valores similares,
mostrando únicamente cada grupo sin repetición en el resultado, es posible que se confunda
con la clausura DISTINCT, aunque su resultado sea similar en algunos casos, su
funcionamiento es diferente.
La cláusula GROUP BY divide los datos en grupos.
-
Usualmente es usada con funciones de totalización en la lista del SELECT.
Todos los valores nulos, son tratados como un grupo más.
31
-
La cláusula WHERE elimina las filas antes de agruparlas.
La cláusula HAVING aplica condiciones a los grupos
También es importante mencionar que esta clausura GROUP BY, se utiliza muy a menudo
con las funciones de agregación SUM, COUNT, AVG, MAX y MIN.
Su sintaxis es la siguiente:
1.
2.
3.
4.
5.
SELECT columna(s)
FROM tabla
WHERE condición
GROUP BY columna(s)
ORDER BY columna(s)
Ejemplos
Conocer el número de almacenes por ciudad:
1. SELECT ciudad, COUNT(*) as 'Total'
2. FROM almacenes
3. GROUP BY ciudad
ciudad
Columbus
Portland
Seattle
Trenton
Total
2
1
4
1
Como podremos notar en el resultado de esta consulta, aunque se utilizó funciones de
agregación no se obtuvo un único registro o fila, sino que la clausura ORDER BY agrupó
los valores iguales y luego se le aplicó a cada grupo la función COUNT contando los
valores de cada grupo y mostrando cada resultado de cada grupo individualmente.
Anteriormente se realizó una nota donde se especificó que no es posible utilizar las
funciones de agregación en la clausura WHERE, sin embargo, la clausura ORDER BY,
también puede ser acompañada de otra clausura llama HAVING la cual actúa como una
especie de WHERE la cual actúa sobre los resultados de ORDER BY y esta si permite el
uso de las funciones de agregación SUM, COUNT, AVG, MAX y MIN.
Su sintaxis es:
1.
2.
3.
4.
5.
6.
SELECT columna(s)
FROM tabla
WHERE condición
GROUP BY columna(s)
HAVING condición
ORDER BY columna(s)
Hay que destacar que tanto WHERE, HAVING y ORDER BY son opcionales, pero si se
piensa en utilizarlas este sería el orden correcto.
32
Ejemplos de LEFT JOIN
Listar la cantidad empleados con fecha de contratación mayor o igual al 1994 agrupado por
cargo.
1.
2.
3.
4.
SELECT cargo, FechaContratación, count(*) AS 'total'
FROM empleado
GROUP BY FechaContratación, cargo
HAVING FechaContratación >= '1994-01-01'
cargo
Representante de ventas
Coordinador ventas interno
Representante de ventas
FechaContratación
1994-01-02
1994-03-05
1994-11-15
total
1
1
1
33
5. Recuperar datos desde varias tablas
El modelo relacional utilizado en SQL permite crear una estructura donde los datos son
almacenados en tablas, estas tablas almacenan información de forma relacionada, es decir
una tabla puede tener una relación con una o más tablas, esto permite que se pueda obtener
datos coherentes desde varias tablas.
Para poder llevar esta relación eficientemente en el lenguaje SQL se utilizan llaves o claves
(ver unidad 1 llave primaria y foránea), estas llaves permiten llevar a cabo dicha relación,
ya que vienen a ser campos comunes en las diferentes tablas y esto permitirá saber cuál fila
en una tabla especifica tiene relación con otra(s) fila(s) en otra(s) tabla(s).
Operaciones con dos tablas o mas
Para realizar recuperación de datos con dos o más tablas hay que tener en cuenta las llaves,
y el proceso consiste en una especie de comparación llama JOIN (unión o cruce), del cual
existen diferentes tipos de uniones de tablas:
●
●
●
●
●
●
INNER JOIN
LEFT JOIN
RIGHT JOIN
CROSS JOIN
NATURAL JOIN
SELF JOIN
Cada tipo de JOIN ofrece su propia ventaja y debe ser utilizado según la necesidad.
Inner join
Permite recuperar las filas de dos o más tablas donde los valores de las columnas utilizadas
en la condición del JOIN coincidan, las filas que no tengan coincidencias son excluidas del
resultado.
La sintaxis del INNER JOIN es la siguiente:
1.
2.
3.
4.
SELECT tabla1.columna(s), tabla2.columna(s)
FROM tabla1
INNER JOIN tabla2
ON tabla1.columna = tabla2.columna
34
O agregando las demás clausuras:
1.
2.
3.
4.
5.
6.
7.
SELECT tabla1.columna(s), tabla2.columna(s)
FROM tabla1
INNER JOIN tabla2
ON tabla1.columna = tabla2.columna
WHERE condición
GROUP BY tabla1.columna(s) | tabla2.columna(s)
ORDER BY tabla1.columna(s) | tabla2.columna(s)
Explicación:
En el SELECT se especifican las columnas separadas por coma, hasta el momento solo
habíamos seleccionado las columnas por sus nombres, pero cuando realizamos un JOIN
debemos especificar el nombre de la tabla de donde queremos obtener las columnas
seguido por un punto (.) y luego el nombre de la columna, esto se debe a que pueden existir
columnas con el mismo nombre en diferentes tablas y si no somos específicos resultara en
un error de ambigüedad.
En la clausura FROM se sigue especificando la tabla de donde se recuperarán los datos,
pero ahora se le agrega la clausura INNER seguida de JOIN y el nombre de la tabla, la
clausura ON es parte del JOIN y es la que establece la condición que permitirá determinar
cuáles filas serán recuperadas de las tablas involucradas en el JOIN.
Luego si deseamos agregar un WHERE para establecer una condición adicional, o si
queremos agrupar con GROUP BY, y finalmente podemos ordenar utilizando ORDER
BY. Cada una de estas clausuras son opcionales, pero deben especificarse en el orden
señalado en la sintaxis.
Algunos ejemplos:
Conocer el nombre del encargado de cada almacén y la ciudad donde están ubicados.
1.
2.
3.
4.
SELECT almacenes.codigo, empleado.Nombre, empleado.ciudad
FROM almacenes
INNER JOIN empleado
ON almacenes.idEmpleadoEncargado = empleado.IdEmpleado
codigo
al-01
al-02
al-03
al-05
al-06
al-08
Nombre
Nancy
Andrew
Janet
Steven
Michael
Laura
ciudad
Seattle
Tacoma
Kirkland
Londres
Londres
Seattle
Si observamos las tablas utilizadas en este JOIN podremos notar que ambas tablas poseen
una columna que vincula o más bien relaciona ambas tablas.
También si observamos los códigos al-02 y al-07 no fueron recuperados en los resultados
debido a que específicamente esas filas tienen en su columna idEmpleadoEncargado el
35
valor NULL, y ya sabemos que NULL equivale a nada. Por lo tanto, al no tener un valor
asignado no se toman en cuenta en la evaluación efectuada por la clausura ON del INNER
JOIN.
Tabla Empleado
Tabla almacenes
Lo ideal es que tenga el mismo nombre, pero puede darse el caso de que no sean de igual
nombre, como lo es el ejemplo anterior.
36
Left Join
El LEFT JOIN es similar al INNER JOIN, inclusive la sintaxis es la misma, la única
diferencia es que en vez de INNER la palabra es cambiada por LEFT. Otra diferencia es su
funcionamiento, a diferencia del INNER JOIN donde solo se recuperan las filas que
coinciden en valor en la clausura ON, en el LEFT JOIN se recuperan todos los registros de
la tabla ubicada en la clausura FROM y solo aquellas filas de la tabla ubicada en el LEFT
JOIN que coinciden en valor en la clausura ON.
De forma resumida podemos decir que el LEFT JOIN recupera todas las filas de la tabla
ubicada en el FROM y solo lo que coincide de la tabla ubicada en el LEFT JOIN.
Su sintaxis:
1.
2.
3.
4.
SELECT tabla1.columna(s), tabla2.columna(s)
FROM tabla1
LEFT JOIN tabla2
ON tabla1.columna = tabla2.columna
O podría ser completo:
1.
2.
3.
4.
5.
6.
7.
SELECT tabla1.columna(s), tabla2.columna(s)
FROM tabla1
LEFT JOIN tabla2
ON tabla1.columna = tabla2.columna
WHERE condición
GROUP BY tabla1.columna(s) | tabla2.columna(s)
ORDER BY tabla1.columna(s) | tabla2.columna(s)
Utilizaremos la consulta anterior, pero en esta ocasión cambiaremos la clausura INNER
JOIN por LEFT JOIN
1. SELECT almacenes.codigo, empleado.Nombre, empleado.ciudad
2. FROM almacenes
3. LEFT JOIN empleado
37
4. ON almacenes.idEmpleadoEncargado = empleado.IdEmpleado
5. ORDER BY almacenes.codigo
codigo
al-01
al-02
al-03
al-04
al-05
al-06
al-07
al-08
Nombre
Nancy
Andrew
Janet
NULL
Steven
Michael
NULL
Laura
ciudad
Seattle
Tacoma
Kirkland
NULL
Londres
Londres
NULL
Seattle
En este resultado los códigos al-04 y al-07 fueron excluidos del resultado, sin embargo, en
el campo nombre y ciudad que pertenecen a la tabla empleado tiene el valor NULL debido
a que el idEmpleadoEncargado de los códigos al-04 y al-07 no tienen un idEmpleado
asignado, por lo tanto, es imposible encontrar un valor que coincida con ellos.
Right Join
El RIGHT JOIN a diferencia del LEFT JOIN solo incluye en el resultado los registros
que coinciden con la condición de la clausura ON, sin embargo, se recuperan todos los
registros ubicados en la clausura RIGHT JOIN.
De forma resumida podemos decir que el RIGHT JOIN recupera todas las filas de la tabla
ubicada en el FROM y solo lo que coincide de la tabla ubicada en el LEFT JOIN.
Su sintaxis:
1.
2.
3.
4.
SELECT tabla1.columna(s), tabla2.columna(s)
FROM tabla1
LEFT JOIN tabla2
ON tabla1.columna = tabla2.columna
38
O podría ser completo:
1.
2.
3.
4.
5.
6.
7.
SELECT tabla1.columna(s), tabla2.columna(s)
FROM tabla1
LEFT JOIN tabla2
ON tabla1.columna = tabla2.columna
WHERE condición
GROUP BY tabla1.columna(s) | tabla2.columna(s)
ORDER BY tabla1.columna(s) | tabla2.columna(s)
Utilizaremos la consulta anterior, pero en esta ocasión cambiaremos la clausura left join
por right join
1.
2.
3.
4.
5.
SELECT almacenes.codigo, empleado.Nombre, empleado.ciudad
FROM almacenes
RIGHT JOIN empleado
ON almacenes.idEmpleadoEncargado = empleado.IdEmpleado
ORDER BY almacenes.codigo
En el resultado podemos notar que todos los registros de la tabla empleado fueron
recuperados, pero no sucedió los mismo con los registros de la tabla almacenes ya que solo
se recuperaron los almacenes que tienen valores en el campo idEmpleadoEncargado
diferente de NULL y es un valor que existe en el campo idEmpleado en la tabla
empleado.
codigo
NULL
NULL
NULL
al-01
al-02
al-03
al-05
al-06
al-08
Nombre
Anne
Margaret
Robert
Nancy
Andrew
Janet
Steven
Michael
Laura
ciudad
Londres
Redmond
Londres
Seattle
Tacoma
Kirkland
Londres
Londres
Seattle
39
Cross Join
El CROSS JOIN presenta el producto cartesiano de las filas de las tablas cruzadas. El
resultado tendrá todos los registros de la tabla ubicada en el FROM izquierda combinados
con cada uno de los registros de la tabla ubicada en CROSS JOIN.
Algo que debemos destacar es que no se utiliza la clausura ON para establecer condiciones.
1. SELECT *
2. FROM almacenes CROSS JOIN empleado
Natural Join
El NATURAL JOIN es una simplificación de INNER JOIN con la característica de que
cuando los campos de las tablas que serán utilizadas en el JOIN, dígase los campos por los
cuales serán comparados los valores en la clausura on, tienen el mismo nombre se puede
omitir el uso de la clausura ON, y el NATURAL JOIN se encargará de comparar las
coincidencias y el resultado será el mismo que un INNER JOIN con la clausura ON.
Si los campos no tienen el mismo nombre, entonces no se recomienda utilizarlo.
Ejemplos:
1.
2.
3.
4.
SELECT producto.NombreProducto, categoria.NombreCategoria
FROM producto
NATURAL JOIN categoria
WHERE IdProducto < 10
su equivalente en INNER JOIN sería el siguiente:
6.
7.
8.
9.
10.
SELECT producto.NombreProducto, categoria.NombreCategoria
FROM producto
INNER JOIN categoria
ON producto.IdCategoria = categoria.IdCategoria
WHERE IdProducto < 10
40
El resultado de ambas consultas será el mismo:
NombreProducto
Té Dharamsala
Cerveza tibetana Barley
Sirope de regaliz
Especias Cajun del chef Anton
Mezcla Gumbo del chef Anton
Mermelada de grosellas de la abuela
Peras secas orgánicas del tío Bob
Salsa de arándanos Northwoods
Buey Mishi Kobe
NombreCategoria
Bebidas
Bebidas
Condimentos
Condimentos
Condimentos
Condimentos
Frutas/Verduras
Condimentos
Carnes
Alias en las tablas
En el subtema del alias vimos como renombrar temporalmente el nombre de las columnas,
también existe la posibilidad de renombrar el nombre de las tablas, pero a diferencia de las
columnas cuyo propósito es una mejor presentación de los datos, cuando se renombra una
tabla se hace para realizar consultas con más facilidad.
Tomaremos como ejemplo la consulta anterior, pero ahora utilizaremos el alias.
1.
2.
3.
4.
5.
6.
SELECT prod.NombreProducto, cat.NombreCategoria, prov.NombreEmpresa
FROM producto AS prod
INNER JOIN categoria AS cat
ON prod.IdCategoria = cat.IdCategoria
INNER JOIN proveedor AS prov
ON prod.IdProveedor = prov.IdProveedor
Si observamos, una vez colocada el alias a la tabla, es posible utilizarla en cualquier parte
de la consulta, esto es útil cuando se realizan consultas largas con nombre de tablas largos y
se necesitan seleccionar muchos campos.
Self Join
El self join no es más que hacer un join a una tabla consigo misma.
¿Cuál sería la finalidad?, simple, comparar los datos de una tabla consigo mismo, en los
joins se ha mostrado como unir tablas mediante campos relacionado, y recuperar valores
por coincidencias, pero cuando se necesita comparar los datos de una tabla con los mismos
datos de esta entonces tenemos solo dos (2) opciones:
1- Crear otra tabla y copiar los registros de la primera en la segunda y luego comparar
2- Utilizar self join.
Ahora bien, para poder realizar el self join es necesario el uso de alias, la temática es
utilizar un alias diferente para la misma tabla, de manera que SQL creerá que son dos tablas
distintas.
41
Ejemplos:
Listar todos los almacenes que tienen el mismo encargado:
1.
2.
3.
4.
5.
6.
SELECT a1.codigo, a1.idEmpleadoEncargado
FROM almacen AS a1
INNER JOIN almacen AS a2
ON a1.idAlmacen != a2.idAlmacen
AND a1.idEmpleadoEncargado = a2.idEmpleadoEncargado
ORDER BY a1.idEmpleadoEncargado
Almacen
al-10
al-06
al-09
al-08
idEmpleadoEncargado
6
6
8
8
Join con más de dos tablas
Cuando se utiliza el modelo relacional de bases de datos junto con el lenguaje SQL es
100% seguro que existan relaciones con mas de dos (2) tabla, es decir existen tablas que
tienen mas de una (1) llave foránea, y también una tabla se relaciona con otras tantas según
fuese necesario.
Entonces los joins no solo deben limitarse a unir o cruzar solo dos (2) tablas, sino que
según los requerimientos de la consulta serán los join que estarán en ella.
Ejemplo:
Listar los nombres de productos con su categoría y proveedor.
1.
2.
3.
4.
5.
6.
SELECT producto.NombreProducto, categoria.NombreCategoria, proveedor.NombreEmpresa
FROM producto
INNER JOIN categoria
ON producto.IdCategoria = categoria.IdCategoria
INNER JOIN proveedor
ON producto.IdProveedor = proveedor.IdProveedor
NombreProducto
Té Dharamsala
Cerveza tibetana Barley
Sirope de regaliz
Especias Cajun del chef Anton
Mezcla Gumbo del chef Anton
Mermelada de grosellas de la …
Peras secas orgánicas del tío Bob
Salsa de arándanos Northwoods
Buey Mishi Kobe
Pez espada
Queso Cabrales
NombreCategoria
Bebidas
Bebidas
Condimentos
Condimentos
Condimentos
Condimentos
Frutas/Verduras
Condimentos
Carnes
Pescado/Marisco
Lácteos
NombreEmpresa
Exotic Liquids
Exotic Liquids
Exotic Liquids
New Orleans Cajun Delights
New Orleans Cajun Delights
Grandma Kelly's Homestead
Grandma Kelly's Homestead
Grandma Kelly's Homestead
Tokyo Traders
Tokyo Traders
Cooperativa de Quesos 'Las Cabras'
Queso Manchego La Pastora
Lácteos
Cooperativa de Quesos 'Las Cabras'
Algas Konbu
Pescado/Marisco
Mayumi's
42
Subquery
Los subquery o consultas anidadas, tiene relación con la posibilidad de ocupar cláusulas
select dentro de otros select. Estas consultas anidadas, pueden tener uno o más select en su
interior.
Algunos puntos para tomar en cuenta al momento de realizar un subquery:
-
Un subquery es una instrucción select, usada como expresión en la clausura where.
Puede ser utilizada como parte de otra instrucción select, update, insert o delete.
Puede ser utilizada como columna en la instrucción select.
El subquery es ejecutado y los resultados son utilizados dentro de la consulta que lo
invocó.
Si la cláusula where de la consulta principal incluye un nombre de columna, esta
debe ser del mismo tipo de dato que la columna retornada por el subquery.
Los subqueries, no pueden tener la cláusula order by en su sintaxis.
La cláusula distinct no puede ser usada por subqueries que incluyen una cláusula
group by.
El subquery, puede ir en la cláusula where o having.
Los subqueries usados con in o not in pueden retornar cero o más filas.
Los subqueries usados con operadores relacionales (=, >, >=, <, <=, !=) deben
retornar sólo un valor dígase una fila con una sola columna, sino ocurrirá un error.
Ejemplos:
Listar los productos que pertenecen a la categoría bebidas:
1. SELECT NombreProducto
2. FROM producto
3. WHERE IdCategoria = (SELECT IdCategoria
4.
FROM categoria
5.
WHERE nombreCategoria = 'bebidas')
NombreProducto
Té Dharamsala
Cerveza tibetana Barley
Refresco Guaraná Fantástica
Cerveza Sasquatch
Cerveza negra Steeleye
Vino Côte de Blaye
Licor verde Chartreuse
Café de Malasia
Cerveza Laughing Lumberjack
Cerveza Outback
Cerveza Klosterbier Rhönbräu
Licor Cloudberry
43
Listar los productos con idProducto inferior a 10 y su categoría:
1.
2.
3.
4.
5.
6.
SELECT NombreProducto,
(SELECT nombreCategoria
FROM categoria
WHERE categoria.idCategoria = producto.idCategoria ) AS 'categoria'
FROM producto
WHERE IdProducto < 10
NombreProducto
Té Dharamsala
Cerveza tibetana Barley
Sirope de regaliz
Especias Cajun del chef Anton
Mezcla Gumbo del chef Anton
Mermelada de grosellas de la abuela
Peras secas orgánicas del tío Bob
Salsa de arándanos Northwoods
Buey Mishi Kobe
categoria
Bebidas
Bebidas
Condimentos
Condimentos
Condimentos
Condimentos
Frutas/Verduras
Condimentos
Carnes
¿Cuál es la diferencia de rendimiento entre un subquery y un join?
¿Cuándo es recomendado utilizar uno o el otro?
Union
-
Permite combinar el resultado de más de un select
El número de uniones es indefinido o ilimitado.
Los select utilizados en las uniones deben tener el mismo número de campos
El resultado es ordenado.
Se descartan las filas repetidas (a menos que se use union all)
Los campos deben ser del mismo tipo de dato.
Los nombres de las columnas del resultado se toman del primer select, si se desea
cambiar el nombre, entonces utilizar alias en las columnas del primer select.
La cláusula group by sólo debe aparecer en las select individuales
No se acepta order by en los select individuales, se debe utilizar un solo y debe ir
ubicado al final de las uniones.
Ejemplo:
Listar el nombre, ciudad y país de los empleados, clientes y proveedores:
1.
2.
3.
4.
5.
6.
SELECT nombre, ciudad, Pais FROM empleado
UNION
SELECT nombreempresa, ciudad, pais FROM cliente
UNION
SELECT nombreempresa, ciudad, pais FROM proveedor
ORDER BY nombre
44
El resultado obtenido serán todos los registros de cada tabla, en la siguiente tabla solo se
mostrarán los primeros 10.
nombre
Alfreds Futterkiste
Ana Trujillo Emparedados y helados
Andrew
Anne
Antonio Moreno Taquería
Around the Horn
Aux joyeux ecclésiastiques
B's Beverages
Berglunds snabbköp
Bigfoot Breweries
ciudad
Berlín
México D.F.
Tacoma
Londres
México D.F.
Londres
París
Londres
Luleå
Bend
pais
Alemania
México
EE. UU.
Reino Unido
México
Reino Unido
Francia
Reino Unido
Suecia
Estados Unido
45
11.
Manipulación de los datos
Insertar registros
Las bases de datos contienen datos que son utilizadas por aplicaciones, programas y
paginas web, pero esos datos proceden de algún lugar, para que existan datos en una base
de datos primero hay que introducirlos.
Para introducir datos utilizaremos la sentencia INSERT, su sintaxis:
1. INSERT INTO [nombre_tabla]([columna_1, columna_2,columna_n])
2. VALUES ([valor_columna_1], [valor_columna_2], [valor_columna_n])
Tenemos que tomar en cuenta las siguientes observaciones:
-
No es necesario que el orden de las columnas coincida con el orden que tiene la
estructura de la tabla.
El orden de los valores debe coincidir con el orden de las columnas en el INSERT
-
INSERT INTO almacen(
ciudad,
estado,
idAlmacen,
codigo,
idEmpleadoEncargado
)
VALUES('Los Angeles', 'CA', 11, 'al-11', 5)
-
No es obligatorio introducir valores en todas las columnas.
1. INSERT INTO `almacen`(
2.
ciudad,
3.
estado,
4.
codigo
5. )
6. VALUES('Portland', 'OR', 'al-12')
En este INSERT se omitieron dos (2) columnas, idAlmacen y
idEmpleadoEncargado, la primera es la llave primaria y tiene una configuración
para que se auto incremente, esto quiere decir que si introduzco un registro y no le
pongo valor al idAlmacen entonces él toma el siguiente valor de la secuencia.
En el caso del idEmpleadoEncargado al no introducirle valor este tomara el valor
NULL, esto se debe a que en la estructura está definido como que puede recibir
NULL.
-
Si no se especifican columnas en el INSERT, es obligatorio introducir todos los
valores de todas las columnas de la tabla en el orden de la estructura.
1. INSERT INTO almacen
2. VALUES(13,'al-13',7,'Portland', 'OR')
-
Es posible insertar varios registros al mismo tiempo en una sola sentencia INSERT.
1. INSERT INTO almacen(codigo, idEmpleadoEncargado, ciudad, estado)
46
2.
3.
4.
5.
6.
7.
VALUES
('al-14',5,'Los Angeles', 'CA'),
('al-15',1,'Seatle', 'WA'),
('al-16',6,'Columbus', 'OH'),
('al-17',3,'Los Angeles', 'CA'),
('al-18',2,'Portland', 'OR')
-
Si se utiliza un SELECT para introducir los datos, las columnas devueltas por el
SELECT deben coincidir en tipo de dato, y el número de columnas debe ser la
misma cantidad especificada en el INSERT.
1. INSERT INTO tabla_1 (columna_1, coluna_2, columna_n)
2. SELECT columna_1, columna_2, columna_n
3. FROM tabla_2
Modificar registros
La cláusula UPDATE cambia los valores de una o más columnas en una tabla, su sintaxis:
1.
2.
3.
4.
5.
6.
UPDATE almacen
SET
columna_1 = nuevo_valor,
columna_2 = nuevo_valor,
columna_n = nuevo_valor
WHERE condicion
No es obligatorio modificar todas las columnas, solo se debe(n) colocar esa(s) columna(s)
que queremos hacer cambio en su valor.
Asignar un encargado al almacén con código al-04:
1.
2.
3.
4.
5.
UPDATE almacen
SET
idEmpleadoEncargado = 2
WHERE
codigo = 'al-04'
Eliminar registros
Para eliminar registros utilizaremos la sentencia DELETE, esta borra registros de una tabla.
Sintaxis:
1. DELETE FROM tabla
2. WHERE columna = valor
Eliminar el almacén con el código al-04.
1. DELETE FROM almacen
2. WHERE codigo = 'al-04'
47
12. Bibliografía
G. Taylor (2019). SQL for Dummies
Guerrero Saldivia (1999). Apuntes de SQL
Silberschatz, Korth y Sudarshan (2006). Fundamentos de bases de datos Quinta edición.
48
Descargar