Você está na página 1de 14

Recuperacin de datos mediante la instruccin SELECT Uso de la instruccin SELECT La instruccin SELECT permite recuperar datos.

Sintaxis parcial SELECT [ ALL | DISTINCT ] <listaSeleccin> FROM {<tablaOrigen>} [, ...n] [ WHERE <condicinBsqueda> ] Puede utilizar la instruccin SELECT para especificar las filas y columnas que desea obtener de una tabla: La lista de seleccin especifica las columnas que se deben obtener. La clusula WHERE especifica las filas que se deben obtener. Cuando se utilizan condiciones de bsqueda en la clusula WHERE, se puede restringir el nmero de filas devueltas mediante operadores de comparacin, cadenas de caracteres y operadores lgicos como condiciones de bsqueda. La clusula FROM especifica la tabla de la que se obtienen las filas y columnas. Especificacin de columnas Para obtener columnas especficas de una tabla puede incluirlas en la lista de seleccin. La lista de seleccin contiene las columnas, expresiones o palabras clave que se seleccionan, o la variable local que se asigna. Las opciones que pueden utilizarse en la lista de seleccin son: Sintaxis parcial <listaSeleccin> ::= { * | { nombreTabla | nombreVista | aliasTabla }.* | { nombreColumna | expresin | IDENTITYCOL | ROWGUIDCOL } [ [AS] aliasColumna ] | aliasColumna = expresin } [,...n] Al especificar las columnas que desea obtener, tenga en cuenta los siguientes hechos e instrucciones: La lista de seleccin obtiene y muestra las columnas en el orden especificado. Separe los nombres de columna con comas, excepto despus del ltimo. Evite o reduzca al mnimo el uso del asterisco (*) en la lista de seleccin. El asterisco se emplea para obtener todas las columnas de una tabla. En este ejemplo se obtienen las columnas employeeid, lastname, firstname y title de todos los empleados de la tabla employees.

Uso de la clusula WHERE para especificar filas Use northwind Select employeeid, lastname, firstname, title from employees where employeeid=5 go El uso de la clusula WHERE permite obtener filas en funcin de las condiciones de bsqueda que se especifiquen. Las condiciones de bsqueda de la clusula WHERE pueden contener una lista ilimitada de predicados. Sugerencia Compare el conjunto de resultados de la consultas anterior con el resultado de sta. Seale que el uso de la clusula WHERE restringe el nmero de filas que se devuelven. <condicinBsqueda> ::= { [ NOT ] <predicado> | ( <condicinBsqueda> ) } [ {AND | OR} [NOT] {<predicado> | ( <condicinBsqueda> ) } ] } [, ...n] El marcador de posicin predicado indica las expresiones que pueden incluirse en la clusula WHERE. Un predicado puede contener las opciones siguientes: <predicado> ::= { expresin { = | <> | > | >= | < | <= } expresin | expresinCadena [NOT] LIKE expresinCadena [ESCAPE 'carcterEscape'] | expresin [NOT] BETWEEN expresin AND expresin | expresin IS [NOT] NULL | CONTAINS ( {columna | * }, '<contieneCondicinBsqueda>' ) | FREETEXT ( {columna | * }, 'cadenaTextoLibre' ) | expresin [NOT] IN (subconsulta | expresin [, ...n]) | expresin { = | <> | > | >= | < | <= } {ALL | SOME | ANY} (subconsulta) | EXISTS (subconsulta) }

Al especificar filas con la clusula WHERE, tenga en cuenta los siguientes hechos e instrucciones: Utilice comillas simples para todos los datos de tipo char, nchar, varchar, nvarchar, text, datetime y smalldatetime. Utilice una clusula WHERE para limitar el nmero de filas que se devuelven al utilizar la instruccin SELECT. Ejemplo En este ejemplo se obtienen las columnas employeeid, lastname, firstname y title de la tabla employees para el empleado que tiene un employeeid de 5. USE northwind SELECT employeeid, lastname, firstname, title

FROM employees WHERE employeeid = 5 GO A veces se desea limitar el conjunto de resultados que devuelve una consulta. Para limitar los resultados se puede especificar condiciones de bsqueda en una clusula WHERE con las que filtrar los datos. No hay lmite en el nmero de condiciones de bsqueda que se pueden incluir en una instruccin SELECT. La tabla siguiente describe el tipo de filtro y la correspondiente condicin de bsqueda que se puede usar para filtrar los datos Tipo de filtro Operadores de comparacin Comparaciones de cadenas Operadores lgicos: combinacin de condiciones Operador lgico: negacin Intervalo de valores Listas de valores Valores desconocidos Condicin de bsqueda =, >, <, >=, <= y <> LIKE y NOT LIKE AND, OR

