Consultas básicas en SQL

El objetivo de este post es mostrar algunos ejemplos de consultas básicas, para quienes inician en el mundo SQL, y requieren recuperar información de sus bases de datos.

Iniciando con SELECT

Al comienzo de aprender SQL, este es el ejemplo más común.

SELECT * 
FROM Orders;

Esta instrucción selecciona todas las filas y todas las columnas de la tabla Orders. Esto debido a que se utiliza el comodín asterisco (*), que permite seleccionar todas las columnas.

Resultado:

order_id|order_date|customer_name      |city       |order_amount|
--------+----------+-------------------+-----------+------------+
    5001|2021-05-01|Denton Swanson     |Monterrey  |   5000.0000|
    5002|2021-05-02|Benjamin Mccullough|Guadalajara|  10000.0000|
    5003|2021-05-03|Tad Singleton      |Querétaro  |   2500.0000|
    5004|2021-05-04|Garth Hodge        |Monterrey  |   7500.0000|
    5005|2021-05-05|Sonya Brennan      |Querétaro  |   3500.0000|
    5006|2021-05-06|Neville Serrano    |Monterrey  |  12500.0000|
    5007|2021-05-10|Sebastian Lambert  |Guadalajara|   7500.0000|
    5008|2021-05-11|Samantha Sandoval  |Guadalajara|   1000.0000|
    5009|2021-05-20|Joshua Villarreal  |Querétaro  |    500.0000|
    5010|2021-05-25|Sonya Brennan      |Monterrey  |    250.0000|

Seleccionando nombres de columna

Elegir las columnas que se requieren, permite elevar el rendimiento de la consulta.

SELECT order_id, customer_name 
FROM Orders;

Resultado:

order_id|customer_name      |
--------+-------------------+
    5001|Denton Swanson     |
    5002|Benjamin Mccullough|
    5003|Tad Singleton      |
    5004|Garth Hodge        |
    5005|Sonya Brennan      |
    5006|Neville Serrano    |
    5007|Sebastian Lambert  |
    5008|Samantha Sandoval  |
    5009|Joshua Villarreal  |
    5010|Sonya Brennan      |

Filtrar resultados

Se utiliza la cláusula WHERE para filtrar los resultados de acuerdo a un criterio determinado.

SELECT order_id, customer_name, city 
FROM Orders 
WHERE city = 'Querétaro';

Resultado:

order_id|customer_name    |city     |
--------+-----------------+---------+
    5003|Tad Singleton    |Querétaro|
    5005|Sonya Brennan    |Querétaro|
    5009|Joshua Villarreal|Querétaro|

Ejemplo utilizando el operador mayor o igual que (>=).

Resultado:

SELECT order_id, order_date 
FROM Orders 
WHERE order_date >= '2021-05-06';

Resultado:

order_id|order_date|
--------+----------+
    5006|2021-05-06|
    5007|2021-05-10|
    5008|2021-05-11|
    5009|2021-05-20|
    5010|2021-05-25|

Otros operadores que pueden ser utilizados: mayor que (>), menor que (<), menor o igual que (< =) .

Mientras tanto el operador BETWEEN filtra los resultados en base a un rango específico (por ejemplo, entre dos fechas).

SELECT order_id, order_date 
FROM Orders 
WHERE order_date BETWEEN '2021-05-10' AND '2021-05-20';

Resultado:

order_id|order_date|
--------+----------+
    5007|2021-05-10|
    5008|2021-05-11|
    5009|2021-05-20|

Ordenar resultados

Utilizar la cláusula ORDER BY permite ordenar las filas devueltas por la consulta.

Orden ascendente

Con la palabra clave ASC los resultados se ordenan de forma ascendente. Este es el valor por defecto y puede ser omitido.

SELECT order_id, customer_name 
FROM Orders 
ORDER BY customer_name ASC;

O

SELECT order_id, customer_name 
FROM Orders 
ORDER BY customer_name;

Resultado:

order_id|customer_name      |
--------+-------------------+
    5002|Benjamin Mccullough|
    5001|Denton Swanson     |
    5004|Garth Hodge        |
    5009|Joshua Villarreal  |
    5006|Neville Serrano    |
    5008|Samantha Sandoval  |
    5007|Sebastian Lambert  |
    5005|Sonya Brennan      |
    5010|Sonya Brennan      |
    5003|Tad Singleton      |

Orden descendente

Con la palabra clave DESC los resultados se ordenan de forma descendente.

SELECT order_id, customer_name 
FROM Orders 
ORDER BY customer_name DESC;

Resultado:

order_id|customer_name      |
--------+-------------------+
    5003|Tad Singleton      |
    5005|Sonya Brennan      |
    5010|Sonya Brennan      |
    5007|Sebastian Lambert  |
    5008|Samantha Sandoval  |
    5006|Neville Serrano    |
    5009|Joshua Villarreal  |
    5004|Garth Hodge        |
    5001|Denton Swanson     |
    5002|Benjamin Mccullough|

Ordenar filas por columnas ocultas

Es posible hacer ordenamiento de filas por medio de columnas que no están incluidas en la instrucción SELECT.

SELECT order_id, customer_name 
FROM Orders 
ORDER BY city;

