Capitulo 1–Leccion 1: La instrucción SELECT

Una de las principales funciones que debe realizar en sus bases de datos Microsoft SQL Server es la recuperación de datos, mediante la instrucción SELECT combinada con una gran variedad de operadores y cláusulas que amplían la funcionalidad proporcionada por una instrucción SELECT simple.
Los objetivos en este capítulo:
  • Datos de la consulta mediante el uso de SELECT.
  • Implementar las consultas de agregado.
  • Combinar conjuntos de datos.
  • Aplicar funciones escalares.
Formato de la sintaxis de la sentencia
La sentencia SELECT más básico debe incluir al menos una cláusula SELECT y una cláusula FROM.
La sentencia SELECT más básica recupera todas las columnas y todas las filas de una tabla. El ejemplo de código siguiente se recuperan todas las filas y columnas de la tabla Employee en el esquema HumanResources.
SELECT * FROM HumanResources.Employee;


Para delimitar el conjunto de resultados y sólo devolver las columnas correspondientes, reemplazar el asterisco (*) con los nombres de columna requerida, como en el ejemplo de código aquí:
SELECT LoginID, JobTitle, BirthDate, MaritalStatus, Gender
FROM HumanResources.Employee;

El comportamiento predeterminado de la instrucción SELECT debe devolver todas las filas de la tabla o todas las filas coincidentes de la cláusula WHERE. Si desea excluir filas que tienen duplicaciones exacta de los datos, puede utilizar SELECT DISTINCT.
La figura 1-1 muestra cada color distinto que existe en la tabla  Production.Product. Sin la palabra clave DISTINCT, el color asociado con cada fila de la tabla sería devuelto, el aumento del tamaño del conjunto de resultados y lo que es más difícil de leer. Veamos los resultados de ambas consultas:
SELECT Color from Production.Product;



Observemos que obtenemos 504 resultados
image
SELECT DISTINCT Color from Production.Product;

y con la clausula DISTINCT obtenemos solo 10, los que son diferentes

image

Nota Trabajar con valores NULL
Un valor NULL es la ausencia de datos en una columna. Cuando la configuración de ANSI_NULLS se establece en ON, la configuración por defecto, no se puede equiparar a los valores NULL. Si lo intenta, el servidor devuelve "unknown". Por ejemplo, en el código anterior, si se ha sustituido "IS NOT" con "<>", la consulta no devuelve ninguna fila en una configuración predeterminada. Si ejecuta los siguientes comandos en conjunto, se obtendría el mismo resultado establecido como el código de ejemplo anterior:

SET ANSI_NULLS OFF;
SELECT DISTINCT Color from Production.Product
WHERE Color <> NULL;


La cláusula WHERE


Como se muestra en el ejemplo anterior, la cláusula WHERE se utiliza en la mayoría de los casos para limitar el número de filas devueltas en el conjunto de resultados. Incluid la cláusula WHERE por lo general aumenta el rendimiento de consulta mediante la limitación de la cantidad de datos que debe ser enviado de vuelta a la aplicación cliente.

La cláusula WHERE puede incluir una variedad de condiciones de búsqueda que puede incluir operadores lógicos y predicados como LIKE , BETWEEN, EXISTS, IS NULL, IS NOT NULL, y CONTAINS.
Como se mencionó anteriormente, el IS (IS NOT) NULL devuelve las filas sobre la base de la existencia de valores NULL en la columna de nombre.

La cláusula CONTAINS sólo está disponible cuando se crea un índice de texto completo en la columna que se comparan.

Los operadores booleanos, que incluyen AND, OR y NOT, se puede utilizar para definir más de un criterio en una cláusula WHERE. El código de ejemplo siguiente devuelve solamente los productos que tienen un atributo de color igual a plata y también tienen un precio superior a $ 200:
SELECT * FROM Production.Product
WHERE Color = 'Silver' AND ListPrice > 200



El Orden de las operaciones es importante

Cuando el motor de base de datos analiza y compila una consulta, las condiciones que incluyen operadores booleanos se evalúan en el siguiente orden: NOT, AND, OR. Este orden de operaciones es importante para entender malentendidos, porque puede provocar que la consulta ejecutada devuelva un conjunto de resultados no deseados. Puede utilizar paréntesis para controlar el orden de las operaciones.

La cláusula LIKE