NOT BETWEEN y NOT BETWEEN IN y NOT IN IS NULL e IS NOT NULL

Los operadores de comparacin permiten comparar los valores de una tabla con un valor o expresin especificados. Tambin puede utilizarlos para comprobar si se cumple una condicin. Los operadores de comparacin comparan columnas o variables de tipos de datos compatibles. En la tabla siguiente se enumeran estos operadores. Operador = > < >= Descripcin Igual a Mayor que Menor que Mayor o igual que Menor o igual que No igual a

<=

<>

Evite el uso de NOT en las condiciones de bsqueda. Al usarlo se evalan todas las filas de la tabla y la obtencin de datos puede ralentizarse. En este ejemplo se obtiene el apellido y la ciudad de los empleados de la tabla employees residentes en Estados Unidos. USE northwind SELECT lastname, city FROM employees WHERE country = 'USA' GO En este ejemplo se obtienen las columnas orderid y customerid de la tabla orders con fecha de pedido anterior al 1/8/96. USE northwind SELECT orderid, customerid FROM orders WHERE orderdate < '1/8/96' GO Uso de comparaciones de cadenas Puede utilizar la condicin de bsqueda LIKE en combinacin con caracteres comodn para seleccionar filas por comparacin entre cadenas de caracteres. Al utilizar la condicin de bsqueda LIKE, tenga en cuenta los hechos siguientes: Todos los caracteres de la cadena modelo son significativos, incluidos los espacios en blanco al comienzo o al final. LIKE slo puede utilizarse con datos de tipo char, nchar, varchar, nvarchar o datetime. Tipos de caracteres comodn Utilice los siguientes caracteres comodn para formar el criterio de bsqueda de la cadena de caracteres: Comodn % Descripcin Cualquier cadena de cero o ms caracteres. Cualquier carcter individual. Cualquier carcter individual contenido en el intervalo o conjunto especificado.

_ []

[^]

Cualquier carcter individual no contenido en el intervalo o conjunto especificado.

Ejemplos de uso de caracteres comodn La tabla siguiente contiene ejemplos de uso de comodines con la condicin de bsqueda LIKE. Expresin LIKE 'BR%' Devuelve Todos los nombres que comiencen por las letras BR. Todos los nombres que comiencen por las letras Br. Todos los nombres que terminen con las letras een. Todos los nombres que contengan las letras en. Todos los nombres de tres letras que terminen con las letras en. Todos los nombres que comiencen por C o por K. Todos los nombres de cuatro letras que terminen con las letras ing y comiencen por cualquier letra comprendida entre S y V. Todos los nombres que comiencen por la letra M y cuya segunda letra no sea c.

LIKE 'Br%'

LIKE '%een'

LIKE '%en%'

LIKE '_en'

LIKE '[CK]%'

LIKE '[S-V]ing'

LIKE 'M[^c]%'

En este ejemplo se obtienen las compaas de la tabla customers que contengan la palabra "restaurant" en su nombre. USE northwind SELECT companyname FROM customers WHERE companyname LIKE '%Restaurant%' GO

Uso de operadores lgicos Puede utilizar los operadores lgicos AND, OR y NOT para combinar un conjunto de expresiones y afinar el proceso de las consultas. Los resultados de una consulta pueden variar segn el agrupamiento de las expresiones y el orden de las condiciones de bsqueda. Al utilizar operadores lgicos, tenga en cuenta las instrucciones siguientes: Utilice el operador AND para obtener las filas que cumplan todos los criterios de bsqueda. Utilice el operador OR para obtener las filas que cumplan alguno de los criterios de bsqueda. Utilice el operador NOT para negar la expresin especificada a continuacin. Uso de los parntesis Utilice parntesis cuando especifique dos o ms expresiones como criterio de bsqueda. El uso de parntesis permite: Agrupar expresiones. Cambiar el orden de evaluacin. Hacer ms legibles las expresiones. Orden de las condiciones de bsqueda Al utilizar ms de un operador lgico en una instruccin, tenga en cuenta los hechos siguientes: Microsoft SQL Server evala en primer lugar el operador NOT, despus el operador AND y, por ltimo, el operador OR. Si todos los operadores de una expresin son del mismo nivel, el orden de precedencia es de izquierda a derecha En el ejemplo siguiente se obtienen todos los productos cuyo nombre comienza por la letra T o tienen el nmero de identificacin 46, y cuyo precio es superior a 16,00 dlares. Sugerencia Compare la consulta del ejemplo 1 con la del 2. Seale qu expresiones estn agrupadas de forma distinta y sus conjuntos de resultados diferentes. USE northwind SELECT productid, productname, supplierid, unitprice FROM products WHERE (productname LIKE 'T%' OR productid = 46) AND (unitprice > 16.00) GO

