Ver índice de contenidos del libro

11.2. Sobre el lenguaje SQL

SQL -siglas de Structured Query Language-, es el lenguaje de consultas a bases de datos, que nos permitirá crear, modificar, consultar y eliminar tanto bases de datos como sus tablas y registros, desde el shell interactivo de MySQL y también desde Python.

Como todo lenguaje informático, posee su propia sintaxis, tipos de datos y elementos.

En este curso, abordaremos los conceptos básicos sobre SQL que nos permitan desarrollar aplicaciones de media complejidad, sin profundizar en el lenguaje en sí, sino solo en aquellos aspectos mínimamente necesarios relacionados con MySQL.

11.2.1. Tipos de datos más comunes (recomendados)

La siguiente tabla, muestra los tipos de datos más comunes, aceptados por versiones la versión 5.0.3 o superior, de MySQL.

Tipo de dato Denominación Especificaciones Ejemplo
Entero INT(N) N = cantidad de dígitos INT(5)
Número decimal DECIMAL(N, D) N = cantidad de dígitos totales, D = cantidad de decimales DECIMAL(10, 2)
Booleano BOOL BOOL
Fecha DATE DATE
Fecha y hora DATETIME DATETIME
Fecha y hora automática TIMESTAMP TIMESTAMP
Hora TIME TIME
Año YEAR(D) D = cantidad de dígitos (2 o 4) YEAR(4)
Cadena de longitud fija CHAR(N) N = longitud de la cadena (entre 0 y 255) CHAR(2)
Cadena de longitud variable VARCHAR(N) N = longitud máxima de la cadena (entre 0 y 65532) VARCHAR(100)
Bloque de texto de gran longitud variable BLOB BLOB

11.2.2. Sintáxis básica de las sentencias SQL

Una sentencia SQL (denominada query en la jerga informática), es una instrucción escrita en lenguaje SQL. Veremos aquí, el tipo de sentencias más habituales.

11.2.2.1. Crear tablas en una base de datos

Sintaxis:

CREATE TABLE nombre_de_la_tabla(
    nombre_del_campo TIPO_DE_DATO,
    nombre_de_otro_campo TIPO_DE_DATO
);

Ejemplo:

CREATE TABLE productos(
    producto VARCHAR(125),
    descripcion BLOB,
    precio DECIMAL(6, 2),
    en_stock BOOL
);

Explicación:

  • Crear una nueva tabla llamada productos (CREATE TABLE productos;)
  • Crear un campo llamado producto, de tipo cadena de texto de longitud variable, con una longitud máxima de 125 caracteres (producto VARCHAR(125),).
  • Crear un campo llamado descripcion, de tipo bloque de texto de gran longitud (descripcion BLOB,).
  • Crear un campo precio de tipo numérico de longitud máxima de 6 digítos de los cuales, solo 2 pueden ser decimales (precio DECIMAL(6, 2),).
  • Crear un campo llamado en_stock del tipo booleano (en_stock BOOL).

11.2.2.2. Insertar datos en una tabla

Sintaxis:

INSERT INTO 
    nombre_de_la_tabla(campo1, campo2, campo10..)
    VALUES(dato1, dato2, dato10...);

Ejemplo:

INSERT INTO 
    productos(producto, precio, en_stock)
    VALUES('Bolsa de dormir para alta montaña', 234.65, TRUE);

Explicación:

  • Insertar un nuevo registro en los campos producto, precio y en_stock de la tabla productos (INSERT INTO productos(producto, precio, en_stock)).
  • Con los valores Bolsa de dormir para alta montaña, 234.65 y TRUE, respectivamente en cada uno de los campos indicados (VALUES('Bolsa de dormir para alta montaña', 234.65, TRUE);).

11.2.2.3. Seleccionar registros

Sintaxis:

SELECT campo1, campo2, campo10
FROM   tabla;

Ejemplo:

SELECT producto, precio
FROM   productos;

Explicación:

  • Seleccionar los campos producto y precio (SELECT producto, precio).
  • De la tabla productos (FROM productos;).

11.2.2.4. Modificar registros

Sintaxis:

UPDATE tabla
SET    campo1 = valor,
       campo2 = valor,
       campo10 = valor;

Ejemplo:

UPDATE productos
SET    en_stock = FALSE,
       precio = 0;

Explicación:

  • Actualizar la tabla productos (UPDATE productos).
  • Modificar el campo en_stock por falso (SET en_stock = FALSE,).
  • Y el campo precio a 0 (precio = 0;).

11.2.2.5. Eliminar registros

Sintaxis:

DELETE FROM tabla;

Ejemplo:

DELETE FROM productos;

Explicación:

  • Eliminar todos los registros de la tabla productos (DELETE FROM productos;).

11.2.3. Consultas avanzadas

Si bien no veremos aquí consultas realmente complejas, ya que el curso se basa en el lenguaje de programación Python y no, en el lenguaje de consulta SQL, haremos un rápido paseo, por las opciones disponibles en SQL para sentencias más complejas que las anteriores.

11.2.3.1. La cláusula WHERE

