Вы находитесь на странице: 1из 32

Introducción a TSQL

Unidad 3

Autor
Isabel Ponce
Unidad 3

Objetivos

• Ordenamiento (Order by)


• Renglones duplicados (Distinct)
• Funciones de columna (Count, Avg,
Sum)
• Consultas agrupadas (Group by)
• Funciones de columna y consultas
agrupadas
• Condiciones de búsqueda de grupos
(Having)
• Totales y subtotales (Compute)
• Uniones (Union)
Recapitulación

• La cláusula select especifica qué


columnas queremos ver.

• La cláusula from indica de qué


tablas queremos obtener los valores.

• La cláusula where restringe los


renglones que queremos mostrar
Order by

• La cláusula order by es usada para


especificar una forma de ordenar los
resultados obtenidos.

• El ordenamiento puede ser


ejecutado por nombre o por número
de columna correspondiente en la
cláusula select

select au_fname, au_lname


from authors
order by au_lname, au_fname
o
select au_fname, au_lname
from authors
order by 2,1
Order by

• Dependiendo del DBMS, la columna


por la cual se ordena puede ser
omitida en la cláusula select.

select au_fname, au_lname


from authors order by state

• Aunque en algunos DBMSs esto no


funciona, generalmente tampoco se
requiere.

• Por omisión el ordenamiento se


realiza ascendentemente (a-z), pero
se puede especificar un orden
descendente usando la palabra
reservada desc.

• …order by au_lname desc,


au_fname
Order by

• El ordenamiento está determinado


por un conjunto de caracteres
definidos para una base de datos.

• En Sybase y MS SQL Server, este


mapa de caracteres puede
obtenerse ejecutando sp_helpsort

exec sp_helpsort

• El order by no está limitado a las


columnas de datos definidas en las
tablas.

• También se puede ordenar en base


a una expresión.
Order by

select au_fname + ' ' + au_lname


nombre
from authors
order by nombre
name                                            
              

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
­­­­­­­­­­­­­­ 
Abraham Bennet                                  
              
Akiko Yokomoto                                  
              
Albert Ringer                                   
              
Ann Dull                                        
              
...
Meander Smith                                   
              
Michael O'Leary                                 
              
Michel DeFrance                                 
              
Morningstar Greene                              
              
Patti Smythe                                    
              
Reginald Blotchet­Halls                         
              
Order by / Nulos

• Ya que el order by está basado en


un conjunto de caracteres y los nulos
no son caracteres, ¿dónde entrarían
estos?

• Dependiendo del DBMS, los nulos se


mostrarán ya sea al inicio o al final
del resultado.
Distinct

• Algunos de los resultados obtenidos hasta


ahora, muestran renglones repetidos.

• Dentro del conjunto de valores


resultantes, estos son valores duplicados,
aunque dentro de la base de datos no lo
estén.

• Esto es porque las instrucciones select


que se han ejecutado retornaron un
renglón de datos para cada renglón en
una tabla que coincidiera con un criterio
específico.

• En algunas ocasiones no se requiere


obtener estos renglones duplicados.

• Se pueden eliminar usando la palabra


reservada distinct.
Distinct

• Distinct se coloca inmediatamente


después del select.

• Sólo puede haber un distinct por


instrucción SQL.

• El distinct aplica a todas las


columnas en la lista del select.
select au_id from titleauthor
au_id       
­­­­­­­­­­­ 
172­32­1176 
213­46­8915 
213­46­8915 
238­95­7766 
267­41­2394 
267­41­2394 
...
899­46­2035 
899­46­2035 
998­72­3567 
998­72­3567 

(25 row(s) affected)
Distinct

select distinct au_id from titleauthor


au_id       
­­­­­­­­­­­ 
172­32­1176 
213­46­8915 
238­95­7766 
267­41­2394 
...
899­46­2035 
998­72­3567 

(19 row(s) affected)
Funciones de Columna

• Hay veces que se requieren ejecutar


cálculos sobre todos los valores de
una columna o tabla

• Para ello usamos las funciones de


columna.

• Las tres que veremos ahora son:


count, sum y average.
Count(*)

• Count retorna exactamente lo que


su nombre indica, una cuenta del
número de renglones en una tabla
que corresponde a cierto criterio.

