Bienvenidos a la segunda nota en esta serie de lecciones sobre SQL nivel básico, en esta ocasión nos dedicaremos a hablar un poco sobre las consultas simples que se pueden realizar para obtener datos de tablas o seleccionar registros por ejemplo.

Como vimos en la nota anterior, una de las sentencias más usadas y complejas es SELECT, el resultado de esta es una tabla lógica que alberga las filas resultantes de la ejecución de la sentencia.

Si bien su sintaxis puede llegar a ser muy extensa, por esta nota nos limitaremos a una versión muy simple de ella:

SELECT [ALL|DISTINCT][TOP expresion [PERCENT] [WITH TIES]] 
<lista_seleccion> FROM <origen> [WHERE  <condicion_ busqueda> ]
[ORDER BY {expression_columna|posicion_columna [ASC|DESC]}[ ,...n]]

 

En la nota anterior vimos algunos ejemplos básicos del uso del SELECT y por tanto notamos como se usa el FROM para definir el origen de los datos que queremos recuperar.

Por otro lado tenemos la lista de selección en donde se indican las columnas que se visualizarán en el resultado de la consulta, estas deben estar separadas por comas y aparecerán en el orden en que fueron escritas.

Entonces para poner un ejemplo rápido podríamos utilizar la siguiente sentencia:

SELECT Nombre, Tipo, Categoria
FROM Agente;

 

Lo que nos traerá dichas columnas en ese orden de la tabla agente:

Consulta de SQL

El proceso lógico de una consulta

Un SELECT está compuesto de una combinación de elementos obligatorios y opcionales. No todos los elementos estarán presentes en cada consulta SELECT, sin embargo, cuando un elemento está presente, siempre será evaluado en el mismo orden con respecto a los otros elementos presentes. Por ejemplo, una cláusula WHERE siempre será evaluada después de la cláusula FROM y antes de una cláusula GROUP BY, si es que existe.

A continuación tenemos los elementos ordenamos como se escribirían en una consulta, los números a su izquierda hacen referencia a la prioridad en que dichos elementos  son evaluados:

5: SELECT

1: FROM

2: WHERE

3: GROUP BY Si existe

4: HAVING Si existe

5: ORDER BY

Por lo que brevemente explicado quedaría como sigue:

  1. La cláusula FROM se evalúa en primer lugar, esto para proporcionar el origen del  resto de la declaración. Una tabla virtual se crea y continuamos con el siguiente paso.
  2. La cláusula WHERE es la siguiente a evaluar, filtra las filas de la tabla de origen para que coincidan con un predicado. La tabla virtual filtrada se usará en el siguiente paso.
  3. GROUP BY es el siguiente, se organizan las filas de la tabla virtual de acuerdo a los valores únicos que se encuentran en la lista GROUP BY. Se crea una nueva tabla virtual, que contiene la lista de grupos y continuamos con lo siguiente.
  4. La cláusula HAVING se evalúa a continuación, se filtran los grupos en base a su predicado. La tabla virtual creada en el paso 3 se filtra y continuamos con el paso final.
  5. La cláusula SELECT finalmente se ejecuta, siendo la determinación de qué columnas aparecerán en los resultados de la consulta.

No en todas las consultas es necesario usar todas las cláusulas, por lo que de faltar alguna, simplemente se saltaría el paso y continuaría con las cláusulas existentes.

Alias de columna y de tabla

En el encabezado de cada columna del resultado de la consulta, predeterminadamente aparece el nombre de la columna origen pero en ocasiones es necesario cambiar dicho nombre para una mejor presentación de los datos. De tal manera puedes identificar y leer el resultado de tu consulta de manera sencilla.

El alias de una columna se puede indicar con la cláusula AS, dependiendo de la versión y el sistema gestor que se utilice se tendrán que usar comillas simples para definir el alias o simplemente escribirlo como un texto normal siguiendo las normas de los identificadores.

Un ejemplo utilizando alias en columnas:

SELECT Articulo AS 'ID',Descripcion1 AS 'Descripción', 
Impuesto1 AS 'IVA', PrecioLista AS 'Precio en Lista'
FROM Art;

 

El resultado sería el siguiente:

Consulta SQL

Mientras que la misma consulta sin usar alias quedaría de la siguiente forma:

Consulta SQL - Alias de columna y de tabla

De la misma manera, podemos utilizar algún alias con nuestras tablas, así al momento de unirlas será más sencillo hacer referencias a campos de tablas específicas (eso se verá en el tema de consultas multitabla).

Los alias hacen que las consultas sean más legibles para el programador por lo que es recomendable utilizarlas incluso si se trata de una sola tabla para hacer un buen hábito de ello.