Resultado:

order_id|customer_name      |
--------+-------------------+
    5002|Benjamin Mccullough|
    5007|Sebastian Lambert  |
    5008|Samantha Sandoval  |
    5001|Denton Swanson     |
    5006|Neville Serrano    |
    5004|Garth Hodge        |
    5010|Sonya Brennan      |
    5005|Sonya Brennan      |
    5003|Tad Singleton      |
    5009|Joshua Villarreal  |

En este caso, podemos inferir que la lista está ordenada de forma ascendente por el nombre de la ciudad del cliente.

Para comprobarlo se incluye la columna [city] en la instrucción SELECT.

SELECT order_id, customer_name, city  
FROM Orders 
ORDER BY city;

Resultado:

order_id|customer_name      |city       |
--------+-------------------+-----------+
    5002|Benjamin Mccullough|Guadalajara|
    5007|Sebastian Lambert  |Guadalajara|
    5008|Samantha Sandoval  |Guadalajara|
    5001|Denton Swanson     |Monterrey  |
    5006|Neville Serrano    |Monterrey  |
    5004|Garth Hodge        |Monterrey  |
    5010|Sonya Brennan      |Monterrey  |
    5005|Sonya Brennan      |Querétaro  |
    5003|Tad Singleton      |Querétaro  |
    5009|Joshua Villarreal  |Querétaro  |

Patrón específico

El uso del operador LIKE permite buscar un patrón determinado en una columna.

Resultado:

order_id|customer_name    |
--------+-----------------+
    5005|Sonya Brennan    |
    5007|Sebastian Lambert|
    5008|Samantha Sandoval|
    5010|Sonya Brennan    |

En este ejemplo, se buscan todas las filas cuyos nombre de cliente comienza con la letra S. El signo de porcentaje (%) es un comodín que coincide de cero o más caracteres. Puede usarse al inicio, al final o en medio de una cadena de caracteres.

SELECT order_id, customer_name 
FROM Orders 
WHERE customer_name LIKE '%S%';

Resultado:

order_id|customer_name    |
--------+-----------------+
    5001|Denton Swanson   |
    5003|Tad Singleton    |
    5005|Sonya Brennan    |
    5006|Neville Serrano  |
    5007|Sebastian Lambert|
    5008|Samantha Sandoval|
    5009|Joshua Villarreal|
    5010|Sonya Brennan    |

Selección a partir de una lista

El operador IN filtra un conjunto de resultados de acuerdo a una lista de valores. La lista de valores puede darse de forma específica o por medio de una subconsulta.

Ejemplo utilizando una lista.

SELECT order_id, customer_name , city 
FROM Orders 
WHERE city IN ('Guadalajara', 'Monterrey');

Resultado:

order_id|customer_name      |city       |
--------+-------------------+-----------+
    5001|Denton Swanson     |Monterrey  |
    5002|Benjamin Mccullough|Guadalajara|
    5004|Garth Hodge        |Monterrey  |
    5006|Neville Serrano    |Monterrey  |
    5007|Sebastian Lambert  |Guadalajara|
    5008|Samantha Sandoval  |Guadalajara|
    5010|Sonya Brennan      |Monterrey  |

Ejemplo utilizando una subconsulta (una consulta anidada dentro de otra consulta).

SELECT order_id, customer_name , city 
FROM Orders 
WHERE city IN (SELECT city FROM cities);

Resultado:

SELECT order_id, customer_name , city 
FROM Orders 
WHERE city IN (SELECT city FROM cities);

Resultado:

order_id|customer_name    |city     |
--------+-----------------+---------+
    5003|Tad Singleton    |Querétaro|
    5005|Sonya Brennan    |Querétaro|
    5009|Joshua Villarreal|Querétaro|

Este resultado devuelve las columnas de la tabla Orders, pero solo cuando al menos una fila corresponde a la tabla Cities, que tiene una columna coincidente (city).

Se muestra el contenido de ambas tablas para corroborarlo.

La tabla Orders:

order_id|order_date|customer_name      |city       |order_amount|
--------+----------+-------------------+-----------+------------+
    5001|2021-05-01|Denton Swanson     |Monterrey  |   5000.0000|
    5002|2021-05-02|Benjamin Mccullough|Guadalajara|  10000.0000|
    5003|2021-05-03|Tad Singleton      |Querétaro  |   2500.0000|
    5004|2021-05-04|Garth Hodge        |Monterrey  |   7500.0000|
    5005|2021-05-05|Sonya Brennan      |Querétaro  |   3500.0000|
    5006|2021-05-06|Neville Serrano    |Monterrey  |  12500.0000|
    5007|2021-05-10|Sebastian Lambert  |Guadalajara|   7500.0000|
    5008|2021-05-11|Samantha Sandoval  |Guadalajara|   1000.0000|
    5009|2021-05-20|Joshua Villarreal  |Querétaro  |    500.0000|
    5010|2021-05-25|Sonya Brennan      |Monterrey  |    250.0000|

La tabla Cities:

id|city          |
--+--------------+
 1|Aguascalientes|
 2|Colima        |
 3|Hidalgo       |
 4|Puebla        |
 5|Querétaro     |

Deja un comentario