Administracin de Base de Datos
[CONSULTAS BSICAS EN SQL]
Consultas Bsicas en SQL Server 2008 Seleccin de tablas
La seleccin total o parcial de una tabla se lleva a cabo mediante la instruccin Select. En dicha seleccin hay que especificar: -Los campos que queremos seleccionar -La tabla en la que hacemos la seleccin. SINTAXIS:
SELECT [ALL | DISTINCT ] <nombre_campo> [{,<nombre_campo>}] FROM <nombre_tabla>|<nombre_vista> [{,<nombre_tabla>|<nombre_vista>}] [WHERE <condicion> [{ AND|OR <condicion>}]] [GROUP BY <nombre_campo> [{,<nombre_campo >}]] [HAVING <condicion>[{ AND|OR <condicion>}]] [ORDER BY <nombre_campo>|<indice_campo> [ASC | DESC] [{,<nombre_campo>|<indice_campo> [ASC | DESC ]}]]
Veamos por partes que quiere decir cada una de las partes que conforman la sentencia. Significado SELECT ALL Palabra clave que indica que la sentencia de SQL que queremos ejecutar es de seleccin. Indica que queremos seleccionar todos los valores.Es el valor por defecto y no suele especificarse casi nunca. Indica la tabla (o tablas) desde la que queremos recuperar los datos. En el caso de que exista ms de una tabla se denomina a la consulta "consulta combinada" o "join". En las consultas combinadas es necesario aplicar una condicin de combinacin a travs de una clusula WHERE. Especifica una condicin que debe cumplirse para que los datos sean devueltos por la consulta. Admite los operadores lgicos AND y OR. Especifica la agrupacin que se da a los datos. Se usa siempre en combinacin con funciones agregadas. Especifica una condicin que debe cumplirse para los datosEspecifica una condicin que debe cumplirse para que los datos sean devueltos por la consulta. Su funcionamiento es similar al de WHERE pero aplicado al conjunto de resultados devueltos por la consulta. Debe aplicarse siempre junto a GROUP BY y la condicion debe estar referida a los campos contenidos en ella. Presenta el resultado ordenado por las columnas indicadas. El orden puede expresarse conASC (orden ascendente) y DESC (orden descendente). El valor predeterminado es ASC.
DISTINCT Indica que queremos seleccionar slo los valores distintos. FROM
WHERE
GROUP BY
HAVING
ORDER BY
Administracin de Base de Datos
[CONSULTAS BSICAS EN SQL]
En nuestra tabla modelo de clientes podramos hacer por ejemplo una seleccin del nombre y direccin de los clientes con una instruccin de este tipo: Select nombrecompaa, direccin From clientes Si quisisemos seleccionar todos los campos, es decir, toda la tabla, podramos utilizar el comodn * del siguiente modo: Select * From clientes Resulta tambin muy til el filtrar los registros mediante condiciones que vienen expresadas despus de la clusula Where. Si quisisemos mostrar los clientes de una determinada ciudad usaramos una expresin como esta: Select * From clientes Where ciudad Like Madrid' Adems, podramos ordenar los resultados en funcin de uno o varios de sus campos. Para este ltimo ejemplo los podramos ordenar por nombre as: Select * From clientes Where ciudad Like 'Madrid' Order By nombrecompaa Teniendo en cuenta que puede haber ms de un cliente con el mismo nombre, podramos dar un segundo criterio que podra ser el apellido: Select * From clientes Where ciudad Like 'Madrid' Order By nombrecompaa,nombrecontacto Si invirtisemos el orden nombrecompaa, nombrecontacto por nombrecontacto, nombrecompaa, el resultado sera distinto. Tendramos los clientes ordenados por nombrecontacto y aquellos que tuviesen nombres de compaa idnticos se sub clasificaran por el nombrecontacto. Es posible tambin clasificar por orden inverso. Si por ejemplo quisisemos ver nuestros clientes por orden de pedidos realizados teniendo a los mayores en primer lugar escribiramos algo as: Select * From clientes Order By nombrecompaa Desc Una opcin interesante es la de efectuar selecciones sin coincidencia. Si por ejemplo buscsemos el saber en qu ciudades se encuentran nuestros clientes sin necesidad de que para ello aparezca varias veces la misma ciudad usaramos una sentencia de esta clase: Select Distinct ciudad From clientes Order By ciudad As evitaramos ver repetido Berlin tantas veces como clientes tengamos en esa ciudad. Hemos querido compilar a modo de tabla ciertos operadores que pueden resultar tiles en determinados casos. Estos operadores sern utilizados despus de la clusula Where y pueden ser
Administracin de Base de Datos
[CONSULTAS BSICAS EN SQL]
combinados hbilmente mediante parntesis para optimizar nuestra seleccin a muy altos niveles.
Operadores matemticos: > < >= <= <> = Operadores lgicos And Or Not Otros operadores Like Selecciona los registros cuyo valor de campo se asemeje, no teniendo en cuenta mayscula y minscula. In y Not In Da un conjunto de valores para un campo para los cuales la condicin de seleccin es (o no) valida Is Null y Is Selecciona aquellos registros donde el campo especificado esta (o no) vaco. Not Null Between...And Selecciona los registros comprendidos en un intervalo Distinct Selecciona los registros no coincidentes Desc Clasifica los registros por orden inverso Mayor que Menor que Mayor o igual que Menor o igual que Distinto Igual
Comodines * % _
Sustituye a todos los campos Sustituye a cualquier cosa o nada dentro de una cadena Sustituye un solo carcter dentro de una cadena
Administracin de Base de Datos
[CONSULTAS BSICAS EN SQL]
Veamos a continuacin aplicaciones prcticas de estos operadores. En esta sentencia seleccionamos todos los clientes de Madrid cuyo nombre no es Pepe. Como puede verse, empleamos Like en lugar de = simplemente para evitar inconvenientes debido al empleo o no de maysculas. Select * From clientes Where ciudad Like 'Madrid' And Not nombrecompaa Like 'Romero y tomillo' Si quisiramos recoger en una seleccin a los clientes de nuestra tabla cuyo apellido comienza por A y cuyo nmero de pedidos est comprendido entre 20 y 40: Select * From pedidos Where destinatario like 'Q%' And cargo Between 20.000 And 40.000 El operador In, lo veremos ms adelante, es muy prctico para consultas en varias tablas. Para casos en una sola tabla es empleado del siguiente modo: Select * From clientes Where ciudad In ('Madrid','Berln','Londres') De esta forma seleccionamos aquellos clientes que vivan en esas tres ciudades. Una base de datos puede ser considerada como un conjunto de tablas. Estas tablas en muchos casos estn relacionadas entre ellas y se complementan unas con otras. Refirindonos a nuestro clsico ejemplo de una base de datos para una aplicacin de e-comercio, la tabla clientes de la que hemos estado hablando puede estar perfectamente coordinada con una tabla donde almacenamos los pedidos realizados por cada cliente. Esta tabla de pedidos puede a su vez estar conectada con una tabla donde almacenamos los datos correspondientes a cada artculo del inventario. De este modo podramos fcilmente obtener informaciones contenidas en esas tres tablas como puede ser la designacin del artculo ms popular en una determinada regin donde la designacin del artculo sera obtenida de la tabla de artculos, la popularidad (cantidad de veces que ese artculo ha sido vendido) vendra de la tabla de pedidos y la regin estara comprendida obviamente en la tabla clientes. Este tipo de organizacin basada en mltiples tablas conectadas nos permite trabajar con tablas mucho ms manejables a la vez que nos evita copiar el mismo campo en varios sitios ya que podemos acceder a l a partir de una simple llamada a la tabla que lo contiene.
Administracin de Base de Datos
[CONSULTAS BSICAS EN SQL]
Ejercicios de Ejemplo
Para desarrollarse con la participacin de los estudiantes: 1. Elaborar una consulta que me permita mostrar los 10 primeros registros de la tabla pedidos y nicamente muestre el cdigo del pedido, la fecha de entrega y la fecha de pedido. 2. Elaborar una consulta que me permita mostrar los campos de la tabla detalles de pedido visualizando adems el subtotal por cada detalle consultado, asignar un nombre para el campo calculado. 3. Elaborar una consulta que me permita mostrar a todos los clientes cuyo nombre de compaa empiece con la letra B 4. Elaborar una consulta que me permita mostrar a los clientes cuyo nombre de compaa empiece con B y termine con s 5. Elaborar una consulta que me permita mostrar a los clientes cuyo pas de residencia sea Francia , Brasil y Alemania 6. Elaborar una consulta que me permita mostrar a todos los clientes cuyo cargo del contacto empiece con P y resida en la ciudad de Madrid 7. Elaborar una consulta que me permita mostrar a todos los pedidos efectuados desde el 5 de agosto del 2010 hasta 5 de agosto del 2011
Ejercicios Propuestos
1. Elaborar una consulta que muestre los datos de los clientes cuyo cargo sea Propietario ordenados por su cdigo. 2. Elaborar una consulta que permita mostrar los datos de los empleados cuyo cargo sea Representante de Ventas o Gerente de Ventas ordenados por su cdigo. 3. Elaborar una consulta que permita mostrar la cantidad de productos por categora, agrupados por categora. 4. Elaborar una consulta que muestre los pedidos cuyos clientes sean ALFKI, WOLZA, GODOS ordenados por su cdigo en forma descendente. 5. Elaborar una consulta que permita mostrar la suma del precio por unidad con un ttulo de columna Suma de Productos, el precio de unidad mnimo, el precio de unidad mximo, el promedio de precios por unidad de la tabla productos.
Administracin de Base de Datos
[CONSULTAS BSICAS EN SQL]
6. Elaborar una consulta que muestre a los clientes cuyo nombre de compaa empiece con la letra L y en cualquier parte del nombre tenga la letra N. 7. Elaborar una consulta que muestre el cdigo del producto, el nombre, su precio por unidad de la tabla productos cuyo precio por unidad este comprendido entre 31.23 y 123.79, adems el nombre del producto entre comprendido entre B y M.
Soluciones
1.USE NWind GO SELECT * FROM Clientes WHERE cargoContacto = 'Propietario' ORDER BY IdCliente 2.USE NWind GO SELECT * FROM Empleados WHERE Cargo = 'Representante de ventas' OR Cargo = 'Gerente de ventas' ORDER BY IdEmpleado 3.USE NWind GO SELECT COUNT(DISTINCT IdProducto) as 'Numero de productos', IdCategora FROM Productos GROUP BY Idcategora 4.USE NWind GO SELECT * FROM Pedidos WHERE IdCliente IN('WOLZA', 'ALFKI',' GODOS') ORDER BY IdCliente DESC 5.USE NWind GO SELECT SUM(PrecioUnidad) AS 'Suma de Productos', MIN(PrecioUnidad) AS 'Precio Mnimo', AVG(PrecioUnidad) AS 'Precio Promedio', MAX(PrecioUnidad) AS 'Precio Mximo' FROM Productos 6.-
Administracin de Base de Datos
[CONSULTAS BSICAS EN SQL]
USE NWind GO SELECT * FROM Clientes WHERE NombreCompaa LIKE 'L%n%' 7.USE NWind GO SELECT IdProducto, NombreProducto, PrecioUnidad FROM Productos WHERE (PrecioUnidad) BETWEEN 31.23 AND 123.79 AND NombreProducto BETWEEN 'B' AND 'M'