Publicado el 1 comentario

SQL básico: Operadores y funciones matemáticas.

En la sección pasada vimos las funciones SQL que se usan con cadenas de texto más comunes. Ahora veremos las funciones SQL matemáticas más comunes y que son estándar entre los diferentes motores de base de datos. Recuerda que cada motor de datos puede implementar las suyas propias así que es mejor revisar la documentación de cada una de ellas.

Operadores matemáticos SQL en SQLite.

OperadorDescripción
+Suma
Resta
/División
*Multiplicación
%Módulo (residuo)
Operadores matemáticos.

Escribe y ejecuta la siguiente sentencia SQL de ejemplo donde se usan los operadores matemáticos anteriores.

Operadores matemáticos.

En la imagen anterior vemos el uso de los operadores matemáticos en la cláusula SELECT. Los operadores también pueden usarse en otras cláusulas como en la cláusula WHERE.

Si observa en los resultados de la operación de división verá un detalle, la operación 10 entre 4 debería dar como resultado 2.5 y no 2. Esto se debe a que cuando SQLite detecta que ambos operadores son de tipo entero, el resultado de la división será entero.

Para que el resultado lo de con decimales, es necesario que uno de los operadores sea de tipo REAL (con decimales). Veamos el siguiente ejemplo:

División con número REAL.

En el ejemplo anterior, SQLite detecta que el número 10 es de tipo real debido a que tiene el punto decimal y por lo tanto el resultado lo arroja como el número real 2.5. ¿Cómo hacerlo con los valores de tipo entero de una tabla? Observa la siguiente sentencia:

División con columnas de tipo entero.

En el ejemplo anterior las columnas “InvoiceId” y “TrackId” están definidas como de tipo entero, por lo tanto la división entre estos dos campos da como resultado un número entero, el número 0. ¿Cómo hacer para que SQL de SQLite reconozca una columna de tipo entero como real? Es ahí donde entra el operador o función CAST de SQL. CAST convierte de un tipo de dato a otro, en el ejemplo convierte el valor de la columna “InvoiceId” que es de tipo INTEGER (entero) a tipo REAL. Una vez hecha esta conversión y hacer la división el resultado lo arrojará como un número REAL (con decimales); en el ejemplo nos arroja 0.1875

Funciones matemáticas SQL en SQLite.

En esta sección veremos sólo algunas funciones matemáticas, la lista completa de las funciones matemáticas que implementa SQLite las puedes consultar aquí, sin embargo esas funciones son sólo incluidas en la versión más reciente de SQLite, la versión SQLite incluida con DB4S no incluye las funciones matemáticas aún.

Actualización: En este artículo se explica los pasos para ejecutar las funciones matemáticas de SQLite en DB4S.

Función SQL ROUND()

Regresa un número redondeado a entero o al decimal más próximo.

Sintaxis: ROUND(expresión-numérica, número-decimales)

La función ROUND(), sin el segundo parámetro, redondea al entero; si se agrega el segundo parámetro número-decimales redondea a este número de dígitos a la derecha del punto decimal. Veamos el siguiente ejemplo:

Función SQL ROUND().

En el primer ejemplo, se redondea al entero, en el segundo se redondea a tres dígitos después del punto decimal.

Función SQL SQRT()

Regresa la raíz cuadrada del número dado.

Sintaxis: SQRT(expresión-numérica)

Función SQRT()

En el ejemplo, se obtiene la raíz cuadrada de 10.

Función SQL CEILING()

Regresa el entero inmediato superior del número dado.

Sintaxis: CEILING(expresión-numérica)

Función CEILING()

El entero inmediato superior de 10.234 es 11.

Función SQL FLOOR()

Regresa el entero inmediato inferior del número dado.

Sintaxis: FLOOR(expresión-numérica)

Función FLOOR()

El entero inmediato inferior de 10.234 es 10.

Función SQL POWER()

Regresa el valor de un número elevado a la n potencia.

Sintaxis: POWER(expresión-numérica)

Función POWER()

El número 10 elevada al cubo o a la potencia 3 es 1000.

Función SQL PI()

Regresa el valor de Pi.

Sintaxis: PI()

Función PI()

Regresa el valor aproximado de ¶ (pi).

En esta sección vimos algunas de las funciones matemáticas que implementa el SQL de SQLite. En la próxima sección veremos algunas funciones de fechas y tiempo.

¡Hasta a próxima!

IR A LA PAGINA DEL CURSO.

Publicado el Dejar un comentario

SQL intermedio: subconsultas en la cláusula SELECT.

En una entrada anterior vimos el uso de subconsultas en la clausula WHERE (condición) de un SELECT. En esta entrada veremos el uso de las subconsulta dentro de la cláusula SELECT.

Subconsultas (subqueries) en cláusula SELECT.

Veamos el siguiente ejemplo de un subconsulta dentro de la cláusula SELECT.

Subconsulta en cláusula SELECT.

La subconsulta obtiene la fecha máxima o más reciente de la fecha contratación de un puesto (Title) dado. La subconsulta en la cláusula SELECT por lo general debe ser una subconsulta escalar, debe regresar una sola fila y una sola columna, es decir un sólo valor en cada ejecución. La subconsulta se ejecutará una vez por cada fila que regrese la consulta externa. En el ejemplo, la subconsulta se ejecuta 8 veces, una por cada fila de la tabla Employee (empleado).

Subconsulta correlacionada.