En el ejemplo siguiente se obtienen los productos cuyo nombre comienza por la letra T o que tienen el nmero de identificacin 46 y un precio superior a 16,00 dlares. Compare la consulta del ejemplo 1 con la del ejemplo 2. Observe que, al ser distinto el agrupamiento de las expresiones, el procesamiento de las consultas es diferente y los conjuntos de resultados difieren. USE northwind SELECT productid, productname, supplierid, unitprice FROM products WHERE (productname LIKE 'T%') OR (productid = 46 AND unitprice > 16.00) GO

Obtencin de un intervalo de valores Puede utilizar la condicin de bsqueda BETWEEN en la clusula WHERE para obtener las filas contenidas en un intervalo de valores especfico. Al utilizar la condicin de bsqueda BETWEEN, tenga en cuenta los siguientes hechos e instrucciones: SQL Server incluye los valores inicial y final en el conjunto de resultados. Es preferible el uso de BETWEEN al de una expresin que incluya el operador AND y dos operadores de comparacin (> = x AND < = y). Sin embargo, para buscar en un intervalo exclusivo en el que las filas devueltas no contengan los valores inicial y final, debe utilizar una expresin de este tipo (> x AND < y). Puede utilizar la condicin de bsqueda NOT BETWEEN para obtener las filas que estn fuera del intervalo especificado. Tenga en cuenta que el uso de condiciones NOT puede ralentizar la recuperacin de los datos. En este ejemplo se obtiene el nombre y el precio por unidad de todos los productos cuyo precio se encuentra entre 10,00 y 20,00 dlares. Observe que el conjunto de resultados incluye los extremos del intervalo. USE northwind SELECT productname, unitprice FROM products WHERE unitprice BETWEEN 10 AND 20 GO En este ejemplo se obtiene el nombre y el precio por unidad de todos los productos cuyo precio se encuentra entre 10 y 20 dlares. Observe que en el conjunto de resultados no se incluyen los extremos del intervalo. USE northwind SELECT productname, unitprice

FROM products WHERE (unitprice > 10) AND (unitprice < 20) GO Uso de una lista de valores como criterio de bsqueda Puede utilizar la condicin de bsqueda IN en la clusula WHERE para obtener las filas que coincidan con una lista de valores especificada. Al utilizar la condicin de bsqueda IN, tenga en cuenta las instrucciones siguientes: Sugerencia Seale que SQL Server resuelve los ejemplos 1 y 2 de la misma forma y devuelve el mismo conjunto de resultados. En el ejemplo 1 se utiliza el operador de bsqueda IN, mientras que en el ejemplo 2 se emplean dos operadores igual a (=) conectados con el operador OR. Puede utilizar la condicin de bsqueda IN o un conjunto de expresiones de comparacin conectadas con el operador OR. SQL Server las resuelve de la misma forma y los conjuntos de resultados devueltos son idnticos. No incluya un valor NULL en la condicin de bsqueda. Un valor NULL en la lista de condiciones de bsqueda da como resultado la expresin = NULL. Puede producir conjuntos de resultados inesperados. Utilice la condicin NOT IN para obtener las filas cuyos valores no se encuentren en la lista especificada. Tenga en cuenta que el uso de condiciones NOT puede hacer que los datos se recuperen ms lentamente. Ejemplo 1 En este ejemplo se obtiene la lista de compaas de la tabla suppliers que se encuentran en Japn o en Italia. USE northwind SELECT companyname, country FROM suppliers WHERE country IN ('Japan', 'Italy') GO Ejemplo 2 En este ejemplo tambin se obtiene una lista con las compaas de la tabla suppliers que se encuentran en Japn o en Italia. Observe que en lugar de la condicin de bsqueda IN se utilizan dos expresiones con un operador de comparacin combinadas con el operador OR. El conjunto de resultados es idntico al del ejemplo 1.

