You are on page 1of 14

Curso de SQL Server 2008 - Cuarta Parte: Recuperando datos y manipulando conjuntos de resultados

Autor: DesarrollandoSoftware.com Tutorial HTML Una de las funciones primarias que necesitamos saber en Microsoft SQL Server es recuperar datos de la base de datos, en esta entrega aprenderemos como utilizar las clausulas SELECT, FROM, WHERE para recuperar datos junto a estas utilizaremos otras clausulas para manipular el conjunto de resultados. Para esto utilizaremos el Editor de consultas del Microsoft Management Studio, esta herramienta nos permite generar, corregir y ejecutar nuestras consultas.

Recuperacin de Datos

Manipulando el conjunto de resultados

Consultas en Microsoft SQL Server 2008


Para empezar a ejecutar consultas SQL iniciaremos SQL Server Management Studio, presionamos el botn Nueva Consulta

Tenemos una ventana llamada SQLQuery1.sql donde escribiremos las consultas SQL, noten que a lado izquierdo del botn Ejecutar se encuentra una lista de las bases de datos disponibles, tengamos cuidado de que est en la base de datos que queremos consultar, para los primero ejemplos utilizaremos la base de datos Northwind

Recuperacin de Datos
Empecemos, Consultando datos. La funcin primaria de una base de datos es almacenar datos y proveer acceso a esos datos, en SQL la declaracin SELECT proporciona la funcionalidad de recuperacin de datos. SINTAXIS DE LA DECLARACION SELECT Una declaracin bsica SELECT debe incluir al menos una clausula SELECT y una clausula FROM, la consulta mas bsica con SELECT retorna todas las filas y columnas. El siguiente crecupera todas las filas y columnas de la tabla Employees, recuerden que estamos trabajando con la base de datos Northwind.

SELECT * FROM dbo.Employees;


Para limitar el resultado y que solo retorne algunas columnas relevantes, remplazamos el asterisco (*) con los nombres de las columnas separados por coma simple.

SELECT FirstName, LastName,Title FROM dbo.Employees;


El comportamiento por defecto de la declaracin SELECT retorna todas las filas en la tabla, Si se quiere excluir filas que tengan datos duplicados podemos utilizar SELECT DISTINC. Por ejemplo, si ejecutamos:

SELECT City FROM dbo.Employees;

El resultado sern 9 registros que son todas las filas de la columna City, si modificamos la consulta a:

SELECT DISTINCT City FROM dbo.Employees;


El resultado seran los registros sin datos duplicados

Consejos tiles: Una forma de realizar las consultas de manera ms y disminuir lo errores de tecleo (de dedo) es aprovechar la cualidad drag and drop (arrastrar y soltar) de Microsoft Management Studio, veamos un ejemplo: Al expandir una base de datos, en el explorador de objetos, podemos ver las tablas que la componen, dentro de cada tabla en la pestaa Columnas podemos ver las columnas de cada tabla, entonces, para realizar una consulta, digamos los nombres y apellidos de todos los empleados, escribiremos SELECT, ahora debemos seleccionar las columnas que queremos recuperar, expandimos las columnas de dbo.Empoyees luego arrastramos y soltamos los campos LastName y FirstName al lado de la palabra SELECT con lo que tendremos

los nombres de las columnas, ahora escribimos FROM y arrastramos el nombre de la tabla dbo.Employees desde el explorador de objetos hacia la consulta y listo. prubalo seguro que te ayudara.

La clusula WHERE La clusula WHERE es ms utilizada cuando se quiere limitar el nmero de filas que retornan. WHERE incrementa el rendimiento de las consultas porque limita la cantidad de datos que recibe un cliente, esta clusula puede incluir una variedad de condiciones de bsqueda, estas pueden ser operaciones booleanas y predicados como LIKE, BETWEEN, EXIST, IS NULL, IS NOT NULL y CONTAINS. Los operadores booleanos incluyen AND, OR y NOT que pueden ser usados para definir ms de un criterio en una clausula WHERE. El siguiente cdigo de ejemplo retorna solo los productos que estn discontinuados y que existen ms de 10 unidades en Stock.

SELECT * FROM dbo.Products WHERE Discontinued = 'true' and UnitsInStock > 10;

Las condiciones tambin pueden ser agrupadas por parntesis, el siguiente cdigo devuelve los productos que estn discontinuados y su precio unitario sea mayor a 100 o menor a 5.

SELECT * FROM dbo.Products WHERE Discontinued = 'true' AND (UnitPrice > 100 or UnitPrice < 5);

Ntese el uso de parntesis en el anterior ejemplo, sin los parntesis el resultado de la consulta es:

SELECT * FROM dbo.Products WHERE Discontinued = 'true' AND UnitPrice > 100 or UnitPrice < 5;

Como se puede observar, sin los parntesis el orden en el que las condiciones sern evaluadas es diferente, por defecto el orden en que SQL las evala, cuando no lleva parntesis, es el siguiente: NOT, AND y OR, es importante conocer esto para evitar errores. La clusula LIKE permite comparar una expresin de cadena con un modelo especificado en la clusula WHERE, se pueden utilizar los siguientes caracteres comodines: - Porcentaje (%), reemplaza cualquier nmero de caracteres en una cadena, por ejemplo, %at har comparaciones con at, cat, hat y that. - Barra de piso (_), reemplaza exactamente un carcter en una cadena, por ejemplo, _at comparara cat y hat pero no comparara that o at. - Corchetes ([]), reemplaza un nico carcter con un rango de caracteres, por ejemplo [a,b,c,d] o [a-d] con esto se incluir todas las filas donde el carcter especificado es un a, b, c, d. - Signo de Intercalacin (^). Cualquier carcter que no est en el rango de caracteres, por ejemplo, [^a-d] sera igual a [e-z] El siguiente ejemplo retorna el nombre del producto (ProductName) y la cantidad por unidad (QuantityPerUnit) de todos los productos que se encuentran embotellados, utilizamos % al principio y al final para que busque la cadena bottl en cualquier lugar de cantidad por unidad (QuantityPerUnit), para el criterio de la bsqueda no se distinguen entre maysculas o minsculas.