La cláusula LIKE le permite coincidir con una cadena de caracteres en una columna a un patrón especificado en la cláusula WHERE. La cláusula LIKE utiliza los siguientes caracteres comodín:


  • Porcentaje (%) Sustituye a cualquier número de caracteres (incluido el 0 caracteres) en la cadena. Por ejemplo,%ato hara coincidir ato, gato, pato y cato por ejemplo.
  • Subrayado (_) Sustituye exactamente un carácter en la cadena. Por ejemplo, _ato hara coincidir gato, pato y cato, pero no ato por ejemplo.
  • Los corchetes ([]) Sustituye a cualquier carácter dentro de un conjunto o una serie de caracteres. Un conjunto se muestra con frecuencia como una lista de caracteres directamente, por ejemplo, [abcd], pero los caracteres pueden ser separados por comas para añadir claridad, por ejemplo, [a, b, c, d]. Un rango es separado por un guión, por ejemplo, [a-d]. Cada una de estas tres opciones incluye todas las filas donde el carácter especificado es un a, b, c, y d.
  • Caret (^) Cualquier carácter no dentro de un conjunto o rango de caracteres. Por ejemplo, [^ a-d] sería igual a [e-z].
Veamos unos ejemplos para fijar esto:

El siguiente ejemplo devuelve todos los empleados cuyo cargo dentro de la empresa comienza con  la palabra market.
Como estamos usando una base de datos case-insensitive, las mayúsculas no se consideran como parte de los criterios de búsqueda:
image
La cláusula BETWEEN devuelve todas las filas sobre la base de un rango de valores. El siguiente ejemplo de código devuelve todas las filas de la tabla Production.Product en el precio de lista es de entre $ 50 y $ 80. Tenga en cuenta que el precio de lista se puede utilizar en la cláusula WHERE a pesar de que no aparece en la cláusula SELECT:
image
La cláusula EXISTS define una subconsulta que se utiliza para determinar si existen filas en el conjunto de resultados. Veremos mas detalles en el capitulo 4.
Manipular conjuntos de resultados
Se puede definir un alias de la tabla que se utiliza cuando no es conveniente escribir de forma repetida el nombre de tabla en toda la consulta. Además, el alias de tabla puede ser necesario en ciertos comandos como auto-joins.
(auto-joins están cubiertos en la lección 2, "Tablas relacionadas)

También se puede definir un alias para una columna para que el conjunto de resultados muestra el nuevo nombre de columna.
La consulta siguiente utiliza dos alias de columna y un alias de tabla:
SELECT PP.FirstName AS 'First Name', PP.LastName AS 'Last Name'
, PP.PersonType AS 'Person Category'
FROM Person.Person AS PP
ORDER BY PersonType



Esta consulta utiliza una cláusula adicional que afecta el conjunto de resultados mostrados. La cláusula ORDER BY indica una o más columnas que se deben utilizar para ordenar el conjunto de resultados.

La consulta anterior emplea la opción por defecto de ORDER BY ASC, que ordena el conjunto de resultados de menor a mayor valor. A veces, especialmente con valores numéricos, es posible que desee ver los valores más altos primero. Cuando usted quiere ver los valores más altos primero, se utiliza la cláusula ORDER BY DESC.
La ordenación y la intercalación definida para la columna afectan a cómo los resultados se ordenan.

Concatenar resultados:
Es posible incluir expresiones en el conjunto de resultados. Se pueden definir los títulos de columna para estas expresiones mediante el uso de un alias. Al Concatenar le permiten combinar varias columnas y los literales de cadena en una sola columna.
En la tabla Person, la columna PersonType  contiene "EM" para los empleados.
La siguiente consulta muestra un comando que acumula lo mostrado previamente y agrega una columna detallando los empleados en una columna titulada “Description” en cada fila. La consulta también restringe el conjunto de resultados a las filas que contienen un PersonType es igual a "EM".

SELECT PP.FirstName + ' ' + PP.LastName AS 'Name'
       ,PP.PersonType AS 'Category', 'Employee' as Description
FROM Person.Person AS PP
WHERE PP.PersonType = 'EM'

image
Resumen de la lección


  • La sentencia SELECT se puede utilizar para recuperar datos de una tabla o vista.
  • El conjunto de la declaración de resultados SELECT pueden ser filtrados por la adición de una cláusula WHERE.
  • El conjunto de resultados SELECT declaración se pueden ordenar mediante el uso de la cláusula ORDER BY.
  • Los literales de la concatenación, alias, y palabras puede ser usados para manipular y dar formato al conjunto de resultados.

2 comentarios:

  1. Te tomaste un re laburo...Estoy empezando a leer el libro para certificar y la verdad que me viene bien tenerlo traducido .
    Muchas gracias y por lo que vi es un excelente trabajo.
    Saludos
    Martin

    ResponderEliminar
  2. Gracias amigo de verdad te vas a ir al cielo con todo y base de datos!! me ayudara mucho para mi certificación!!!

    ResponderEliminar