La subconsulta del ejemplo, además de ser escalar, es decir que regresa un sólo valor por cada ejecución, también se dice que es de tipo correlacionada, es decir, es una subconsulta correlacionada. ¿ Qué significa esto? Significa que la subconsulta toma o necesita información de la consulta que la contiene, la cual recibe el nombre de consulta externa. Si observas, a la tabla Employee de la subconsulta se le ha asignado el alias “e2”, mientras que a la misma tabla pero de la consulta externa se le ha asignado el alias “e1”. Observa que la condición del WHERE de la subconsulta hace referencia a la columna “Title” de la consulta externa: “e1.Title = e2.Title”. Al ejecutar la consulta el valor de “e1.Title” cambiará de acuerdo al valor de la fila regresada por la consulta externa.

Vamos a hacer la consulta más precisa, como puedes observar , la combinación de “Puesto” (Title) y “Fecha de Contratación Máximo” [MAX(HireDate)]en algunas ocasiones aparece repetido. Agreguemos la cláusula DISTINCT al SELECT de la siguiente forma par ahacer más óptima la consulta:

Consulta optimizada.

Recuerda que la cláusula DISTINCT sirve para no presentar filas duplicadas en los resultados. Presenta sólo filas únicas. Ahora sólo aparece una fila para cada “Puesto” y su “Fecha Contratación Máxima”, de los 8 filas originales sólo quedaron 5.

En un próximo artículo, veremos el uso de las subconsultas en la cláusula FROM.

¡Hasta pronto!

Publicado el 1 comentario

SQL intermedio: subconsultas (subqueries).

En este artículo vamos a ver las instrucciones o sentencias SQL llamadas subconsultas (subqueries en inglés).

¿Qué es una subconsulta (subquery) SQL?

Una subconsulta, en SQL, es una sentencia SELECT anidada o dentro de otra sentencia SELECT. Observa el siguiente ejemplo:

Consulta con subconsulta.

Como puedes observar en el ejemplo anterior, existe dos sentencias SELECT, la segunda dentro de la cláusula WHERE del primer SELECT. La segunda sentencia recibe el nombre de subconsulta o subquery ya que se encuentra dentro de otra consulta SELECT.

Sunconsulta o subquery escalar.

Esta subconsulta o subquery recibe el nombre de “subconsulta escalar” debido a que sólo regresa un solo valor en una única fila. Si ejecutamos dicha subconsulta veremos que regresa lo siguiente:

Ejecución de la subconsulta.

Nos regresa el valor 8 que representa el “ArtistId” de la tabla Artist (artista) cuyo campo “Name” convertido a mayúsculas tiene el valor de “AUDIOSLAVE”. Los paréntesis que encierran la subconsulta son obligatorios, si no se colocan , la sentencia entera marcaría error al ejecutarla.

La primera consulta o sentencia SELECT toma el resultado o valor que arroja la subconsulta (el valor 8) y lo compara con los valores de la columna ArtisId de todas las filas de la tabla Album y regresa todas las columnas de la tabla Artist de aquellos registros o filas que hayan cumplan la condición (ArtisId igual a 8). Como muestran los resultados de la primera imagen.

Veamos ahora esta consulta:

Subconsulta multifila.

Subconsulta o query multilinea.

Esta subconsulta, a diferencia de la subconsulta escalar, regresa más de una fila. En este ejemplo la subconsulta regresa el valor de la columna “InvoiceId” de dos filas. Si ejecutamos la solamente la subconsulta obtendremos los siguientes resultados:

Resultados de la subconsulta.

Como podemos observar la subconsulta regresa dos filas, es decir hay dos filas en la tabla InvoiceLine (líneas de factura) que cumplen la condición “TrackId = 2”. La consulta regresa los valores de la columna “InvoiceId” (identificador de la factura) a la que pertenecen (1 y 214).

Por lo tanto el SELECT externo sería equivalente a esta consulta:

Consulta equivalente sin subconsulta multilínea.

Como puedes observar en el resultado de la consulta, los valores de la columna “CustomerId” (identificador del cliente) y el número de filas son los mismos que la consulta original que incluye la subconsulta multilínea. Recuerda que el operador IN de SQL espera una lista de valores cuando la expresión del lado izquierdo devuelve un sólo valor, por lo tanto la subconsulta deberá regresar valores de sólo una columna.

Subconsulta multilínea multicolumna.

Una subconsulta multilínea también puede regresar varias columnas. Veamos el siguiente ejemplo:

Subconsulta multilinea y multicolumna.

En este ejemplo la subconsulta regresa dos columnas: TrackId (el identificado de la pista de audio) y Quantity (la cantidad comparadas de esa pista) de cada una de las lineas de la factura con el identificador (InvoiceId) número 214. Si ejecutamos sólo la subconsulta obtenemos los siguientes resultados:

Ejecución de subconsulta multilinea y multicolumna.

Obtenemos los 9 artículos (pistas de música) que se adquirieron de la InvoiceId (factura o identificador de la factura) 214. El TrackId (identificador de la pista de música) y Quantity (la cantidad adquirida de cada pista) de dicha factura.

La consulta completa regresa las líneas de factura de otras facturas que no pertenezcan a la factura 214 y que coincidan con el identificador de la pista (TrackId) y la cantidad (Quantity) de las lineas de la factura 214.

En este artículo vimos el uso de subconsultas en la cláusula WHERE de un SELECT. En un siguiente artículo veremos cómo emplear la subconsultas en la cláusula FROM o en el mismo SELECT.

¡Hasta pronto!