Las sentencias en SQL, se componen de cláusulas. Y WHERE es una de ellas. La cláusula WHERE nos permite filtrar registros en una sentencia SQL.

Esta cláusula, funciona de forma similar a la comparación de expresiones en Python, utilizando los siguientes operadores de comparación:

Operador Descripción Operador Descripción
> mayor que < menor que
= igual que <> distinto que
>= mayor o igual que <= menor o igual que
BETWEEN n1 AND n2 entre n1 y n2 IS NULL es nulo
IS TRUE es verdadero IS FALSE es falso
IN(valor1, valor2, va...) contiene

Por supuesto, tambien admite operadores lógicos:

  • AND (y)
  • NOT (negación)
  • OR (o)

Veamos algunos ejemplos:

Seleccionar productos donde precio sea menor que 1000:

SELECT producto,
       precio
FROM   productos
WHERE  precio < 1000;

Aumentar el 10% del precio de los productos, que actualmente se encuentren entre 150 y 200:

UPDATE productos
SET    precio = (precio * 1.10)
WHERE  precio BETWEEN 150 AND 200;

Seleccionar productos donde en_stock no sea falso

SELECT producto,
       precio
FROM   productos
WHERE  en_stock IS NOT FALSE;

Eliminar productos cuyos precios sean 100, 200 y/o 300 y además, en_stock sea falso o producto sea nulo:

DELETE
FROM  productos
WHERE precio IN(100, 200, 300)
AND   (en_stock IS FALSE
OR    producto IS NULL);

Modificar en_stock a verdadero donde precio sea menor que 50 y producto no sea nulo:

UPDATE productos
SET    en_stock = TRUE
WHERE  precio < 50
AND    en_stock IS NOT NULL;

11.2.3.2. Ordenando consultas: la cláusula ORDER BY

Es posible además, ordenar los resultados de una consulta, en forma ascendente (ASC) o descendente (DESC):

SELECT   producto, 
         descripcion, 
         precio
FROM     productos
WHERE    precio BETWEEN 1 AND 50
AND      en_stock IS NOT FALSE
ORDER BY precio DESC;

También es posible, ordenar los resultados de la consulta, por más de un campo:

SELECT   producto, 
         descripcion, 
         precio
FROM     productos
WHERE    precio BETWEEN 1 AND 50
AND      en_stock IS NOT FALSE
ORDER BY precio DESC,
         producto ASC;

11.2.4. Alias de tablas y campos

Otra posibilidad que nos da el lenguaje SQL, es utilizar alias para el nombre de los campos y las tablas. Estos alias se asignan mediante la palabra clave reservada, AS:

SELECT   producto    AS 'Nombre del Producto', 
         descripcion AS Detalles, 
         precio      AS Importe
FROM     productos   AS p
WHERE    precio BETWEEN 1 AND 50
AND      en_stock IS NOT FALSE
ORDER BY precio DESC,
         producto ASC;

Nota Nótese que los alias que contengan caracteres extraños, deben ser encerrados entre comillas simples.

11.2.5. Funciones del lenguaje SQL de MySQL

Es posible también, utilizar diversas funciones propias del lenguaje SQL -ya sea estándar o de MySQL- a fin de poder obtener los datos con cierto formato. Veremos aquellas de uso más frecuente.

Contar la cantidad de registros: COUNT()

SELECT COUNT(producto) AS Cantidad
FROM   productos;

Sumar totales: SUM()

SELECT SUM(precio) AS Total
FROM   productos;

Concatenar cadenas: CONCAT()

SELECT producto,
       CONCAT('USD ', precio, '.-') AS Precio
FROM   productos;

Nótese que las cadenas de caracteres deben encerrarse entre comillas simples y que el operador de concatenación para esta función, es la coma.

Convertir a minúsculas y mayúsculas: LCASE() y UCASE()

SELECT UCASE(producto),
       LCASE(descripcion)
FROM   productos;

Reemplazar datos: REPLACE()

SELECT REPLACE(descripcion, '\n', '<br/>') AS Descripcion
FROM   productos;

Reemplaza \n por <br/>.

Obtener los primeros o últimos caracteres: LEFT() y RIGHT()

SELECT LEFT(producto, 50)
FROM   productos;

Redondear números: ROUND()

SELECT ROUND(precio, 2)
FROM   productos;

Retornará los precios con 2 decimales

Obtener solo la fecha de un campo DATETIME o TIMESTAMP: DATE()

SELECT DATE(campo_datetime)
FROM   tabla;

Obtener una fecha formateada: DATE_FORMAT()

SELECT DATE_FORMAT(campo_fecha, '%d/%m/%Y')
FROM   tabla;

Obtener el registro con el valor máximo y mínimo: MAX() y MIN()

Retorna el producto con el precio más caro:

SELECT MAX(precio)
FROM   productos;

Retorna el producto con el precio más barato

SELECT MIN(precio)
FROM   productos;
Copyright (c) 2011-2013 Eugenia Bahit. La copia y redistribución de esta página se permite bajo los términos de la licencia Creative Commons Atribución NoComercial SinDerivadas 3.0 Unported siempre que se conserve esta nota de copyright.