Capítulo 4. SELECCIONA

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

Cuando se trabaja con bases de datos y SQL, la tarea más común de es solicitar datos de una o varias tablas y mostrarlos. La sentencia SELECT consigue esto. Pero SELECT puede hacer mucho más que simplemente recuperar y mostrar datos. Como aprenderemos en los próximos capítulos, podemos transformar estos datos de forma significativa y construir potentes resúmenes a partir de millones de registros.

Pero antes, aprenderemos a SELECT columnas de una misma tabla, así como a componer expresiones en ellas.

Recuperar datos con SQL

Si aún no lo has hecho, haz clic en Herramientas→Abrir Editor SQL en el menú superior, y asegúrate de que la base de datos rexon_metals está abierta, como se mencionó en el capítulo anterior. Tu espacio de trabajo de SQLiteStudio debería parecerse a la Figura 4-1. Observa que el espacio de trabajo SQL está ahora dividido en dos paneles, un panel Editor SQL y un panel Resultados de consulta.

The SQL editor
Figura 4-1. El espacio de trabajo SQL

El panel Editor SQL es donde escribirás tu SQL, y el panel Resultados de consulta mostrará los resultados de tu SQL.

Escribamos nuestra primera sentencia SQL. La operación SQL más habitual es una sentencia SELECT, que extrae datos de una tabla y luego muestra los resultados. Haz clic en el panel Editor SQL y escribe la siguiente sentencia:

SELECT * FROM CUSTOMER;

Haz clic en el botón triángulo azul o pulsa F9 para ejecutar el SQL.

Acabas de ejecutar tu primera consulta, y los resultados deberían aparecer en el panel inferior(Figura 4-2).

Running a SELECT query
Figura 4-2. Ejecutar una consulta SELECT

Vamos a desglosar exactamente lo que ha ocurrido. Una sentencia SELECT te permite elegir las columnas que extraerá de una tabla. Así que la primera parte del SQL que se muestra aquí debe leerse como "Seleccionar todas las columnas", donde * es un marcador de posición para especificar todas las columnas:

SELECT * FROM CUSTOMER;

Y estás obteniendo estas columnas de la tabla CUSTOMER:

SELECT * FROM CUSTOMER;

Cuando ejecutas esta sentencia SELECT, te devuelve todas las columnas de la tabla CUSTOMER y te las muestra(Figura 4-3).

Selecting all records from the CUSTOMER table
Figura 4-3. Seleccionar todos los registros de la tabla CLIENTE

No tienes que extraer todas las columnas de una declaración SELECT. También puedes elegir sólo las columnas que te interesen. La siguiente consulta sólo extraerá las columnas CUSTOMER_ID y NAME:

SELECT CUSTOMER_ID, NAME FROM CUSTOMER;

Y la salida sólo mostrará esas dos columnas(Figura 4-4).

Selecting only two columns from a table
Figura 4-4. Seleccionar sólo dos columnas de una tabla
Nota

Una única sentencia SQL puede terminar opcionalmente con un punto y coma (;), como se muestra en los ejemplos anteriores. Sin embargo, el punto y coma es necesario para ejecutar varias sentencias SQL a la vez, lo que resulta útil al escribir datos, como se explica en el Capítulo 10.

Poder elegir las columnas puede no parecer interesante en este momento, pero nos permite afinar en lo que nos interesa. Reducir el alcance a sólo determinadas columnas nos ayudará también en las tareas de agregación de GROUP BY, como veremos en el Capítulo 6.

Expresiones en sentencias SELECT

La sentencia SELECT puede hacer mucho más que simplemente seleccionar columnas. También puedes hacer cálculos sobre una o varias columnas e incluirlos en el resultado de tu consulta.

Vamos a trabajar con otra tabla llamada PRODUCT. Primero, haz un SELECT all para ver los datos(Figura 4-5):

SELECT * FROM PRODUCT;
The PRODUCT table
Figura 4-5. La tabla PRODUCTO

Supongamos que queremos generar una columna calculada llamada TAXED_PRICE que sea un 7% superior a PRICE. Podríamos utilizar una consulta SELECT para que nos lo calculara dinámicamente(Figura 4-6):

SELECT
PRODUCT_ID,
DESCRIPTION,
PRICE,
PRICE * 1.07 AS TAXED_PRICE
FROM PRODUCT;
Using expressions to calculate a TAXED_PRICE column
Figura 4-6. Uso de expresiones para calcular una columna PRECIO_IMPUESTO
Nota

Observa en la declaración SELECT que podemos repartir nuestro SQL en varias líneas para hacerlo más legible. El software ignorará los espacios en blanco extraños y las líneas separadas, por lo que podemos utilizarlos para que nuestro SQL sea más fácil de leer.

Observa cómo se ha calculado dinámicamente la columna TAXED_PRICE en la consulta SELECT. Esta columna no se almacena en la tabla, sino que se calcula y se nos muestra cada vez que ejecutamos esta consulta. Esta es una potente función de SQL, que nos permite mantener los datos almacenados simples y utilizar las consultas para superponer cálculos sobre ellos.

Echemos un vistazo a nuestra columna TAXED_PRICE y desglosemos cómo se creó. Primero vemos que PRICE se multiplica por 1,07 para calcular el importe gravado. Generamos este valor TAXED_PRICE para cada registro:

SELECT
PRODUCT_ID,
DESCRIPTION,
PRICE,
PRICE * 1.07 AS TAXED_PRICE
FROM PRODUCT

Observa también que hemos dado a este valor calculado un nombre utilizando una declaración AS (esto se conoce como alias):

SELECT
PRODUCT_ID,
DESCRIPTION,
PRICE,
PRICE * 1.07 AS TAXED_PRICE
FROM PRODUCT

Podemos utilizar alias para dar nombre a las expresiones. También podemos utilizar alias para aplicar un nuevo nombre a una columna existente dentro de la consulta. Por ejemplo, podemos cambiar el alias de la columna PRICE a UNTAXED_PRICE (Figura 4-7). Esto no cambia realmente el nombre de la columna en la tabla, pero le da un nuevo nombre dentro del ámbito de nuestra sentencia SELECT:

SELECT
PRODUCT_ID,
DESCRIPTION,
PRICE AS UNTAXED_PRICE,
PRICE * 1.07 AS TAXED_PRICE
FROM PRODUCT
Aliasing the PRICE column to UNTAXED_PRICE
Figura 4-7. Aliasing de la columna PRECIO a UNTAXED_PRICE
Nota

Cuando des nombres a cualquier cosa en SQL (ya sea un alias, un nombre de columna, un nombre de tabla, o cualquier otra entidad), utiliza siempre un guión bajo (_) como marcador de espacios. Es una buena práctica.

Si tuviéramos que distribuir los resultados de esta sentencia SQL como un informe a nuestro lugar de trabajo, probablemente querríamos retocar el redondeo en el TAXED_PRICE. Tener más de dos decimales puede no ser deseable. Todas las plataformas de bases de datos tienen funciones integradas para ayudar con este tipo de operaciones, y SQLite proporciona una función round() que acepta dos argumentos entre paréntesis separados por una coma: el número que hay que redondear y el número de decimales al que hay que redondear. Para redondear el TAXED_PRICE a dos decimales, podemos pasar la expresión de multiplicación PRICE AS UNTAXED_PRICE * 1.07 como primer argumento, y un 2 como segundo:

SELECT
PRODUCT_ID,
DESCRIPTION,
PRICE AS UNTAXED_PRICE,
round(PRICE AS UNTAXED_PRICE * 1.07, 2) AS TAXED_PRICE
FROM PRODUCT;

Ejecuta la declaración y verás que redondea el TAXED_PRICE, que se muestra mucho mejor con dos decimales(Figura 4-8).

Using the round() function to limit decimal places for TAXED_PRICE
Figura 4-8. Uso de la función round() para limitar los decimales de PRECIO_IMPUESTO

He aquí un breve resumen de los operadores matemáticos que puedes utilizar en SQL (los veremos utilizados a lo largo del libro):

Operario Descripción Ejemplo
+ Suma dos números STOCK + NEW_SHIPMENT
- Resta dos números STOCK - DEFECTS
* Multiplica dos números PRICE * 1.07
/ Divide dos números STOCK / PALLET_SIZE
% Divide dos números, pero devuelve el resto STOCK % PALLET_SIZE

Concatenar texto

Las expresiones no tienen por qué funcionar sólo con números. También puedes utilizar expresiones con texto y otros tipos de datos. Un operador útil para utilizar con texto es la concatenación, que fusiona dos o más datos. El operador de concatenación se especifica mediante una doble tubería (||), y a ambos lados de ella colocas los valores de los datos a concatenar.

Por ejemplo, puedes concatenar los campos CITY y STATE de la tabla CUSTOMER, así como poner una coma y un espacio entre ellos para crear un valor LOCATION (Figura 4-9):

SELECT NAME,
CITY || ', ' || STATE AS LOCATION
FROM CUSTOMER;
Concatenating CITY and STATE
Figura 4-9. Concatenar CIUDAD y ESTADO

Incluso puedes concatenar varios campos en un único valor SHIP_ADDRESS (Figura 4-10):

SELECT NAME,
STREET_ADDRESS || ' ' || CITY || ', ' || STATE || ' ' || ZIP AS SHIP_ADDRESS
FROM CUSTOMER;
Concatenating several fields to create a SHIP_ADDRESS
Figura 4-10. Concatenar varios campos para crear una SHIP_ADDRESS

La concatenación debería funcionar con cualquier tipo de datos (números, fechas, etc.) y tratarlos como texto al fusionarlos. El campo ZIP que se muestra aquí es un número, pero se convirtió implícitamente en texto durante la concatenación.

En el próximo capítulo se tratarán más operaciones de texto, pero la concatenación es sin duda una de las más importantes.

Nota

Muchas plataformas de bases de datos utilizan tuberías dobles (||) para concatenar, pero MySQL y algunas otras requieren utilizar una función CONCAT().

Resumen

En este capítulo hemos visto cómo utilizar la sentencia SELECT, la operación SQL más habitual. Recupera y transforma datos de una tabla sin afectar a la propia tabla. También hemos aprendido a seleccionar columnas y a escribir expresiones. Dentro de las expresiones, podemos utilizar operadores y funciones para realizar tareas como el redondeo, las operaciones matemáticas y la concatenación.

En el próximo capítulo, conoceremos la sentencia WHERE, que nos permitirá filtrar registros en función de los criterios que especifiquemos.

Get Primeros pasos con SQL now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.