select count(*)
from authors
retorna el número de renglones en la tabla
authors
­­­­­­­­­­­ 
27          

(1 row(s) affected)
select count(*)
from authors
where state = 'CA'
retorna el número de autores que viven en
CA
­­­­­­­­­­­ 
15          

(1 row(s) affected)
Sum

• Sum se usa para sumar todos los


valores en una columna.

select sum(advance)
from titles
retorna el total de anticipos de todos los
autores
­­­­­­­­­­­­­­­­­­­­­­­­­­ 
95,400.00                  

(1 row(s) affected)
Avg

• Avg retornará el valor promedio en


una columna

select avg(price)
from titles
retorna el precio promedio de todos los
libros
­­­­­­­­­­­­­­­­­­­­­­­­­­ 
14.77                      

(1 row(s) affected)

select avg(price)
from titles
where price > 10
retorna el precio promedio de los libros que
cuestan más de $10
­­­­­­­­­­­­­­­­­­­­­­­­­­ 
17.94                      

(1 row(s) affected)
Group by

• Los datos en una tabla se


almacenan esencialmente de
manera aleatoria.

• Se puede imponer un orden en el


resultado usando order by.

• También se puede imponer otro tipo


de orden de los resultados usando la
cláusula group by.

• Group by ordena los datos en grupos


que se especifican y retorna el
conjunto de renglones que
determinan a estos grupos.

• Los valores duplicados son


removidos del resultado.
Group by

• De esta forma, un group by ejecuta


una operación similar a distinct.

• Aunque distinct no necesariamente


ordena el resultado.

• Para ordenar, se requiere especificar


un order by.
select type
from titles
group by type
type         
­­­­­­­­­­­­ 
(null)       
UNDECIDED    
popular_comp 
business     
mod_cook     
trad_cook    
psychology   

(7 row(s) affected)
Group by

select type
from titles
group by type
order by 1
type         
­­­­­­­­­­­­ 
(null)       
business     
mod_cook     
popular_comp 
psychology   
trad_cook    
UNDECIDED    

(7 row(s) affected)
Group by y Nulos

• Los nulos son tratados de manera


especial por la cláusula group by.

• Cuando un group by se evalua,


todos los nulos son colocados en el
mismo grupo.

select type from titles group by type


type         
­­­­­­­­­­­­ 
(null)       
UNDECIDED    
business     
mod_cook     
popular_comp 
psychology   
trad_cook    

(7 row(s) affected)
Group by y where

• Se puede usar una cláusula where


para limitar el conjunto de datos que
considerará el group by.

select type
from titles
where advance > 5000
group by type
type         
­­­­­­­­­­­­ 
business     
mod_cook     
popular_comp 
psychology   
trad_cook    

(5 row(s) affected)
Group by

• El verdadero poder del group by


reside en usarlo en conjunto con
funciones de columna.

• Suponiendo que se desea contar


cada tipo de libro.

• Podríamos estar tentados a hacer


esto:

select type, count(*) from titles


Msg 8118, Level 16, State 1
Column 'titles.type' is invalid in the select 
list because it is not contained in an 
aggregate function and there is no GROUP BY 
clause.
Group by

• Para evitar el error, se necesita hacer lo


siguiente:

select type, count(*)


from titles
group by type
type                     
­­­­­­­­­­­­ ­­­­­­­­­­­ 
(null) 2           
UNDECIDED 1           
business 2           
mod_cook 2           
popular_comp 3           
psychology 5           
trad_cook 3           

(7 row(s) affected)

• Algo que se debe recordar es que si


se usa un grupo con una función de
columna, se deben especificar todas
las columnas que no tienen
funciones de columna en la cláusula
group by.
Group by

select city, state, count(*)


from authors
group by state
retornará un error de sintaxis.
Msg 8120, Level 16, State 1
Column 'authors.city' is invalid in the 
select list because it is not contained 
in either an aggregate function or the 
GROUP BY clause.

select city, state, count(*)


from authors
group by state, city
retornará el siguiente resultado
city state             
­­­­­­­­­­­­­­­­­­­­ ­­­­­­­­­­­­­­­ 
­­­­­­­­­­­ 
(null) MA 4           
Ann Arbor MI 1           
Berkeley CA 2           
Corvallis OR 1           
Covelo CA 1           
Gary IN 1           
...
(17 row(s) affected)
Group by

• Tampoco se puede especificar una


función de columna en la cláusula
group by.

select count(*)
from authors
group by count(*)
retornará error de sintaxis
Msg 144, Level 15, State 1
Cannot use an aggregate or a subquery in an 
expression used for the by­list of a GROUP BY 
clause.
Having

• La cláusula having trabaja


esencialmente igual que la cláusula
where, pero existe una diferencia
fundamental:

– La cláusula where define el conjunto


de renglones que se mostrarán y
agruparán.

– El having define cuáles grupos serán


retornados al usuario.
Having

• La cláusula having generalmente


contiene funciones de columna como
parte del criterio de selección.

select pub_id, sum(advance)


from titles
group by pub_id
having sum(advance) > 10000
pub_id                            
­­­­­­ ­­­­­­­­­­­­­­­­­­­­­­­­­­ 
0736   24,400.00                  
0877   41,000.00                  
1389   30,000.00                  

(3 row(s) affected)

• Esta instrucción retornará sólo el


conjunto de pub_ids que hayan
tenido una suma de anticipos mayor
a $10000.
Uniones

• Hay veces que se desea retornar


dos o mas conjuntos de datos con
una sola instrucción select.

• Ejemplos de esto son las


combinaciones de datos de dos
diferentes tablas cuando tienen
criterios mutuamente excluyentes.

• Para hacer esto se utiliza una unión.


Uniones

select * from authors


where state = 'CA'
union
select * from authors
where state = 'MA'
au_lname                                 state 
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ ­­­­­ 
Bennet                                  CA    
Carson                                  CA    
Dull                                       CA    
Green                                    CA    
Gringlesby                            CA    
Hunter                                   CA    
Karsen                                   CA    
Locksley                                CA    
MacFeather                           CA    
McBadden                             CA    
O'Leary                                  CA    
Straight                                  CA    
Stringer                                  CA    
White                                     CA    
Yokomoto                              CA    
Burns                                    MA    
Johnson                                  MA    
Smithe                                   MA    
Smythe                                  MA    

(19 row(s) affected)
Uniones

• Las únicas restricciones sobre


uniones son que:

– El mismo número de columnas se


debe obtener en cada resultado y

– Los tipos de datos deben coincidir.

• No se pueden unir una instrucción


select que regrese 2 columnas con
un select que regrese 3 columnas.

• Tampoco se puede unir un resultado


donde la primera columna de un
select es caracter y la primera
columna de otro select es un dato
numérico.
Resumen Unidad 3

• Un order by puede usarse para ordenar


los resultados obtenidos.

• El orden se determina por el conjunto de


caracteres de la base de datos.

• Para remover renglones duplicados de


un resultado se usa distinct.

• Se pueden realizar cálculos usando


funciones de columna: count(*), sum y
avg son las mas comunes.

• Se pueden agrupar los datos usando


group by.
Resumen Unidad 3 cont.

• Group by puede combinarse con


funciones de columna para obtener
cálculos sofisticados.
• Una cláusula having realiza una
restricción en un group by.
• Having y where realizan diferentes
acciones en la forma en que
procesan los renglones.
• Compute se usa para calcular
totales.

• Compute by se usa para calcular


subtotales.

• Las uniones (union) permiten


combinar múltiples resultados y
retornarlos al usuario en una sola
consulta.
Ejercicios

1.Seleccionar todos los títulos que no tengan


precio
2.Seleccionar todos los títulos ordenados por tipo
3.Mostrar el tipo y precio de cada libro
4.Ahora remover los renglones duplicados del
resultado anterior
5.Mostrar el número de renglones en la tabla de
títulos
6.Indicar el total de ventas anuales a la fecha de
todos los libros
7.Calcular el promedio de precios de los libros
8.Listar cuántos libros hay de cada tipo
9.Seleccionar el total de ventas anuales a la fecha
por tipo de libro
10.Calcular el promedio de precios por cada tipo
de libro
11.Seleccionar los tipos de libros que tengan un
promedio de precio > $13.50
12.Listar cada title_id, type y price de la tabla de
titles y el promedio de precios de todos los libros
13.Mostar title_id, type y price de la tabla de titles
con un promedio de precios por tipo y el general
14.Lstar todos los nombres de los autores y de los
empleados en un sólo resultado

Вам также может понравиться