14 febrero, 2020

Consultas y manejo de fechas

¡Buen días, mis coders! El objetivo de este pequeño post es aprender a generar consultas sencillas a la base de datos con el comando SELECT y emplear funciones para el manejo de fechas: DAY(), MONTH(), YEAR(), DATEDIFF() y DATEPART().

Lo primero que vamos a hacer es crear la siguiente base de datos. Nosotros ya aprendimos a crear bases de datos, aprendimos a crear tablas y aprendimos a llenar datos en las tablas usando el DML INSERT que lo vimos en el tema de SENTENCIAS DML.


Solución:

SI NO TIENES EL SQL SERVER INSTALADO, PUEDES EJECUTAR EL QUERY  INGRESANDO AL SIGUIENTE ENLACE PARA QUE PUEDAS PRACTICAR SIN LA NECESIDAD DE TENER INSTALADO ALGUNA VERSIÓN DEL SQL SERVER EN TU PC.

RexTester: https://rextester.com/VGIBR13046

CONSULTAS DE SELECCIÓN (SELECT)

Las consultas de selección se utilizan para indicar al motor de datos que devuelva información de las bases de datos. Esta información es devuelta en forma de conjunto de registros que se pueden almacenar en un objeto recordset. Este conjunto de registros es modificable.

La sintaxis básica de una consulta de selección es la siguiente:


1. Esta consulta devuelve un recordset con todos los campos de la tabla “CLIENTES”.


2. Esta consulta devuelve un recordset con los campos COD_CLI y NOM_CLI de la tabla “CLIENTES”.



La sintaxis de un SELECT se puede volver muy compleja y extensa, pero conforme avancemos, veremos mas a detalle está instrucción y como lo podemos mesclar con otros comandos, clausulas, predicados, operadores, funciones, etc.

ORDENAR LOS REGISTROS

Adicionalmente se puede especificar el orden en que se desean recuperar los registros de las tablas mediante la cláusula ORDER BY (Lista de Campos). En donde Lista de campos representa los campos a ordenar.

3. Esta consulta devuelve todos los campos de la tabla “CLIENTES” ordenados por el campo apellido paterno del cliente.



4. Esta consulta devuelve todos los campos de la tabla “CLIENTES” ordenados por el campo apellido paterno del cliente de forma descendente.


5. Se pueden ordenar los registros por más de un campo, como por ejemplo:



CONSULTAS CON PREDICADOS


El predicado se incluye entre la cláusula y el primer nombre del campo a recuperar, los posibles predicados son los siguientes:


ALL

Si no se incluye ninguno de los predicados se asume ALL. El motor de base de datos selecciona todos los registros que cumplen las condiciones de la instrucción SQL. No es conveniente abusar de este predicado ya que obligamos al motor de la base de datos a analizar la estructura de la tabla para averiguar los campos que contiene. Por ello, es mucho más rápido indicar el listado de campos deseados.


TOP

Devuelve un cierto número de registros que entran al principio o al final de un rango especificado por una cláusula ORDER BY. Supongamos que queremos recuperar los nombres de los cinco (05) primeros recordset de la tabla clientes ordenados por apellido paterno en forma descendente:


TOP PERCENT

Se puede utilizar la palabra reservada PERCENT para devolver un cierto porcentaje de registros que están al principio o al final de un rango especificado por la cláusula ORDER BY. Supongamos que en lugar de los cinco (05) primeros clientes, deseamos el veinte por ciento (20%) por ciento de la tabla de clientes:


DISTINCT

Omite los registros que contienen datos duplicados en los campos seleccionados. Para que los valores de cada campo listado en la instrucción SELECT se incluyan en la consulta deben ser únicos.
Por ejemplo, varios clientes listados en la tabla clientes pueden tener el mismo apellido paterno. Si dos registros contienen PEREZ en el campo apellido paterno, la siguiente instrucción SQL devuelve un único registro:


ALIAS

En determinadas circunstancias es necesario asignar un nombre a alguna columna determinada de un conjunto devuelto, otras veces por simple capricho o por otras circunstancias. Para resolver todas ellas tenemos la palabra reservada AS que se encarga de asignar el nombre que deseamos a la columna deseada. 

Tomado como referencia el ejemplo anterior podemos hacer que la columna devuelta por la consulta, en lugar de llamarse APE_PAT_CLI (igual que el campo devuelto) se llame APELLIDO_DEL_CLIENTE. En este caso, procederíamos de la siguiente forma:


FUNCIONES DE FECHA

Las funciones de fecha y hora permiten el manejo de datos o campos de tipo fecha y hora. Es sumamente importante el manejo correcto de las fechas, esto es la base para los sistema de toma de decisiones.


Ejemplos


Por último vamos a hablar un poco sobre las consultas de unión internas.

CONSULTAS DE UNIÓN INTERNAS (INNER)

Las vinculaciones entre tablas se realizan mediante la cláusula INNER que combina registros de dos tablas siempre que haya concordancia de valores en un campo común. Su sintaxis es de la siguiente forma:


Se puede utilizar una operación INNER JOIN en cualquier cláusula FROM. Esto crea una combinación por equivalencia, conocida también como unión interna. Las combinaciones aquí son las más comunes; éstas combinan los registros de dos tablas siempre que haya concordancia de valores en un campo común a ambas tablas.

PRODUCTO CARTESIANO E INNER JOIN

1. Muestre los datos de los clientes que han efectuado compras en el año 2004.


2. Muestre los datos de los clientes que han efectuado una compra en el año 2004 y que la comida consumida comience con la letra C ó M. ordénelo por el apellido paterno del cliente y ante coincidencias por el nombre de ese cliente.


3. Muestre los datos de las comidas en cuya preparación se ha utilizado arroz o frejoles


QUERY COMPLETO

Ejecutar query en RexTester

RextTester: https://rextester.com/JTTLQ6779

¡Acabas de ver el tema Consulta y manejo de fechas del curso de Base de Datos en SQL Server! ¡Fácil verdad! Ir al índice.

Asimismo, si quieres comprar la guía completa con todos los temas, ejercicios, evaluaciones, proyectos, aplicaciones, banco de datos y más; puedes ingresar al siguiente enlace. Y si eres seguidor accedes a un descuento del -%50.

¡Quiero esto!

No hay comentarios, ¡cuéntame algo!

Me gustaría saber tu opinión. ¡Saludos!