Lección SQL
Lección SQL
Lección SQL
Características
Entre las principales características de los sistemas de base de datos podemos mencionar:
Objeto de almacenamiento perteneciente a una BD. Es una estructura en forma de cuadrante donde se
almacenan registros o filas de datos. Cada tabla tiene un nombre único en la BD.
Registro:
Cada una de las filas de una tabla, esta compuesto por campos o atributos.
Campo:
Cada uno de los “cajoncitos” de un registro donde se guardan los datos. Cada campo tiene un nombre
único para la tabla de la cual forma parte, además es de un tipo (naturaleza) determinado, por tanto no
podemos guardar limones en el cajón de las naranjas, en términos informáticos y a modo de ejemplo, no
encontraremos un dato alfanumérico (letras y números) en un campo diseñado para
Los registros o miembros de una tabla tienen en común sus atributos, no el dato en sí, que lo más
probable es que difiera de un registro a otro, pero sí el hecho de que todos ellos poseen esos atributos.
Una BD contendrá tablas que a su vez contendrán registros y en estos se encontrarán los datos
distribuidos en una serie de campos.
Curso Gratis SQL . Lección 2 - Comandos SQL Básicos.
SQL (por sus siglas en inglés Structured Query Language; en español lenguaje de consulta estructurada) es
un lenguaje específico del dominio que da acceso a un sistema de gestión de bases de datos relacionales que
permite especificar diversos tipos de operaciones en ellos.
Tambien mostraremos comandos para poder manipular los datos de las tablas que se creen.
USE mydb;
SELECT * FROM CLIENTES
Con el * indicamos que queremos devolver todos los campos. Si CLIENTES dispone de los
campos idCliente, nombre y descripcion,
Al tener únicamente una tabla involucrada, podemos referirnos a los campos sin calificar, dado que no hay duda de
a qué tabla se refiere. Cuando veamos consultas sobre varias tablas comprenderemos la necesidad de incluir esta
notación calificada (TABLA.campo).
SELECT cp, ciudad
FROM DIRECCION
Esta consulta devolverá únicamente los campos cp (código postal) y ciudad de la tabla DIRECCION. Al tener
un subconjunto de los campos, éstos no tienen por qué incluir a la clave de la tabla, por lo que no tienen por qué ser
únicos. Así, si tenemos muchos registros referidos a distintas calles y números de ese mismo código postal y ciudad,
nos encontraremos muchos registros repetidos. Esto puede evitarse haciendo:
FROM CLIENTES
Así se eliminan los registros repetidos, devolviendo únicamente una vez cada par cp, ciudad. Esta selección de un
subconjunto de los datos de la tabla y excluyendo repetidos se denomina en álgebra relacional proyección.
SELECT numero, calle
FROM DIRECCION
WHERE ciudad = ‘Sevilla’
Esta consulta devolvería el número y la dirección de todas las direcciones pertenecientes a la ciudad de Sevilla.
Como vemos, con WHERE indicamos la condición que deben cumplir los registros de la tabla para ser devueltos en
la consulta. En este caso tenemos una condición simple dada por la comparación de igualdad (=) entre al campo
(ciudad) y un literal de tipo
SELECT calle, ciudad
FROM DIRECCION
WHERE numero = 12
Esta otra consulta devolvería la calle y ciudad de todos los registros de la tabla con el número 12, en este caso un
literal numérico. Las condiciones empleadas pueden ser mucho más complejas incluyendo otro tipo de operadores
y combinaciones de los mismos.
Operadores relacionales
Al margen del signo de igualdad empleado anteriormente, se pueden usar n las condiciones simples de las consultas
los operadores relacionales habituales, devolviendo siempre un valor booleano (lógico):
Operador Significado
> Mayor que
<> Distinto de
= Igual que
SELECT nombre
FROM CLIENTES
WHERE edad <= 32
SELECT nombre
FROM CLIENTES
WHERE edad BETWEEN 20 AND 35
LIKE: empleado para comparar patrones de texto pudiendo incluir comodines como los siguientes:
SELECT num, calle, cp
FROM DIRECCION
WHERE ciudad LIKE ‘Val%’
Esta consulta devolvería los datos de las direcciones de toda ciudad que comience por Val y siga por cualquier
número de caracteres, incluyendo cero caracteres. Por ejemplo, Valladolid o Valencia. En el enlace anterior sobre
patrones de texto podemos practicar directamente desde la web.
IN: empleado para comparar con una lista de valores fijados de modo que devuelva True si el campo indicado
pertenece a la lista.
FROM DIRECCION
Los operadores lógicos nos sirven para componer expresiones de filtrado a partir de las anteriores:
Operador Significado
AND -Y lógico
OR -O lógico
Por ejemplo:
SELECT *
FROM DIRECCION
Devuelve los registros pertenecientes a direcciones que tengan el código postal 41009 de Sevilla o bien que no
tengan el 14010 de Córdoba. La mayor precedencia la adopta el operador NOT sobre la condición cp = 14010; a
continuación los AND se aplican sobre ciudad = ‘Sevilla’ AND cp = 41009 y ciudad = ‘Córdoba’ AND NOT cp = 14010;
por último se aplica el OR sobre la fórmula completa. La misma consulta se puede expresar de forma más clara con
paréntesis:
SELECT *
FROM DIRECCION
O bien si el NOT nos parece más evidente, podemos excluir el paréntesis interior, a nuestra gusto siempre
conservando el significado que queríamos dar la operación.
Ordenación
Ordenar según criterios (ORDER BY)
Podemos ordenar los registros devueltos por una consulta por el campo o campos que estimemos oportunos:
SELECT *
FROM CIUDAD
Esta consulta devolvería todas las ciudades ordenadas por provincia en orden ascendente, y dentro de los de la
misma provincia ordenaría las ciudades por orden descendente del número de habitantes. Si no indicamos ASC ni
DESC, el comportamiento por defecto será el orden ascendente (ASC).
Devolución de expresiones
Asignación de un alias a un dato devuelto (AS)
FROM CLIENTES
Devuelve el número de semana en la que nos encontramos dentro del mes, ya que NOW() nos devuelve la
fecha/hora actual, de la cual extraemos el día con DAY, y posteriormente calculamos el módulo 7 de dicho día (de
modo que para un día 26 devolvería un 5, por ejemplo). El dato con alias potencia8 devolvería 8 (2 elevado a 3,
POW es power, potencia).
Se puede combinar naturalmente la potencia de este lenguaje de expresiones usando operadores y funciones sobre
los datos de los registros de una tabla:
SELECT DAY(fechaLinea) AS dia, FLOOR(precioLinea * 0.85) AS precioDtoRedondeado
FROM LINEAPEDIDO
Consultas agrupadas (GROUP BY)
Las consultas anteriores recuperaban, trabajaban con, y mostraban información a nivel de cada registro
individual de la base de datos. Así, si tenemos un producto con un determinado precio, podemos devolver el precio
mediante SELECT precioLinea o bien operar sobre él como en SELECT precioLinea * 0.85.
Ahora bien, podemos querer obtener información que no proviene de un registro individual sino de la
agrupación de información, como es el caso de contar el número de líneas de pedido, sumar el precio de todas las
líneas por cada pedido, etc. Para ello, debemos emplear funciones agregadas y en la mayoría de los casos agrupar
por algún campo.
SELECT COUNT(*)
FROM LINEAPEDIDO
Si por el contrario deseamos obtener el total de líneas por pedido, debemos indicar queagrupe por idPedido, lo
que contará todos los registros con el mismo idPedido y calculará sucuenta:
SELECT idPedido, COUNT(*)
FROM LINEAPEDIDO
Lo mismo se puede aplicar a otras funciones como la suma, indicando en ese caso aparte de la agrupación el
campo que queremos sumar:
SELECT idPedido, SUM(precioLinea)
FROM LINEAPEDIDO
¿Y si queremos hallar la media de los precios por cada pedido? En ese caso necesitamos de nuevo agrupar
(GROUP BY) por pedido.
SELECT idPedido, AVG(precioLinea)
FROM LINEAPEDIDO
FROM LINEAPEDIDO
SELECT idPedido, ROUND(AVG(precioLinea),4)
FROM LINEAPEDIDO
HAVING AVG(precioLinea) < 10
Para practicar un poco con las más comunes es muy recomendable este tutorial interactivo. En MySQL tendríamos
las que aparecen en este enlace. Este es el desglose completo de las funciones de agregación estándar: