Modulo 3 - Escribiendo Consultas SELECT

1. Escribiendo simples sentencias SELECT.
2. Eliminando duplicados con DISTINCT.
3. Utilizando alias en Columnas y Tablas.
4. Escribiendo simples expresiones CASE.


        
                                                     ------------------------ *************** ------------------------

1. Escribiendo simples sentencias SELECT.

Puede usar la instrucción SELECT para consultar tablas y vistas. Es probable que use la instrucción SELECT más que cualquier otra declaración individual en T-SQL. Puede manipular los datos con SELECT para personalizar cómo SQL.,  el servidor devuelve los resultados. Este módulo le presenta los fundamentos de la instrucción SELECT, centrándose en consultas en una sola tabla.


En esta lección, aprenderá la estructura y el formato de la instrucción SELECT, además de las mejoras que agregará funcionalidad y legibilidad a sus consultas.


Al final de esta lección, podrás:

• Comprender los elementos de la declaración SELECT.
• Escribir consultas SELECT simples en una sola tabla.
• Eliminar filas duplicadas usando la cláusula DISTINCT.
• Agregar columnas calculadas a una instrucción SELECT.

Elementos de la sentencias SELECT.



Las cláusulas SELECT y FROM son el enfoque principal de este módulo. 
Aprenderá sobre las otras cláusulas en módulos posteriores de este curso. 
Ya ha aprendido el orden de las operaciones en el procesamiento de consultas lógicas; esta voluntad le ayuda a comprender cómo formar sus declaraciones SELECT correctamente.
Recuerde que las cláusulas FROM, WHERE, GROUP BY y HAVING son evaluadas por el motor de consultas antes el contenido de la cláusula SELECT. Por lo tanto, los elementos que escribe en la cláusula SELECT, particularmente calculados columnas y alias, no serán visibles para las otras cláusulas.

Para obtener más información sobre los elementos SELECT, ver:

Recuperando columnas de una tabla o vista



La cláusula SELECT especifica las columnas de la (s) tabla (s) fuente o vistas que desea devolver como resultado conjunto de la consulta. Además de las columnas de la tabla fuente, puede agregar otras en forma de cálculo expresiones.
La cláusula FROM especifica el nombre de la tabla o vista que es el origen de las columnas en la cláusula SELECT.
Para evitar errores en la tabla o ver la resolución del nombre, es mejor incluir el esquema y el nombre del objeto, en el formato SCHEMA.OBJECT, por ejemplo, Sales.Customer.
Si el nombre de la tabla o vista contiene caracteres irregulares, como espacios u otros caracteres especiales, necesita delimitar, o adjuntar, el nombre. T-SQL admite el uso de las comillas dobles estándar de ANSI "Detalles de pedidos de venta", y los corchetes específicos de SQL Server [Detalles de pedidos de venta].
Finalice todas las instrucciones con un carácter de punto y coma (;). 
En SQL Server 2016, los puntos y comas son un terminador opcional para la mayoría de las declaraciones.
Sin embargo, las versiones futuras requerirán su uso. Para los usos actuales cuando se requiere un punto y coma, como algunas expresiones de tabla comunes (CTE) y algunas declaraciones de Service Broker, los mensajes de error devuelto por un punto y coma faltante a menudo son crípticos. 

Por lo tanto, debe adoptar la práctica de terminar todo declaraciones con un punto y coma.

Mostrando las Columnas




Para mostrar columnas en una consulta, debe crear una lista de columnas delimitadas por comas. El orden de las columnas en su lista determinará su visualización en la salida, independientemente del orden en el que los haya definido en la fuente mesa. 
Esto le da a sus consultas la capacidad de absorber los cambios que otros pueden hacer en la estructura de la tabla, tales como agregar o re-ordenar las columnas.
T-SQL admite el uso del asterisco o carácter "estrella" (*) para sustituir una lista de columnas explícita.
Esta voluntad recupera todas las columnas de la tabla fuente. 
Si bien el asterisco es adecuado para una prueba rápida, evite usarlo en producción trabajo, ya que los cambios realizados en la tabla harán que la consulta recupere todas las columnas actuales en la tabla definida actualmente orden. 
Esto podría causar errores u otras fallas en los informes o aplicaciones que esperan un número conocido de columnas devuelto en un orden definido Además, devolver datos que no son necesarios puede ralentizar sus consultas y causar problemas de rendimiento si la tabla de origen contiene una gran cantidad de filas.
Al utilizar una lista de columnas explícita en su cláusula SELECT, siempre obtendrá los resultados deseados, siempre que las columnas existen en la tabla. Si se descarta una columna, recibirá un error que ayudará a identificar el problema y solucionarlo su consulta.

Usar cálculos en la cláusula SELECT




Además de recuperar columnas almacenadas en la tabla fuente, una instrucción SELECT puede realizar cálculos y manipulaciones. Los cálculos y las manipulaciones pueden cambiar los datos de la columna fuente y usar T-SQL incorporado funciones, que aprenderás más adelante en este curso.
Como los resultados aparecerán en una nueva columna, repetida una vez por fila del conjunto de resultados, expresiones calculadas en una La cláusula SELECT debe ser escalar: solo deben devolver un valor único.
Las expresiones calculadas pueden operar en otras columnas en la misma fila, en funciones incorporadas, o una combinación de dos:

Calculando Expresiones.:

SELECT unitprice, qty, (unitprice * qty)
FROM Sales.OrderDetails;

The results appear as follows:

unitpriceqty
--------------------------------------------
14.0012168.00
9.801098.00
34.805174.00
18.609167.40

Tenga en cuenta que la nueva columna calculada no tiene un nombre devuelto con los resultados. Para proporcionar un nombre, usa un alias de columna, del que aprenderá más adelante en este módulo.
Para usar una función incorporada de T-SQL en una columna en la lista SELECCIONAR, pase el nombre de la columna a la función como una entrada:

Crear columna Calculada.:

SELECT empid, lastname, hiredate, YEAR(hiredate)
FROM HR.Employees;

The results:

empidlastnamehiredate
------------------------------------------------ ---------
1Davis2002-05-01 00:00:00.0002002
2Funk2002-08-14 00:00:00.0002002
3Lew2002-04-01 00:00:00.0002002


2. Eliminando duplicado con Distinct.

Las consultas T-SQL pueden mostrar filas duplicadas, incluso si la tabla fuente tiene una columna de clave que impone la exclusividad.
Normalmente, este es el caso cuando recupera solo algunas de las columnas en una tabla. En esta lección, aprenderás cómo eliminar duplicados utilizando la cláusula DISTINCT.

Conjuntos de SQL y filas duplicadas


Si bien la teoría de las bases de datos relacionales requiere filas únicas en una tabla, en la práctica, los resultados de la consulta T-SQL no son conjuntos verdaderos. 
No se garantiza que las filas recuperadas por una consulta sean únicas, incluso cuando provienen de una fuente tabla que utiliza una clave principal para diferenciar cada fila. Tampoco se garantiza que las filas sean devueltas en ningún caso orden. 
Aprenderá cómo abordar esto con ORDER BY más adelante en este curso.
Agregue a esto el hecho de que el comportamiento predeterminado de una declaración SELECT es incluir la palabra clave ALL, y usted puede comenzar a ver por qué los valores duplicados pueden ser devueltos por una consulta, especialmente cuando incluye solo algunos de los columnas en una tabla (y omita las columnas únicas).

Por ejemplo, considere una consulta que devuelve nombres de países de la tabla Sales.Customers:

Consulta SELECT

SELECT country
FROM Sales.Customers;

Un resultado parcial muestra muchos nombres de países duplicados, que en el mejor de los casos es demasiado largo para interpretarlo fácilmente.
En el peor, da una respuesta incorrecta a la pregunta: "¿Cuántos países están representados entre nuestros clientes?"

country
--------------------
Germany
Mexico
Mexico
UK
Sweden
Germany
Germany
France
UK
Austria
Brazil
Spain
France
Sweden

Germany
France
Finland
Poland
(91 rows(s) affected)

El motivo de este resultado es que, de forma predeterminada, una cláusula SELECT contiene una instrucción ALL predeterminada oculta.

Entendiendo DISTINCT


Reemplazar la cláusula SELECT ALL predeterminada con SELECT DISTINCT filtrará los duplicados en el conjunto de resultados.
SELECT DISTINCT especifica que el conjunto de resultados debe contener solo filas únicas.
Sin embargo, es importante Entiendo que la opción DISTINCT opera solo en el conjunto de columnas devuelto por la cláusula SELECT.
Lo hace no tomar en cuenta ninguna otra columna única en la tabla fuente. DISTINCT también opera en todas las columnas de la lista SELECCIONADA, no solo la primera.
El orden lógico de las operaciones también asegura que el operador DISTINCT eliminará las filas que ya pueden tener procesado por las cláusulas WHERE, HAVING y GROUP BY.
Continuando con el ejemplo anterior de países de la tabla Sales.Customers, puede reemplazar el ALL silencioso predeterminado con DISTINCT, para eliminar los valores duplicados:

Sentencia DISTINCT

SELECT DISTINCT country
FROM Sales.Customers;

Esto devolverá los resultados deseados. Tenga en cuenta que, aunque los resultados parecen estar ordenados, esto no está garantizado por SQL Servidor.
El conjunto de resultados ahora contiene solo una instancia de cada fila de salida única:

country
--------
Argentina
Austria
Belgium
Brazil
Canada
Denmark
Finland
France
Germany
Ireland
Italy
Mexico
Norway
Poland
Portugal
Spain
Sweden
Switzerland
UK
USA
Venezuela
(21 row(s) affected)

Sintaxis SELECT 


Recuerde que DISTINCT mira las filas en el conjunto de salida, creado por la cláusula SELECT. Por lo tanto, solo único los valores de columna serán devueltos por una cláusula SELECT DISTINCT.
Por ejemplo, si consulta una tabla con los siguientes datos, puede observar que solo hay cuatro únicos
nombres y cuatro apellidos únicos:

Sentencia SELECT

SELECT firstname, lastname
FROM Sales.Customers;
The results:
firstnamelastname
-----------------------------
Sara Davis
Don Funk
Sara Lew
Don Davis
Judy Lew
Judy Funk

Yael Peled

Sin embargo, una consulta SELECT DISTINCT contra ambas columnas recuperará todas las combinaciones únicas de los dos columnas que, en este caso, son los mismos siete empleados.

Para obtener una lista de nombres únicos únicos, ejecute SELECT DISTINCT solo contra la primera columna:

Sintaxis DISTINCT

SELECT DISTINCT firstname
FROM Sales.Customers;
The results:
firstname
---------------------
Don
Judy
Sara
Yael
(4 row(s) affected)

Un desafío en el diseño de tales consultas es que, si bien es posible que deba recuperar una lista distinta de valores de uno columna, es posible que desee ver atributos adicionales (columnas) de otros.
Más adelante en este curso, verás cómo combine DISTINCT con la cláusula GROUP BY como una forma de procesar y mostrar información sobre listas distintas de valores.

3. Utilizando alias en Columnas y Tablas.

Al recuperar datos de una tabla o vista, una consulta de T-SQL nombrará cada columna después de su fuente. 
Usted puede volver a etiquetar columnas mediante el uso de alias en la cláusula SELECT. Sin embargo, las columnas creadas con expresiones no se nombrarán automáticamente. 
Los alias de columna se pueden usar para proporcionar encabezados de columna personalizados. 
En el nivel de la mesa, puedes usar alias en la cláusula FROM para proporcionar una forma conveniente de referirse a una tabla en otra parte de la consulta, mejorando legibilidad.

Utilizando alias para referirse a Columnas.


Los alias de columna se pueden usar para volver a etiquetar columnas al devolver los resultados de una consulta. Por ejemplo, nombres crípticos
de columnas en una tabla como "qty" se puede reemplazar por "cantidad".
Las expresiones que no se basan en una columna de origen en la tabla no tendrán un nombre proporcionado en el conjunto de resultados. Esta
incluye expresiones calculadas y llamadas a funciones. Si bien T-SQL no requiere que una columna en un conjunto de resultados tenga una
nombre, es una buena idea proporcionar uno.
En T-SQL, existen varios métodos para crear un alias de columna, con resultados de salida idénticos.
Un método es usar la palabra clave AS para separar la columna o expresión del alias:

Como Escribirlo.

SELECT orderid, unitprice, qty AS quantity
FROM Sales.OrderDetails;

Otro método es asignar el alias antes de la columna o expresión, usando el signo igual como separador:

Alias con igual muestra

SELECT orderid, unitprice, quantity = qty
FROM Sales.OrderDetails;

Finalmente, puede simplemente asignar el alias inmediatamente después del nombre de la columna, aunque esto no es un método recomendado:

Alias siguiente nombre de columna

SELECT orderid, unitprice, qty quantity
FROM Sales.OrderDetails;

Si bien no hay diferencia en el rendimiento o la ejecución, una variación en la legibilidad puede hacer que elija uno o el otro como una convención.
Advertencia: los alias de columna también se pueden crear accidentalmente, omitiendo una coma entre dos nombres de columna en el SELECCIONE la lista.
Por ejemplo, lo siguiente crea un alias para la columna de precio unitario etiqueta engañosamente cantidad:

Accidentes de Alias

SELECT orderid, unitprice quantity
FROM Sales.OrderDetails;

The results:

orderidquantity
-----------------------------
1024814.00
102489.80
1024834.80
1024818.60

Como puede ver, esto podría ser difícil de identificar y corregir en una aplicación cliente. La única forma de evitar este problema es para enumerar las columnas con cuidado, separando las con comas y adoptando el estilo AS de alias, para que sea más fácil detectar errores.

Utilizando Alias para referirse a las Tablas


Los alias también se pueden usar en la cláusula FROM para referirse a una tabla; esto puede mejorar la legibilidad y ahorrar redundancia al hacer referencia a la tabla en otra parte de la consulta. 
Si bien este módulo se ha centrado en consultas de tabla única, que no necesariamente se beneficia de alias de tabla, esta técnica será útil a medida que aprenda consultas más complejas en módulos posteriores.
Para crear un alias de tabla en una cláusula FROM, usará una sintaxis similar a varias de las técnicas de alias de columna.
Puede usar la palabra clave AS para separar el nombre de la tabla del alias. Este estilo es preferido:

Tabla Alias utilizando AS

SELECT orderid, unitprice, qty
FROM Sales.OrderDetails AS OD;

Puede omitir la palabra clave AS y simplemente seguir el nombre de la tabla con el alias:

Tabla Alias sin AS

SELECT orderid, unitprice, qty
FROM Sales.OrderDetails OD;

Para combinar alias de tabla y columna en la misma instrucción SELECT, use el siguiente enfoque:

Tablas y Columnas Aliases Combinadas

SELECT OD.orderid, OD.unitprice, OD.qty AS Quantity
FROM Sales.OrderDetails AS OD;

Como este módulo se centra en consultas de tabla única, es posible que aún no vea un beneficio al usar alias de tabla. En el próximo módulo, aprenderá cómo recuperar datos de múltiples tablas en una sola instrucción SELECT. En esas consultas, el El uso de alias de tabla para representar nombres de tabla será útil.

El impacto de la orden de procesamiento lógico en los alias


Al usar alias de columna, puede surgir un problema.

Los alias creados en la cláusula SELECT no se pueden consultar en otros en la consulta, como una cláusula WHERE o HAVING.
Esto se debe al procesamiento de consultas de orden lógico.
los WHERE y las cláusulas HAVING se procesan antes de que se evalúe la cláusula SELECT y sus alias (HAVING y las cláusulas WHERE se tratarán en un módulo separado).
Una excepción a esto es la cláusula ORDER BY.

Aquí se proporciona un ejemplo para ilustración y se ejecutará sin error:

ORDER BY con Alias

SELECT orderid, unitprice, qty AS quantity
FROM Sales.OrderDetails
ORDER BY quantity;

Sin embargo, el siguiente ejemplo devolverá un error, ya que la cláusula WHERE se ha procesado antes de SELECT cláusula define el alias:

WHERE incorrecto con Alias

SELECT orderid, unitprice, qty AS quantity
FROM Sales.OrderDetails
WHERE quantity > 10;

Como resultado, a menudo necesitará repetir una expresión más de una vez en la cláusula SELECT, donde puede crea un alias para nombrar la columna, y en la cláusula WHERE o HAVING:

WHERE correcto con Alias

SELECT orderid, YEAR(orderdate) AS orderyear
FROM Sales.Orders
WHERE YEAR(orderdate) = '2008'

Además, dentro de la cláusula SELECT, no puede referirse a un alias de columna que se definió en el mismo SELECT declaración, independientemente del orden de las columnas.
La siguiente declaración devolverá un error:

Columna Alias utilizada en la clausula SELECT

SELECT productid, unitprice AS price, price * qty AS total
FROM Sales.OrderDetails;

The resulting error:

Msg 207, Level 16, State 1, Line 1
Invalid column name 'price'.


4. Escribiendo simple expresión CASE.

Una expresión CASE amplía la capacidad de una cláusula SELECT para manipular datos a medida que se recuperan.
A menudo al escribir una consulta, debe sustituir un valor de una columna por otro valor.
Mientras aprenderás a realizar este tipo de búsqueda de otra tabla más adelante en este curso, también puede realizar sustituciones básicas utilizando CASE simple expresiones en la cláusula SELECT. En entornos del mundo real, CASE se usa a menudo para ayudar a que los datos crípticos se mantengan en una columna más significativa.
Una expresión CASE devuelve un valor escalar (de un solo valor) basado en la lógica condicional, a menudo con múltiples condiciones.
Como valor escalar, se puede usar dondequiera que se puedan usar valores individuales. Además de la instrucción SELECT, CASE las expresiones se pueden usar en las cláusulas WHERE, HAVING y ORDER BY.

Usar expresiones CASE en cláusulas SELECT



En T-SQL, las expresiones CASE devuelven un valor único o escalar. A diferencia de algunos otros lenguajes de programación, en TSQL, Las expresiones CASE no son declaraciones, ni especifican el control del flujo programático. En cambio, son utilizado en cláusulas SELECT (y otras) para devolver el resultado de una expresión. Los resultados aparecen como un cálculo columna y, para mayor claridad, debe tener un alias.
En las consultas T-SQL, las expresiones CASE a menudo se utilizan para proporcionar un valor alternativo para una almacenada en la fuente mesa.

Por ejemplo, una expresión CASE podría usarse para proporcionar un nombre de texto amigable para algo almacenado como código numérico compacto.

Formas de expresiones CASE


En T-SQL, las expresiones CASE pueden tomar una de dos formas: CASE simple o CASE buscado (Boolean).
Las expresiones CASE simples, el tema de esta lección, comparan un valor de entrada con una lista de posibles valores coincidentes:
Si se encuentra una coincidencia, se devuelve el primer valor coincidente como resultado de la expresión CASE. Múltiples partidos son no permitido.
Si no se encuentra una coincidencia, una expresión CASE devuelve el valor encontrado en una cláusula ELSE, si existe.
Si no se encuentra ninguna coincidencia y no hay ninguna cláusula ELSE presente, la expresión CASE devuelve un NULL.
Por ejemplo, la siguiente expresión CASE sustituye un nombre de categoría descriptiva para el valor categoryid almacenado en la tabla Production.Categories.
Tenga en cuenta que esto no es una operación JOIN, solo una simple sustitución con un
Tabla individual:

Expresiones CASE

SELECT productid, productname, categoryid,
CASE categoryid
WHEN 1 THEN 'Beverages'
WHEN 2 THEN 'Condiments'
WHEN 3 THEN 'Confections'
ELSE 'Unknown Category'
END AS categoryname
FROM Production.Categories

The results:

productid productname categoryid categoryname
--------- ------------ ---------- ---------------------
101 Tea 1 Beverages
102 Mustard 2 Condiments
103 Dinner Rolls 9 Unknown Category


Las expresiones CASE (booleanas) buscadas comparan un valor de entrada con un conjunto de predicados o expresiones lógicas.
La expresión puede contener un rango de valores para hacer coincidir. Al igual que una simple expresión CASE, el valor de retorno es encontrado en la cláusula THEN del valor coincidente.
Debido a su dependencia de las expresiones de predicados, que no se tratarán hasta más adelante en este curso, más la discusión de expresiones CASE buscadas está más allá del alcance de esta lección.






No hay comentarios:

Publicar un comentario