Escolar Documentos
Profissional Documentos
Cultura Documentos
[WITH { CUBE | ROLLUP } ] ] [HAVING < condicion_busqueda > ] Debido a la complejidad de la sentencia (en la sintaxis anterior no se han detallado algunos elementos), la iremos viendo poco a poco, empezaremos por ver consultas bsicas para luego ir aadiendo ms clusulas. Empezaremos por ver las consultas ms simples, basadas en una sola tabla y nos limitaremos a la siguiente sintaxis: SELECT [ALL|DISTINCT] [TOP expresion [PERCENT] [WITH TIES]] <lista_seleccion> FROM <origen> [WHERE <condicion_busqueda> ] [ORDER BY {expression_columna|posicion_columna [ASC|DESC]} [ ,...n ]]
Opcionalmente podemos definir un nombre de alias. Un nombre de alias (alias_tabla) es un nombre alternativo que se le da a la tabla dentro de la consulta. Si se define un nombre de alias, dentro de la consulta, ser el nombre a utilizar para referirnos a la tabla, el nombre original de la tabla ya no tendr validez. Se utilizan los nombres de alias para simplificar los nombres de tablas a veces largos y tambin cuando queremos combinar una tabla consigo misma; ya volveremos sobre los alias de tabla cuando veamos consultas multitabla. La palabra AS no aade ninguna operatividad, est ms por esttica. Podemos escribir: SELECT ... FROM tabla1 SELECT ... FROM tabla1 t1 SELECT ... FROM tabla1 AS t1 Es equivalente a la sentencia anterior. Si la tabla o la vista estn en otra base de datos del mismo equipo que est ejecutando la instancia de SQL Server, se utiliza el nombre cualificado con el formato nbBaseDatos.nbEsquema.nbTabla. Si la tabla o la vista estn fuera del servidor local en un servidor vinculado, se utiliza un nombre de cuatro partes con el formato nbservidor.catalogo.nbEsquema.nbTabla. Volveremos ms adelante sobre las conexiones remotas. Sacamos los datos de la tabla tabla1 y le asignamos un alias de tabla: t1 Sacamos los datos de la tabla tabla1
} [ ,...n ]
Separamos la definicin de cada columna por una coma y las columnas del resultado aparecern en el mismo orden que en la lista de seleccin. Para cada columna del resultado su tipo de datos, tamao, precisin y escala son los mismos que los de la expresin que da origen a esa columna. Podemos definir las columnas del resultado de varias formas, mediante: Una expresin simple: o o o o una referencia a una funcin. una variable local una constante una columna del origen de datos,
Una subconsulta escalar, que es otra instruccin SELECT que devuelve un nico valor y se evala para cada fila del origen de datos (esto no lo veremos de momento). Una expresin compleja generada al usar operadores en una o ms expresiones simples. La palabra clave *. La asignacin de variables con el formato @variable_local = expresin. La palabra clave $IDENTITY. La palabra clave $ROWGUID.
El resultado sera: Nombre Antonio Viguer Alvaro Jaumes Juan Rovira Jos Gonzlez Vicente Pantalla Luis Antonio Jorge Gutirrez Ana Bustamante Mara Sunta Juan Victor Listar una tarifa de productos: SELECT idfab, idproducto, descripcion, productos.precio FROM productos; Hemos cualificado la columna precio aunque no es necesario en este caso. El resultado sera: Idfab aci aci aci aci aci aci aci bic bic idproducto 41001 41002 41003 41004 4100x 4100y 4100z 41003 41089 descripcion arandela bisagra art t3 art t4 junta extractor mont manivela rodamiento precio 0,58 0,80 1,12 1,23 0,26 28,88 26,25 6,52 2,25 12 21 12 12 13 11 22 21 11 NULL oficina contrato 1986-10-20 1986-12-10 1987-03-01 1987-05-19 1988-02-12 1988-06-14 1988-11-14 1989-10-12 1999-10-12 1990-01-13
SELECT numclie,nombre AS nombrecliente FROM clientes; El resultado ser : Numclie 2101 2102 2103 Nombrecliente Luis Garca Antn Alvaro Rodrguez Jaime Llorens
en vez de: Numclie 2101 2102 2103 Nombre Luis Garca Antn Alvaro Rodrguez Jaime Llorens
La palabra AS es opcional. SELECT numclie,nombre nombrecliente FROM clientes; Sera equivalente a la consulta anterior Si queremos incluir espacios en blanco en el nombre lo debemos encerrar entre corchetes. SELECT numclie,nombre AS [nombre cliente] FROM clientes; Nota importante: Este nombre de alias se podr utilizar en la lista de seleccin y en la clusula ORDER BY pero no en la clusula WHERE.
3.6. Funciones
Existen funciones que podemos utilizar en la lista de seleccin, e incluso en otras clusulas que veremos ms adelante, como el WHERE. Las principales funciones son las siguientes:
Funciones de fecha: Funcin GETDATE GETUTCDATE DATEPART DAY MONTH YEAR DATENAME Devuelve la fecha actual. Devuelve la hora UTC. Devuelve un entero que corresponde a la parte de la fecha solicitada. Devuelve el da de la fecha indicada. Devuelve el mes de la fecha indicada. Devuelve el ao de la fecha indicada. Devuelve una cadena de caracteres que representa el valor de la unidad especificada de una fecha especificada. Devuelve un valor datetime nuevo que resulta de sumar un intervalo de tiempo a una fecha especificada.> Devuelve el n de intervalos que hay entre dos fechas. Devuelve el primer da de la semana establecido con SET DATEFIRST. Descripcin
SET DATEFIRST
Funciones de cadena: Funcin ASCII CHAR NCHAR UNICODE LEN LTRIM RTRIM LEFT RIGHT SUBSTRING Descripcin Devuelve el valor de cdigo ASCII del carcter situado ms a la izquierda de una expresin de caracteres. Devuelve el carcter ASCII del entero indicado. Devuelve el carcter Unicode del entero indicado. Devuelve el entero que se corresponde al carcter Unicode indicado. Devuelve el total de caracteres de una cadena, excluidos los espacios en blanco finales. Devuelve una cadena tras quitarle los espacios en blanco iniciales. Devuelve una cadena tras quitarle los espacios en blanco finales. Devuelve los N ltimos caracteres de una cadena. Devuelve los N primeros caracteres de una cadena. Devuelve parte de una expresin.
LOWER UPPER REPLACE STUFF QUOTENAME SPACE STR REPLICATE REVERSE CHARINDEX PATINDEX
Devuelve la cadena convertida a minsculas. Devuelve la cadena convertida a maysculas. Reemplaza una determinada cadena. Elimina el nmero de caracteres especificados e inserta otro conjunto de caracteres en el punto de inicio indicado. Devuelve una cadena Unicode con los delimitadores agregados para convertirla en un identificador delimitado vlido de Microsoft SQL Server 2005. Devuelve una cadena de espacios repetidos. Devuelve una cadena de caracteres a partir de datos numricos. Repite una cadena N veces. Devuelve una cadena invertida. Devuelve la posicin inicial de la expresin especificada en una cadena de caracteres. Devuelve la posicin inicial de la primera repeticin de un patrn en la expresin especificada, o ceros si el patrn no se encuentra, en todos los tipos de datos de texto y caracteres.
Otras funciones: Funcin ROUND CAST y CONVERT CASE ISNULL COALESCE Descripcin Redondea un valor a la longitud y precisin indicadas. Convierten de un tipo de datos a otro de forma explcita. Evala una lista de condiciones. Reemplaza el valor NULL por otro especificado. Devuelve la primera expresin distinta de NULL entre sus argumentos.
ciudad Valencia Alicante Castellon Badajoz A Corua Madrid Madrid Pamplona Valencia este este este oeste oeste
region
superavit 11800,00 -6500,00 1800,00 11100,00 -11400,00 NULL -10000,00 NULL -90000,00
De cada producto queremos saber el id de fabricante, id de producto, su descripcin y el valor de sus existencias. SELECT idfab,idproducto,descripcion,(existencias*precio) AS valoracion FROM productos; El resultado sera: Idfab aci aci aci aci aci aci aci idproducto 41001 41002 41003 41004 4100x 4100y 4100z descripcion arandela bisagra art t3 art t4 junta extractor mont valoracion 160,66 133,60 231,84 170,97 9,62 722,00 735,00
bic bic
41003 41089
manivela rodamiento
19,56 175,50
Para practicar puedes realizar este Ejercicio Columna calculada. Nota: Para realizar los ejercicios tienes que abrir una nueva consulta sobre la base de datos GestionSimples. En el Explorador de objetos selecciona la base de datos y elige Nueva Consulta. En la carpeta Ejercicios del curso tienes el PDF Tablas_Gestion para consultar en qu tablas est cada campo.
Objetivo
Mostrar una columna que sea el resultado de un clculo aritmtico.
112983 112987 112989 112992 112993 112997 113003 113007 113012 113013 113024 113027 113034 113042 113045 113048 113049 113051 113055 113057 113058 113062 113065
aci aci fea aci rei bic imm imm aci bic qsa aci rei rei rei imm qsa qsa aci aci fea bic qsa
41004 4100y 114 41002 2a45c 41003 779c 773c 41003 41003 xk47 41002 2a45c 2a44r 2a44r 779c xk47 xk47 4100x 4100x 112 41003 xk47
1,17 25,00 2,43 0,76 0,79 6,52 18,75 9,75 1,07 6,52 3,55 8,3333 0,79 45,00 45,00 18,75 3,88 3,55 0,25 NULL 1,48 2,43 3,55
113069
imm
773c
14,25
De cada producto queremos saber el id de fabricante, id de producto, su descripcin y el valor de sus existencias. El valor de las existencias es un campo calculado, tendremos que multiplicar el nmero de existencias por su precio para ver en cunto se valora el stock. SELECT idfab,idproducto,descripcion,(existencias*precio) AS valoracion FROM productos; Resultado: Idfab Idproducto Descripcin Valoracion aci aci aci aci aci aci aci bic bic bic fea fea imm imm imm 41001 41002 41003 41004 4100x 4100y 4100z 41003 41089 41672 112 114 773c 775c 779c arandela bisagra art t3 art t4 junta extractor mont manivela rodamiento plato cubo cubo reostato reostato 2 reostato 3 NULL NULL NULL NULL NULL NULL NULL 19,56 175,50 0,00 170,20 36,45 273,00 71,25 0,00
imm imm imm qsa qsa qsa rei rei rei rei
887h 887p 887x xk47 xk48 xk48a 2a44g 2a44l 2a44r 2a45c
caja clavos perno manivela red red red pas bomba l bomba r junta
120,42 6,00 152,00 134,90 272,02 54,76 49,00 540,00 540,00 165,90
Listar el nombre, mes y ao del contrato de cada vendedor. SELECT nombre, MONTH(contrato) AS [Mes de contrato], YEAR(contrato) AS [Ao de contrato] FROM empleados; El resultado ser: Nombre Antonio Viguer Alvaro Jaumes Juan Rovira 10 12 3 Mes de contrato Ao de contrato 1986 1986 1987
Para practicar puedes realizar este Ejercicio Funciones en la lista de seleccin. Nota: Para realizar los ejercicios, utiliza la base de datos GestionSimples.
Objetivo
Realizar consultas simples con funciones en la lista de seleccin.
La nica dificultad es convertir la fecha de contrato completa en una fecha corta. Para eso utilizamos la funcin CONVERT() de la siguiente forma: SELECT numemp, nombre, oficina, CONVERT (CHAR(8),contrato,3) AS [Fecha contrato] FROM empleados; Adems, le hemos incluido un alias para que el ttulo de la columna sea ms descriptivo. Resultado: Numemp 101 102 103 104 105 106 107 108 109 110 111 112 113 Nombre Antonio Viguer Alvaro Jaumes Juan Rovira Jos Gonzlez Vicente Pantalla Luis Antonio Jorge Gutirrez Ana Bustamante Mara Sunta Juan Victor Juan Gris Julin Martorell Juan Gris Oficina Fecha Contrato 12 21 12 12 13 11 22 21 NULL NULL NULL NULL NULL 20/10/86 10/12/86 01/03/87 19/05/87 12/02/88 14/06/88 14/11/88 12/10/89 12/10/99 13/01/90 01/05/05 01/05/06 01/01/07
Listar los empleados indicando cdigo, nombre y da de la semana en que fue contratado. En este caso, la funcin DATENAME() es la que calcula automticamente el da de la semana para la fecha indicada. Tendremos que pasarle los parmetros de formato: dw (day week) y de datos: contrato. SELECT numemp, nombre, DATENAME(dw,contrato) AS [Da de contrato]
FROM empleados; Resultado: Numemp 101 102 103 104 105 106 107 108 109 110 111 112 113 Nombre Antonio Viguer Alvaro Jaumes Juan Rovira Jos Gonzlez Vicente Pantalla Luis Antonio Jorge Gutirrez Ana Bustamante Mara Sunta Juan Victor Juan Gris Julin Martorell Juan Gris Da de contrato Lunes Mircoles Domingo Martes Viernes Martes Lunes Jueves Martes Sbado Domingo Lunes Lunes
Listar de cada empleado su cdigo, nombre y ttulo (sustituir la abreviatura dir por la palabra completa Director). En esta ocasin utilizaremos la funcin REPLACE() en que indicaremos la columna sobre la que actuar la funcin, el valor a modificar y el valor que lo va a substituir. SELECT numemp, nombre, REPLACE(titulo, 'Dir ', 'Director ') AS Cargo FROM empleados; Fjate que hemos remplazado el valor con un espacio al final de la palabra. Esto se debe a que, en la tabla, no aparece la palabra Dir simplemente, sino que a continuacin indica el tipo de director (dir ventas). Si no insertramos el espacio veramos como resultado Directorventas, Directorgeneral, etc.
Resultado: Numemp 101 102 103 104 105 106 107 108 109 110 111 112 113 Nombre Antonio Viguer Alvaro Jaumes Juan Rovira Jos Gonzlez Vicente Pantalla Luis Antonio Jorge Gutirrez Ana Bustamante Mara Sunta Juan Victor Juan Gris Julin Martorell Juan Gris Cargo representante representante representante Director ventas representante director general representante Director ventas representante representante representante representante representante
Listar las ventas en cada oficina con el formato: 22 tiene ventas de 186,042.00 SELECT oficina, 'tiene ventas de ' AS [ ], ventas FROM oficinas; El resultado sera: oficina 11 12 13 21 tiene ventas de tiene ventas de tiene ventas de tiene ventas de ventas 69300,00 73500,00 36800,00 83600,00
22 23 24 26 28
tiene ventas de tiene ventas de tiene ventas de tiene ventas de tiene ventas de
El incluir una constante como columna en la lista de seleccin puede parecer intil (se repetir el mismo valor en todas las filas) pero veremos ms adelante que tiene utilidad en ciertos casos. Tambin podemos utilizar la sintaxis: alias_columna = <expresion> Ejemplo: SELECT oficina, superavit = ventas-objetivo Esto tiene el mismo efecto que SELECT oficina, ventas-objetivo AS superavit
oficinas.* se interpreta como: todas las columnas de la tabla oficinas . Esta forma se utiliza normalmente cuando el origen est basado en varias tablas y queremos indicar todas las columnas no del origen completo sino de una tabla concreta. Para practicar puedes realizar este Ejercicio La palabra clave *. Nota: Para realizar los ejercicios, utiliza la base de datos GestionSimples.
Objetivo
Realizar consultas simples utilizando la palabra clave *.
102
48
21
representante
108
35000,00
47400,00
103
29
12
representante
104
27500,00
28600,00
104
33
12
dir ventas
106
20000,00
14300,00
105
37
13
representante
104
35000,00
36800,00
106
52
11
NULL
27500,00
29900,00
107
49
22
108
30000,00
18600,00
108
62
21
dir ventas
1989-10-12 00:00:00.000 1999-10-12 00:00:00.000 1990-01-13 00:00:00.000 2005-05-01 00:00:00.000 2006-05-01 00:00:00.000 2007-01-01 00:00:00.000
106
35000,00
36100,00
109
31
NULL
representante
106
3000,00
39200,00
110
Juan Victor
41
NULL
representante
104
NULL
7600,00
111
Juan Gris
50
NULL
representante
NULL
10000,00
60000,00
112
50
NULL
representante
NULL
10000,00
91000,00
113
18
NULL
representante
NULL
10000,00
0,00