Un ejemplo utilizando una tabla con un alias es como sigue:

SELECT Cliente, Nombre
FROM cte AS c;

 

Se recomienda que se utilicen alias cortos, por lo regular de una sola letra que sería la inicial de la tabla o si se trata de un nombre de tabla formado de distintas palabras que sea lo más corto pero entendible posible. Cabe mencionar que este alias no influye en el resultado de la consulta y que tampoco cambia el nombre original de la tabla.

Funciones

Existen distintas funciones que podemos utilizar en nuestra lista de selección o en otras cláusulas de nuestra consulta como el WHERE.

Los principales tipos de funciones son de fecha, cadena, numéricas, de conversión y otras avanzadas.

Para evitar alargar mucho esta nota, les dejaré un enlace con una lista específica de manera que puedan buscar alguna función que se ajuste a sus necesidades. Cabe mencionar que este listado es para quienes usan SQL Server pero hay algunas similitudes por ejemplo para quienes utilizan MySQL.

Listado de funciones

Columnas Calculadas

A menudo es necesario utilizar operaciones con los datos de nuestras tablas para obtener resultados determinantes y específicos que no se podrían obtener con solo los datos de las tablas como tal .

Esto se evalúa a partir de una expresión que puede contener cualquier operador válido(+, -, *, /…), función válida, constantes, parámetros e incluso combinar varias operaciones de ser necesario.

Para que quede aún más claro cómo podemos utilizar esto, les dejo un ejemplo de una consulta con una columna calculada, utilizando a la vez un alias para la misma:

SELECT p.Nombre+' '+p.ApellidoPaterno+
' '+p.ApellidoMaterno AS 'Nombre Completo',
DATENAME(dw,p.FechaNacimiento)+','+
' '+DATENAME(dd,p.FechaNacimiento)+
' '+DATENAME(mm,p.FechaNacimiento)+
' '+DATENAME(yyyy,p.FechaNacimiento) AS 'Fecha de Nacimiento'
FROM Personal AS p;

 

Antes de que vean el resultado, quisiera explicarles un poco la consulta.

La primer columna se trata de una suma de 3 campos, además de esto entre cada uno se le agrega un espacio en blanco para que se lea de manera adecuada.

La segunda columna está conformada de otra suma pero utilizando además una función de fecha. La función DATENAME obtiene del campo seleccionado el nombre según lo que se le indique en su primer parámetro, siendo en este caso “dw” utilizado para el día de la semana, “dd” para el día en numérico, “mm” para el mes y finalmente “yyyy” para indicar el año a cuatro dígitos.

Ahora bien, el resultado sería como sigue:

Consulta SQL - Columnas calculadas

Ordenación de filas del resultado con cláusula ORDER BY

Si por alguna razón necesitamos que nuestros resultados sean mostrados en un orden específico lo podemos hacer mediante la cláusula ORDER BY.

Se puede indicar desde una columna o varias separadas por una coma, la columna que se quiera seleccionar deberá ser indicada mediante el nombre de columna en su origen de datos.

Se debe saber que por defecto se ordenan los datos de manera ascendente (ASC) pero de así necesitarlo le podemos indicar que sea de forma descendente (DESC).

Algunas cosas que debemos tener en cuenta al utilizar esta cláusula:

  • Si la columna de ordenación es numérica, las filas se ordenarán de menor a mayor.
  • Si la columna de ordenación es alfanumérica, las filas se ordenarán por orden alfabético.
  • Si la columna de ordenación es de tipo fecha, las filas se ordenarán de más antigua a más reciente o futura.

Ahora veamos un ejemplo utilizando ORDER BY:

SELECT Mov AS 'Movimiento', Cliente, Importe
FROM Venta AS v
ORDER BY Importe;

 

El resultado es ordenado entonces por el importe, de la venta que tenga el menor a la venta que tenga el mayor importe.

Consulta SQL - Order By

Selección de filas con la cláusula WHERE

Esta cláusula se usa para determinar las filas que se desean utilizar del origen de datos en específico. Es una cláusula muy utilizada ya que en el resultado de la consulta solo se mostrarán las filas que cumplan con que la condición dada sea TRUE.

Se pueden utilizar condiciones simples o más elaboradas con varios predicados unidos por operadores como AND u OR. Si se planea utilizar más de un predicado en la condición unidos con operadores se recomienda poner cada predicado entre paréntesis para evitar confusiones.

Los predicados que se trabajan en SQL son los siguientes:

  • Comparación estándar ( =  , <> , !=, < , <= , !<, >  , >= ,!>)
  • Pertenencia a un intervalo (BETWEEN)
  • Pertenencia a un conjunto (IN)
  • Test de valor nulo (IS NULL).
  • Coincidencia con patrón (LIKE)
  • Si contiene (CONTAINS)
  • FREETEXT

