Te damos la bienvenida a la comunidad de T!Estás a un paso de acceder al mejor contenido, creado por personas como vos.

O iniciá sesión con
¿No tenés una cuenta?
Select(join)
Al separar las tablas por coma, se recibe el producto cartesiano de las tablas.Se usa el producto cartesiano.
Crecimiento exponcencial de filas en la memoria del server

Select(natural join)

Select(outer join)

Select (NULL)
-No debe usarse = o != sino IS o IS NOT

Select(distinct)
-SQL no elimina automaticamente las tuplas duplicadas. Para hacerlo se usa DISTINCT
-Me descarta 2 o mas filas iguales en una sola para que todas las filas sean distintas

Select(func agregadas-group by)
-COUNT, SUM,MAX,MIN,AVG
-Pueden ser usadas en las clausulas SELECT y HAVING


EJERCICIOS
1. Listar todos los artistas ordenados alfabeticamente
SELECT * FROM artist
order by name asc

2. Listar todos los albunes cuyo nombre empieze con B y con su artista correspondiente
SELECT * FROM album join artist
where title like 'b%'

select name as nombre from artist join album on (artist.id=album.artistid)

3. Contar cuantos artistas hay
SELECT count(artistid) from artist

16-10-2014

select count(artistid) as cantidad, artistid as nroartista
from album
group by artistid
order by cantidad desc
limit 10

Ejemplo 1:
select * from
(
select count(artistid) as cantidad, artistid as nroartista from album
group by artistid
order by cantidad desc
limit 10
)as temp
join artist a on(a.artistid=tmp.nroartista)

Ejemplo 2:

select count(trackid) as cantidad, g.genreid, g.name from genre g
join track t on(t.genreid=g.genreid)
group by g.genreid
order by cantidad desc

Ejemplo 3:
select
(select count(trackid)from track)
/
(select count(genreid)from genre)



-----------------------------------------------------------------------
22-10-2014
1. Nombre de cancion, album y artista q tenga el tema musical mas largo en duracion de tiempo
2. Cantidad de artistas por tipo de medio(group by)
3. El top 10 de las canciones mas baratas($)
4. Promedio de precio de cancion por grupo de genero. Cada genero cual es el promedio de precio de sus canciones.
5. Nombre de la ciudad con mayor cantidad de clientes(customer)
6. El genero musical mas escuchado en Brasil
7. El nombre de cliente mas frecuente
8. Nombre y edad de cada empleado (employee)
9.Nombre y apellido de cada empleado con el nombre y apellido de su jefe
10.Nombre de empleados nacidos en la decada del 70
11. Promedio de tamaño(bytes) de todas las canciones

1.
select artist.name, album.title, track.name, track.milliseconds/60000 as minutos, genre.name from track
join album on(track.albumid=album.albumid)
join artist on (artist.artistid=album.artistid)
join genre on(genre.genreid= track.genreid)
where milliseconds = (select max(milliseconds) from track)

2.
select count(artist.artistid) as "Cantidad de artistas por genero", mediatype.name as "Tipo de media file" from artist
join album on(artist.artistid=album.artistid)
join track on(track.albumid=album.albumid)
join mediatype on(track.mediatypeid=mediatype.mediatypeid)
group by mediatype.mediatypeid

3.
select name, unitprice from track
order by unitprice
limit 10

4.
select avg(unitprice) as Promedio, genre.name as Genero from track
join genre on(track.genreid=genre.genreid)
group by genre.name

5.
select max(city) as Ciudad from customer

6.
select count
8.
select firstname as Nombre, lastname as Apellido, strftime('%Y') - strftime('%Y',birthdate) as Edad from employee

9.
select empleados.firstname as Empleado, empleados.lastname as "", jefes.firstname as Jefe, jefes.lastname as "" from employee as empleados
left join employee as jefes on(empleados.reportsto = jefes.employeeid)

11.
select avg(track.bytes)from track












05-11-2014
El INSERT sirve para introducir filas en la bd
Si una tabla devuelve muchos valores no puedo compararlo con un signo de igual
EJERCICIOS
1. Nombres de albunes donde los id de artistas sean 5,13,1 (IN)

SELECT title FROM album
where album.artistid in(
13,5,1)

2.Nombres de tracks donde sean el menor tamaño de cada genero (any)

select name from track
where bytes in
(select min(bytes) from track
group by genreid)

3.Nombre de tracks cuya duracion sea mayor a la del genero rock y metal

select name from track
where milliseconds > (
select max(milliseconds) from track
where genreid in (1,3)
)

Ejempls de CASE
select name,
CASE
WHEN milliseconds < 300000 THEN 'Corto'
WHEN milliseconds > 300000 AND milliseconds <500000 THEN 'Medio'
ELSE 'Largo'
END AS Duration
from track

Interseccion:
select * from(select * from artist where artistid IN (1,271)) as x
INTERSECT
select * from(select * from artist order by artistid desc limit 5) as tmp

DIFERENCIA DE TEORIA DE CONJUNTOS:
select * from(select * from artist where artistid IN (1,271)) as x
except--diferencia
select * from(select * from artist order by artistid desc limit 5) as tmp

td


CREATE TABLE empleado
(
empleado_id number(5) NOT NULL,
nombre varchar(20) NOT NULL,
apellido varchar(20) NOT NULL,
email varchar(40) NOT NULL,
fecha_ingreso date,
telefono number(15) NOT NULL,
puesto varchar(20) NOT NULL,
salario number(10) NOT NULL,
departamento_id number(5) NOT NULL,
jefe_id number(5),
PRIMARY KEY (empleado_id),
FOREIGN KEY (departamento_id));

TRABAJO PRACTICO BD DE TECNOEDUCA:
1.
SELECT distinct puesto FROM empleado
--distinct: todas las iguales las manda una sola vez

2.
select ubicacion_id as cod, nombre as ubicacion from ubicacion

3.
select puesto, apellido from empleado

4.
select apellido, salario from empleado where salario >1200

5.
select * from empleado where empleado_id = 3

6.
select apellido, salario from empleado
where salario < 500 OR salario > 1200

7.
select * from empleado
where fecha_ingreso between '2000/01/01' AND CURRENT_DATE

8.
select * from empleado order by salario desc

9.
select e.apellido, e.nombre, d.nombre from empleado as e
join departamento as d ON(e.depto_id = d.departamento_id)
join ubicacion as u using(ubicacion_id)
where u.nombre like 'Buenos Aires'

10.
select apellido, nombre, apellodo, nombre
from empleado as e
rigth join empleado as j (j.empleado_id= e.jefe_id)

11.
select count(empleado_id), d.nombre
from empleado as e
join departamento as d ON(e.depto_id = d.departamento_id)
group by d.nombre

12.
select max(salario) - min(salario) as diferencia from empleado

13.
select count(empleado_id), Yearof(fecha_ingreso)
from empleado
group by yearof(fecha_ingreso)

14.
select * from empleado
where salario > (select avg(salario) from empleado)

15.
select * from empleado
where depto_id IS NULL

16.
select * from empleado where depto_id = 10
union
select * from empleado where depto_id = 40
union
select * from empleado where depto_id = 20

17.
select distinct d.* from departamento as d
join empleado as e ON(e.depto_id = d.departamento_id)
where puesto not like 'Auxiliar Administrativo'