USE northwind SELECT companyname, country FROM suppliers WHERE country = 'Japan' OR country = 'Italy' GO Obtencin de valores desconocidos Una columna tiene un valor NULL cuando no se ha especificado ningn valor para ella durante la entrada de datos y no tiene definido un valor predeterminado. Un valor NULL no es lo mismo que cero (que es un valor numrico) o blanco (que es un valor de carcter). Puede utilizar la condicin de bsqueda IS NULL para obtener las filas en las que falte informacin en una columna especfica. Al obtener las filas con valores desconocidos, tenga en cuenta los siguientes hechos e instrucciones: Los valores NULL causan errores en todas las comparaciones porque no se evalan como iguales entre s. En la instruccin CREATE TABLE se define si las columnas permiten valores NULL. Puede utilizar la condicin de bsqueda IS NOT NULL para obtener las filas con valores conocidos en las columnas especificadas En este ejemplo se obtiene la lista de compaas de la tabla suppliers cuya columna fax contiene un valor NULL. USE northwind SELECT companyname, fax FROM suppliers WHERE fax IS NULL GO Dar formato a los conjuntos de resultados Si desea mejorar la legibilidad de un conjunto de resultados, puede cambiar su orden, eliminar filas duplicadas, reemplazar el nombre de las columnas por alias o utilizar literales para sustituir valores. Estas opciones de formato no cambian los datos, sino slo su presentacin Ordenacin de los datos Puede utilizar la clusula ORDER BY para ordenar las filas del conjunto de resultados de forma ascendente (ASC) o descendente (DESC). Cuando utilice la clusula ORDER BY, tenga en cuenta los siguientes hechos e instrucciones: Sugerencia

Compare las columnas especificadas en las clusulas ORDER BY de los ejemplos 1 y 2. En el ejemplo 2, las columnas especificadas se reemplazan por sus posiciones relativas en la lista de seleccin. Los conjuntos de resultados de los ejemplos 1 y 2 son idnticos. El tipo de orden se especifica cuando se instala SQL Server. Puede ejecutar el procedimiento almacenado del sistema sp_helpsort para determinar el tipo de orden definido para la base de datos durante la instalacin. SQL Server no garantiza ningn orden en el conjunto de resultados a menos que se especifique uno con la clusula ORDER BY. De forma predeterminada, SQL Server ordena los datos de forma ascendente. No es necesario que las columnas incluidas en la clusula ORDER BY aparezcan en la lista de seleccin. Las columnas especificadas en la clusula ORDER BY no pueden tener ms de 8060 bytes. Es posible ordenar por nombres de columna, valores calculados o expresiones. En la clusula ORDER BY, puede hacer referencia a las columnas por su posicin en la lista de seleccin. Las columnas se evalan de la misma forma y el conjunto de resultados es el mismo. La clusula ORDER BY no debe utilizarse para columnas de tipo text o image El uso de ndices adecuados puede hacer ms eficientes las ordenaciones con ORDER BY Ejemplo 1 En este ejemplo se obtiene la identificacin, nombre, categora y precio por unidad de cada producto de la tabla products. De forma predeterminada, el conjunto de resultados se ordena por categoras en orden ascendente y, en cada categora, las filas se ordenan por precio unitario en orden descendente. USE northwind SELECT productid, productname, categoryid, unitprice FROM products ORDER BY categoryid, unitprice DESC GO Este ejemplo es similar al ejemplo 1. La nica diferencia son los nmeros especificados en la clusula ORDER BY, que indican posiciones de columnas en la lista de seleccin. SQL Server procesa las dos consultas de la misma forma y devuelve el mismo conjunto de resultados. USE northwind SELECT productid, productname, categoryid, unitprice FROM products

10

ORDER BY 3, 4 DESC GO Eliminacin de filas duplicadas Si necesita obtener una lista de valores nicos, puede utilizar la clusula DISTINCT para eliminar las filas duplicadas del conjunto de resultados. Al utilizar la clusula DISTINCT, tenga en cuenta los hechos siguientes: Sugerencia Ejecute una consulta similar a la de la diapositiva sin utilizar la clusula DISTINCT. Haga que los alumnos comparen el nmero de filas obtenidas. El conjunto de resultados incluir todas las filas que cumplan la condicin de bsqueda de la instruccin SELECT, a menos que se especifique una clusula DISTINCT. La combinacin de valores de la lista de seleccin determina si las filas estn duplicadas o no. Las filas que contengan una combinacin nica de valores se incluyen en el conjunto de resultados. La clusula DISTINCT utiliza un orden aleatorio en el conjunto de resultados, a menos que se especifique tambin la clusula ORDER BY. Si se especifica una clusula DISTINCT, la clusula ORDER BY debe incluir columnas que aparezcan en el conjunto de resultados. Ejemplo 1 En este ejemplo se obtienen todas las filas de la tabla suppliers, pero slo se muestra el nombre de cada pas una vez. USE northwind SELECT DISTINCT country FROM suppliers ORDER BY country GO Ejemplo 2 En este ejemplo no se especifica la clusula DISTINCT. Se obtienen todas las filas de la tabla suppliers en orden descendente. Observe que se incluyen todos los casos de cada pas. USE northwind SELECT country FROM suppliers ORDER BY country

11

GO Cambio del nombre de las columnas Si desea crear nombres de columnas ms legibles, puede utilizar la palabra clave AS para reemplazar los nombres predeterminados por alias en la lista de seleccin. Sintaxis parcial SELECT nombreColumna | expresin AS ttuloColumna FROM nombreTabla Al cambiar los nombres de las columnas, tenga en cuenta los siguientes hechos e instrucciones: De forma predeterminada, en el conjunto de resultados se muestran los nombres de columna designados en la instruccin CREATE TABLE. Utilice comillas simples para los nombres de columna que contengan espacios o que no se ajusten a las convenciones de denominacin de objetos de SQL Server. Puede crear alias de columna para columnas calculadas que contengan funciones o literales de cadena. Cada alias de columna puede contener hasta 128 caracteres. En este ejemplo se obtiene una lista de empleados de la tabla employees. Los alias de columna especificados reemplazan a los nombres de columna firstname, lastname y employeeid. Observe que el alias Employee ID: aparece entre comillas simples porque contiene un espacio. USE northwind SELECT firstname AS First, lastname AS Last ,employeeid AS 'Employee ID:' FROM employees GO Uso de literales Los literales son letras, nmeros o smbolos que se utilizan como valores especficos en un conjunto de resultados. Puede incluirlos en la lista de seleccin para hacer ms legible el resultado. Sintaxis parcial SELECT nombreColumna | 'literalCadena' [, nombreColumna | 'literalCadena'...] FROM nombreTabla Ejemplo En este ejemplo se obtiene una lista de empleados de la tabla employees. Observe que la cadena Nmero de identificacin: precede a la columna employeeid en el conjunto de resultados.

12

USE northwind SELECT firstname, lastname ,'Nmero de identificacin:', employeeid FROM employees GO

Cmo se procesan las consultas

Todas las consultas siguen el mismo proceso antes de ejecutarse. SQL Server puede almacenar alguno de los procesos para una ejecucin posterior de la misma consulta. Consultas que no estn almacenadas en cach (ad hoc) Todas las consultas se analizan, resuelven, optimizan y compilan antes de ejecutarse Analizar: Comprueba la precisin de la sintaxis. Resolver: Comprueba que existen los nombres de los objetos; determina el permiso del propietario del objeto. Optimizar: Determina los ndices que se deben utilizar y las estrategias de combinacin.

13

Compilar: Convierte la consulta en un formato ejecutable. Ejecutar: Emite las solicitudes compiladas para procesarlas. Consideraciones acerca del rendimiento

Al realizar consultas bsicas debe tener en cuenta algunos de los aspectos que afectan al rendimiento de SQL Server: Utilice condiciones de bsqueda positivas, en lugar de negativas. Las condiciones de bsqueda negativas, como NOT BETWEEN, NOT IN e IS NOT NULL, pueden hacer que la recuperacin de datos sea ms lenta, ya que con ellas se evalan todas las filas. Evite el uso de la condicin de bsqueda LIKE si puede escribir una consulta ms especfica. La obtencin de datos con LIKE puede resultar ms lenta. Utilice coincidencias exactas o intervalos como condiciones de bsqueda siempre que sea posible. El rendimiento de las consultas especficas es mayor. La obtencin de datos puede ralentizarse cuando se utiliza la clusula ORDER BY, ya que SQL Server debe determinar y ordenar el conjunto de resultados antes de devolver la primera fila.

14

Você também pode gostar