Un ejemplo del uso de la cláusula WHERE con una comparación estándar sería como sigue:

SELECT Personal, Nombre, ApellidoPaterno AS 'Apellido Paterno',
YEAR(FechaNacimiento) AS 'Año de Nacimiento'
FROM Personal WHERE YEAR(FechaNacimiento)  < 1980;

 

Donde la consulta pide algunas columnas de la tabla Personal pero solo de los empleados que hayan nacido antes de 1980.

Consulta SQL - WHERE

Podemos utilizar el predicado BETWEEN para definir un rango de datos entre dos expresiones, vamos directamente a un ejemplo.

SELECT Mov AS 'Movimiento', MovID AS 'ID del Movimiento',
DATENAME(dd,FechaEmision)+' '+ DATENAME(mm,FechaEmision)+
' '+DATENAME(yyyy,FechaEmision) AS 'Fecha de Emisión'
FROM Venta AS v
WHERE FechaEmision BETWEEN '20090101' AND '20090131'
ORDER BY FechaEmision;

 

En este ejemplo estamos requiriendo ciertas columnas de la tabla Venta donde la fecha de emisión de los movimientos sean las del mes de enero del año 2009, ordenadas por la fecha de emisión misma.

Consulta SQL - BETWEEN

Ahora bien, sigamos con el predicado IN, esta evalúa si el valor de la expresión es uno de los valores incluidos en la lista de valores designados entre paréntesis en el predicado. Podemos utilizar cualquier expresión siempre y cuando se utilice el mismo tipo de datos entre expresiones.

SELECT Mov AS 'Movimiento', MovID AS 'ID Movimiento',Proveedor
FROM Compra AS c
WHERE Proveedor IN ('PROVE001', 'PROVE002');

 

En esta consulta buscamos que se nos muestren los movimientos de compras hechos por los proveedores PROVE001 y PROVE002.

Consultas SQL - WHERE

Uno de los predicados más útiles en caso de que nuestra base de datos tengan muchos datos nulos es el de IS NOT NULL. Que básicamente se trata de obtener los datos de las columnas que no sean nulos pero con el ejemplo quedará más claro el objetivo de hacer esto.

Utilizando parte de una consulta anterior, la base de datos que estoy utilizando tiene varios valores nulos por lo que en la consulta de la cláusula ORDER BY utilice este predicado como sigue:

SELECT Mov AS 'Movimiento', Cliente, Importe
FROM Venta AS v
WHERE Importe IS NOT NULL
ORDER BY Importe;

 

Esto hace que si hay valores nulos, no nos los muestre para realmente obtener los datos que necesitamos, de lo contrario la consulta sin el IS NOT NULL nos daría este resultado:

Consultas SQL - IS NOT NULL

Finalmente podemos utilizar operadores lógicos para unir más de una condición simple y conformar una condición compuesta.

SELECT Personal, Nombre, ApellidoPaterno, Tipo, Estado
FROM Personal
WHERE (Nombre LIKE 'J%') AND (Estado='DISTRITO FEDERAL');

 

En esta consulta estamos utilizando un predicado que no hemos mencionado y es el LIKE. Este predicado busca similitudes dependiendo lo que le indiques, en este caso se busca que el nombre de empleado empiece con la letra “J”, por otro lado y como segunda condición se busca que el empleado sea del estado “Distrito Federal”.

Consultas SQL

Con esto finalizamos la lección de la nota de hoy no sin antes recordarles que esto se trata de un tipo de serie por lo que este pequeño curso de SQL básico continuará en futuras entradas, cualquier duda que pudieran tener son bienvenidos de dejarlas en los comentarios y yo responderé a la brevedad posible.

En la siguiente entrada de SQL básico trataremos el tema de las consultas multitabla, todas las maneras en las que podemos juntar dos o más tablas para obtener resultados totalmente distintos a los que obtenemos utilizando una sola tabla.

¡Nos leemos hasta otra!

Referencias

https://www.w3schools.com/SQl

Documentación sobre SQL de Microsoft: https://docs.microsoft.com/en-us/sql

Imágenes usadas:

Logo SQL:http://sanalkurs.net/etiketler/sql-injection

Screenshots tomadas por la autora en SQL Server.

sorayagami02
Soy una chica gamer que últimamente pasa demasiado tiempo dejando los juegos a medias... !eso no es bueno, eh! Leo fanfics a todas horas del día y tengo fandoms a morir así que, sí, soy toda una fangirl.

Deja un comentario

A %d blogueros les gusta esto: