Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1 Manual SQL
1 Manual SQL
de
Programación
SQL
Índice
1.Introducción a SQL......................................................................................................................................... 4
1.2.Cláusulas ..................................................................................................................................................... 5
2.2.Ejercicios ................................................................................................................................................ 13
3.1.Ejercicios ................................................................................................................................................. 18
4.5.Ejercicios ................................................................................................................................................ 23
5.3.Ejercicios ................................................................................................................................................ 27
8.Subconsultas I ............................................................................................................................................... 37
9.Subconsultas II ............................................................................................................................................. 39
10.1.Consultas de actualización.................................................................................................................. 42
10.3.Ejercicios .............................................................................................................................................. 44
11.Consultas de acción II ................................................................................................................................ 47
13.1.Ejercicios ............................................................................................................................................... 53
14.1.Create Table.......................................................................................................................................... 55
16.Índices ........................................................................................................................................................... 63
4
1.1.Grupos de comando
1.2.Cláusulas
Es importante decir que no todas las instrucciones SQL tienen que componerse
así. Lo que sí necesariamente tienen que tener es comando(s) y cláusula(s).
5
1.4.Primera instrucción SQL
6
Una vez allí, tenemos que cotejar que el formato sea de Hoja de Cálculo y que
todas las Opciones específicas al formato estén seleccionadas:
7
De esta manera, la base de datos curso_sql tiene esta estructura:
Tal como vemos, lo que se desprende de la consulta son todos los registros,
aunque solamente podemos visualizar la empresa, la dirección y la población.
8
2.Cláusulas y operadores
9
Dicho todo esto, es importante que tengamos presente el orden de escritura:
Lo que estamos solicitando aquí es que nos muestre el nombre y el precio de los
artículos que se encuentren en la sección de cerámica. Este es el resultado final
de la consulta:
Un segundo ejemplo sería el de realizar una consulta, pidiendo que nos muestre
el precio y el nombre de todos los artículos pertenecientes a las secciones de
cerámica y deportes:
10
Tal como se puede observar, aquí utilizamos el operador lógico OR ya que
nuestro objetivo es que cumpla una u otra condición. No podríamos ponerle AND
ya que eso implicaría que cumpliera las dos condiciones al mismo tiempo.
Un tercer ejemplo de consulta es que queremos que nos muestre todos los
campos de la tabla, estableciendo como criterio que solamente nos traiga los
productos de la sección deportes, cuyo país de origen sea Estados Unidos:
Hecho todo esto, ahora queremos realizar consultas, pero hay un problema con el
tipo de datos. Para ello, eliminamos a la tabla PRODUCTOS y la volvemos a
11
importar. No obstante, antes de volverla a importar, debemos hacer unas
modificaciones en el archivo de origen (es decir, desde el cual importaremos la
tabla). Establecemos que los valores del campo precio (no el título) serán de tipo
moneda, mientras que a los valores del campo fecha (no el título) los tenemos que
personalizar (yyyy-mm-dd o aaaa-mm-dd). La configuración varía según la
versión de MS Excel. Realizado esto, volvemos a importa la tabla PRODUCTOS a
nuestra Base de Datos curso_sql.
Aquí podemos observar que, efectivamente, el campo PRECIO ahora tiene datos
de tipo decimal. Sin embargo, el campo FECHA sigue siendo varchar. Por este
motivo, debemos de modificarlo ingresando en el botón de Cambiar y sustituir
DATE por VARCHAR. Una vez que lo guardamos, esto es lo que nos aparece como
resultado:
12
En esta ocasión, estamos solicitando que nos muestre todos los artículos de la
tabla PRODUCTOS que sean de marzo y de abril. Para ello, hemos utilizado el
operador de comparación BEWTEEN acompañado del operador lógico AND. El
resultado será:
2.2.Ejercicios
La sentencia es:
Y, el resultado:
13
La sentencia es:
Y, el resultado:
La sentencia es:
Y, el resultado:
14
La sentencia es:
Y, el resultado:
La sentencia es:
15
Y, el resultado:
La sentencia es:
Y, el resultado:
16
3.Cláusula ORDER BY. Ordenando registros
En este capítulo veremos cómo ordenar los registros de una consulta SQL con
la cláusula Order By.
17
3.1.Ejercicios
La sentencia es:
Y, el resultado:
La sentencia es:
18
Y, el resultado:
La sentencia es:
Y, el resultado:
19
4.Consultas de agrupación o totales
4.1.Agrupando y sumando
Esta sentencia SQL lo que solicita es poder ver cuánto es el valor total de los
precios por sección. Para ello, tenemos que crear un campo de agrupación
(SECCIÓN) y un campo de suma (PRECIO). A su vez, tenemos que utilizar un
alias (en SQL, los alias se escriben AS). Para indicar el campo por el cual
agruparemos se utilizar la instrucción GROUP BY y para ordenar el precio
usamos la instrucción ORDER BY y le ponemos el campo que recibió un alias.
20
Pulsamos en continuar y este habrá de ser el resultado de la consulta:
Tal como vemos, ocurrieron dos cosas. La primera es que el campo PRECIO ahora
se llama SUMA_ARTICULOS y, en segundo lugar, damos cuenta que los artículos
fueron ordenados de menor a mayor en función del total de sus valores.
El resultado será:
En este caso, veremos cómo agrupar y contar a los clientes según su población.
Es decir, cuántos hay de cada provincia española.
21
Por tanto, la sentencia es:
En este caso, veremos cómo agrupar y encontrar al valor máximo de todos los
artículos de la sección “Confección”.
Y, el resultado:
22
4.5.Ejercicios
La sentencia es:
Y, el resultado:
23
La sentencia es:
Esta es la sentencia:
24
Siendo el resultado de la consulta:
Esta es la sentencia:
Siendo el resultado:
5.Consultas de cálculo
En este capítulo veremos cómo realizar consultas de cálculo con SQL. Veremos
también el uso de algunas funciones frecuentes de fecha y formato.
5.1.Consultas de cálculo
La sentencia es:
25
Es importante notar que cuando queremos hacer uso de la instrucción ROUND, la
sintaxis es: ROUND(Expresión, cantidad de decimales). El resultado de la
consulta habrá de ser:
La sentencia es:
Siendo el resultado:
26
5.2.Consultas de fecha
En este tramo aprenderemos a cómo crear consultas de fecha. Por tanto, aquí
veremos las siguientes funciones:
5.3.Ejercicios
La sentencia es:
27
Y el resultado:
La sentencia es:
Y el resultado es:
La sentencia es:
28
Y el resultado es:
29
Veamos un primer ejemplo en el cual lo que se pretende es unir en una sola
consulta a las secciones de DEPORTES y de DEPORTES DE RIESGO de ambas
tablas.
La sentencia es:
Es importante aclarar aquí que el criterio de búsqueda no tiene por qué ser
necesariamente el mismo. En consecuencia, veamos cómo se unen dos tablas, pero
con diferentes criterios de consulta. Por tanto, la sentencia sería:
30
Tal como podemos observar, en esta segunda consulta hemos unidos a aquellos
artículos de la tabla PRODUCTOS, cuyo precio es superior a 500, con los
artículos de la tabla PRODUCTOSNUEVOS que pertenezcan a la sección de alta
costura.
31
7.Consultas Multitabla II (consultas de unión interna)
Veamos un esquema:
32
Pulsamos Continuar en la zona de creación de índices y emerge lo siguiente:
33
Hacemos lo mismo para la tabla PEDIDOS:
34
Quedando su estructura de la siguiente manera:
35
De esta manera queda por finalizado el proceso de relacionamiento.
36
8.Subconsultas I
Para poder trabajar con las subconsultas es necesario que tengamos presente a
los distintos operadores:
8.1.Subconsulta escalonada
Veamos un ejemplo:
37
Tal como podemos ver, estamos solicitando que nos muestre todos los productos
cuyo precio sea menor al promedio/media. El resultado será:
8.2.Subconsulta de lista
Esta consulta se traduce en que nos muestre todos los registros que tengan un
precio más alto que el registro perteneciente a la sección cerámica con precio
más alto. El resultado es:
38
9.Subconsultas II
Para ello, nos vamos a ACCESS. Pulsamos en la pestaña CREAR y luego hacemos
click en Diseño de consulta:
Aparece lo siguiente:
39
Pulsamos en Ejecutar y veremos el resultado:
El objetivo de esta consulta es mostrar todos aquellos artículos que hayan sido
pedidos en un valor mayor a las 20 unidas. Hemos utilizado IN para indicar que,
primeramente, nos muestre a los campos Nombre de Artículo y Precio de la tabla
PRODUCTOS. En esta consulta incluimos (IN) a la otra consulta en la cual
estamos seleccionando a todos los Códigos de Artículo de la tabla
PRODUCTOSPEDIDOS donde el número de Unidades sea mayor a 20.
40
Siendo el resultado:
El objetivo de esta consulta es que nos muestre a todas las empresas que hayan
hecho pagos sin tarjeta o que, de hecho, no hayan hecho pago alguno. Para ello,
creamos una consulta en la cual nos traiga el Código del Cliente de la tabla
PEDIDOS de todos aquellos que hayan pagado con tarjeta. Luego de ello,
realizamos una consulta padre en la cual le solicitamos que nos muestre el
Nombre de la Empresa y la Población de todos los registros de la tabla
PRODUCTOS. Para combinar estas dos consultas, utilizamos el predicado NOT
IN.
El resultado gramatical de esta consulta con subconsulta será que nos muestre
todas aquellas empresas y su población que no hayan pago con tarjeta o que no
hayan pago en absoluto.
41
10.Consultas de acción I
10.1.Consultas de actualización
A su vez, este tipo de consultas también pueden hacerse para campos de tipo
texto. Veamos un ejemplo:
42
Aquí hemos modificado el nombre de la sección, la cual pasará de llamarse
“Deportes” para llamarse “Deportivos”.
Como vemos, se crea una nueva tabla, la cual solamente contiene a los registros
de Madrid:
43
10.3.Ejercicios
Esta es la sentencia:
Y este, el resultado:
Esta es la sentencia:
44
Y el resultado:
La sentencia es:
Y el resultado:
La sentencia es:
45
Y el resultado:
La sentencia es:
46
11.Consultas de acción II
47
11.1.Predicado DISTINCT
Este predicado hace que el mismo nombre de un registro solamente aparezca una
vez. Por ejemplo, supongamos que una empresa tiene varios registros y nosotros
solamente queremos saber qué empresas trabajan con nosotros, entonces este
predicado se torna interesante. Veamos una sentencia de ejemplo:
Y el resultado será:
48
La sintaxis de la sentencia es la siguiente:
13.Referencias cruzadas
49
Es importante aclarar que phpMyAdmin (MySQL) no admite este tipo de
consultas. Por tanto, debemos utilizar Access. Vayamos entonces allí.
Lo que hacemos con esta consulta es que no sume el precio de los artículos. Por
ejemplo, en el caso de los destornilladores, nos ha sumado los precios de los
artículos que son destornilladores. Esto ha sido posible utilizando la función de
suma SUM delante del campo PRECIO.
50
A continuación haremos otra consulta en la cual queremos saber la cantidad que
tenemos de cada artículo que tengan precio. Para ello, usamos la instrucción
COUNT:
51
Hecho esto, realizamos la consulta de referencia cruzada:
El resultado será:
Por último, veremos cómo se pueden ingresar varios campos en la zona de las
filas:
52
El resultado es:
13.1.Ejercicios
53
La sentencia es:
Corroborando el resultado:
54
14.DDL. Creación de tablas
En este capítulo trabajaremos con los comandos DDL que nos permitirán
ejecutar sentencias de definición de datos. Estas sentencias crean, modifican y
eliminan nuevas tablas y BBDD.
Además, es importante que conozcamos los tres tipos de tablas que hay en
SQL:
14.1.Create Table
Observemos su sintaxis:
55
En cuanto a los tipos de datos, existen varias categorías:
56
Los pasos para crear una tabla en phpMyAdmin son los que desarrollaremos a
continuación.
Quedando así:
57
Allí escribimos lo siguiente:
58
Probemos ahora crear una tabla con varios campos que tengan distintos tipos
de dato:
Una vez que pulsamos en Continuar, se crea la tabla, la cual tendrá esta
estructura:
Hecho todo esto, tenemos que ver cómo ingresar un CAMPO AUTONUMÉRICO:
59
La estructura de la tabla será:
En efecto, se elimina.
60
15.1.Agregando campos
15.2.Eliminando campos
61
Veremos que en la tabla SIMPLE ya no aparece más el campo POBLACION:
La cláusula SET DEFAULT no es admitida por todos los gestores. Por ejemplo,
ACCESS no la reconoce, mientras que phpMyAdmin sí lo hace.
62
Si quisiéramos valor por defecto tenemos que escribir la siguiente instrucción:
16.Índices
En este capítulo veremos cómo crear índices en campos de tablas desde SQL.
63
16.1.Índice clave primaria (Primary Key)
64
16.2.Índice ordinario (Index)
65
Quedando la estructura de la siguiente manera:
Esta es la sentencia:
66
17.Eliminando índices
Hecho todo esto, procederemos a eliminar al INDEX haciendo uso del comando
DROP INDEX:
67
Veamos el siguiente esquema para comprender de mejor forma qué es un trigger:
Por otra parte, también tenemos que establecer en qué momento (after o
before) ocurrirá un trigger:
68
Por tanto, nos ubicamos en phpMyAdmin dentro de la base de datos curso_sql:
Con esta instrucción lo primer que hacemos es crear al trigger. Por convención se
recomienda escribir una referencia que aluda a la tabla a la cual se le aplicará el
trigger. Por ello, hemos puesto PRODUCTOS. A su vez, también es recomendable
escribir la letra inicial de cuándo queremos que se suceda el trigger. En
consecuencia, hemos puesto la A (after) ya que queremos que el trigger ocurra a
posteriori. Al lado de dicha letra, se estila poner una letra que refiera al tipo de
69
trigger. En este caso, será un INSERT y por ello la I. Todo esto da como
resultado PRODUCTOS_AI. A continuación tenemos que poner AFTER INSERT
ON y el nombre de la tabla (PRODUCTOS) en la cual se insertará.
Luego de ello, tenemos que especificarle que sea para ingresar registro de a uno.
A esto se debe la instrucción FOR EACH ROW.
Hecho esto, tenemos que decirle que en la tabla que creamos con el trigger
(REG_PRODUCTOS) nos muestre los campos de código del artículo, nombre del
artículo, precio e insertado. Estos campos recibirán como valores a los nuevos
códigos que se ingresen. De allí, la función NEW seguida de un punto (.) y el
nombre del campo en donde se ingresarán. Por su parte, el campo INSERTADO
recibe como valor a la función NOW() ya que al ser un campo de tipo
DATETIME, lo que queremos obtener aquí es ver la fecha y hora del registro
ingresado.
70
Ejecutamos la consulta y veremos que en la tabla PRODUCTOS se ha ingresado
el nuevo registro:
Tal como podemos observar, hemos creado una tabla (de respaldo), en la cual
aparecerán los registros originales (anterior) y los registros actualizados
(nuevo). A su vez, hemos agregado dos campos extra (USUARIO y
FECHA_MODIF) para saber quién realizó las actualizaciones y en qué fecha.
71
Ejecutamos la consulta y esta es la tabla PRODUCTOS_ACTUALIZADOS
resultante:
Tenemos que hacer uso de la instrucción FOR EACH ROW INSERT INTO y el
nombre de la tabla respaldo (en este caso, PRODUCTOS_ACTUALIZADAS). Es
72
decir, la tabla creada en el paso anterior. Una vez allí, ingresamos el nombre de
los campos originales (ANTERIOR) y de los campos actualizados (NUEVO). A
continuación de los campos nuevos, agregamos los campos USUARIO y
FECHA_MODIF.
Culminado esto, el último paso será agregar los valores, tanto viejos (OLD) como
nuevos (NEW). En estos casos, se utiliza la nomenclatura del punto (.) seguida
del nombre de cada campo. Por último, para asignarle un valor al campo
USUARIO y al campo FECHA_MODIF hacemos uso de las funciones
CURRENT_USER() y NOW(), respectivamente. Esto nos permitirá saber quién
hizo las modificaciones y en qué momento.
73
Luego de esto nos dirigimos a la tabla PRODUCTOS y, efectivamente, la
actualización del precio se ha hecho exitosamente:
Si deseamos ver cuál era el precio anterior y cuál es el precio nuevo, tenemos
que irnos a la tabla PRODUCTOS_ACTUALIZADOS:
74
Pulsamos el botón de Continuar, siendo esta la estructura resultante de nuestra
nueva tabla:
75
A continuación, nos posicionamos en la pestaña SQL y creamos la instrucción
para eliminar un registro:
76
20.2.Eliminar un trigger desde código
Hemos utilizado la instrucción DROP TRIGGER más el nombre del trigger que
queremos eliminar.
Ahora veremos cómo modificar o agregar un trigger, pero en un solo paso. Aquí
tendremos que utilizar DROP TRIGGER IF EXISTS + nombre del trigger. La
instrucción será:
77
Yendo a la estructura de la tabla PRODUCTOS veremos cómo ha quedado creado
el nuevo trigger:
78