SELECT ProductName, QuantityPerUnit FROM dbo.Products WHERE QuantityPerUnit LIKE '%bottl%';

Para la siguiente consulta el resultado ser todos los nombres de productos (ProductName) que empiezan con las letras Q y T.

SELECT ProductName FROM dbo.Products WHERE ProductName LIKE '[Q,t]%';

No olvidemos que si queremos que nos devuelva los productos que empiecen con las letras q,r,s,t podemos escribirlo [q-t]. La clusula BETWEEN retorna todas las filas basndose en un rango de valores. El siguiente cdigo retorna todas las filas de los productos que tengan un precio unitario (UnitPrice) entre 25 y 30, es importante recordar que BETWEEN incluye los valores de los extremos, en este caso al 25 y 30.

SELECT * FROM dbo.Products WHERE UnitPrice BETWEEN 25 AND 30;

Manipulando el conjunto de resultados


Muchas veces necesitamos manejar el conjunto de resultados para mejorar la legibilidad o para presentar informes a usuarios, para esto podemos incorporar alias, concatenaciones y cadenas. Podemos definir alias a las tablas, as cuando necesitemos repetir varias veces el nombre de dicha tabla utilizaremos su alias, tambin podemos definir alias a las columnas de resultados esto para que en el resultado de la consulta se muestre el alias asignado, veamos un ejemplo:

SELECT ProductName AS 'Nombre del Producto',UnitPrice AS 'Precio unitario' FROM dbo.Products AS Productos ORDER BY 'Precio unitario';

La consulta anterior usa una clusula adicional que afecta como los resultados son mostrados, La clusula ORDER BY indica una o ms columnas que debern ser utilizadas para ordenar los resultados desde el menor hasta el valor ms alto, tambin se puede utilizar la clusula ORDER BY DESC para ordenar del valor ms alto al menor. Como ya vimos podemos definir un ttulo personalizado para la columna en el resultado usando un alias, las concatenaciones permiten combinar las cadenas literales de mltiples columnas en una sola columna, El siguiente ejemplo devuelve los nombres, apellidos y cargo de los empleados, pero mostraremos nombres y apellidos en una sola columna, tambin aadiremos un espacio entre el nombre (FirstName) y el apellido (LastName).

SELECT FirstName + ' ' + LastName AS 'Nombres completos', Title as 'Cargo' FROM dbo.Employees AS Empleados;

Consejos tiles: Cuando realicemos consultas SQL es esencial conocer por completo la base de datos con la que trabajamos, saber cuales son las tablas que la componen, las relaciones que tienen, los tipos de datos, de esto depender la eficacia de nuestras consultas, con el uso de los alias, por ejemplo, se pueden alterar la forma en que se muestran los datos esto podra confundirnos si no conocemos bien las tablas de nuestra base de datos, por eso ten siempre a la mano el diagrama de la base de datos con la trabajes.

Tambin podemos agregar una columna que contenga una cadena personalizada, e informacin para cada fila, veamos el siguiente ejemplo:

SELECT FirstName + ' ' + LastName AS 'Nombres completos', Title , 'Representante de ventas' AS [Cargo traducido] FROM dbo.Employees WHERE Title = 'Sales Representative';

Lo que tenemos es una columna creada llamada Cargo traducido y en cada fila devuelve Representante de Ventas, para que la consulta tenga coherencia restringimos los resultados solo a Sales Representative de la tabla Title. Ejercicios: Ahora practiquemos, recuperaremos datos de una tabla usando la clausula WHERE, el operador LIKE y la clausula ORDER BY para obtener resultados 1. Escriba y ejecute un cdigo que retorne todas las filas y columnas de la tabla Products de la base de datos Northwind.

SELECT * FROM dbo.Products;


2. Escriba y ejecute un cdigo que retorne solo las columnas: LastName, Title, Address y Country de la tabla Employees.

SELECT LastName, Title, Address, Country FROM dbo.Employees;


3. Escribir y ejecutar una consulta que retorne todas las filas donde se encuentre la palabra wner de la columna ContactTitle de la tabla Customers(Clientes).

SELECT * FROM dbo.Customers WHERE ContactTitle LIKE '%wner%';

4. Escriba y ejecute un cdigo para mostrar las columnas First Name, Last Name y BirthDate, con un alias que traduzca al espaol los nombres de estas columnas, utilice la tabla Employees

SELECT FirstName as Nombre, LastName as Apellido , BirthDate as 'Fecha de Nacimiento' FROM dbo.Employees;
5. Ordene la anterior consulta por la Fecha de Nacimiento

SELECT FirstName as Nombre , LastName as Apellido , BirthDate as 'Fecha de Nacimiento' FROM dbo.Employees ORDER BY BirthDate;
Resumen La sentencia SELECT puede ser utilizada para recuperar datos de una tabla, los resultados pueden ser filtrados aadiendo una clausula WHERE y pueden ser ordenados usando la clusula ORDER BY, la concatenacin, el uso de alias y combinar los contenidos literales de las columnas pueden ser usados para manipular y dar formato a los resultados. En el siguiente tutorial aprenderemos a combinar tablas relacionadas para obtener datos de ms de una tabla.

You might also like