Y decían que nunca iba a usar teoría de conjuntos!
SELECT *
FROM platzi.alumnos
WHERE id NOT IN (
SELECT id
FROM platzi.alumnos
WHERE tutor_id = 30
)
Introducción a SQL
Breve historia de SQL
Álgebra relacional
Instalación de la BD de ejemplo
Qué es una proyección (SELECT)
Origen (FROM)
Productos cartesianos (JOIN)
Selección (WHERE)
Ordenamiento (ORDER BY)
Agregación y limitantes (GROUP BY y LIMIT)
Ejercitando tu SQL
El primero
El segundo más alto
Seleccionar de un set de opciones
En mis tiempos
Seleccionar por año
Duplicados
Selectores de rango
Eres lo máximo
Egoísta (selfish)
Resolviendo diferencias
Todas las uniones
Triangulando
Generando rangos
Regularizando expresiones
Conceptos de SQL Avanzado
Bases de datos distribuidas
Queries distribuídos
Sharding
Window functions
Particiones y agregación
El futuro de SQL
You don't have access to this class
Keep learning! Join and start boosting your career
Contributions 552
Questions 21
Y decían que nunca iba a usar teoría de conjuntos!
SELECT *
FROM platzi.alumnos
WHERE id NOT IN (
SELECT id
FROM platzi.alumnos
WHERE tutor_id = 30
)
SELECT *
FROM platzi.alumnos
OFFSET ( SELECT COUNT(*)/2 FROM platzi.alumnos );
Mi solución usando MySQL
SELECT * FROM platzi.alumnos
WHERE (
id > (SELECT COUNT(id)/2 FROM platzi.alumnos)
);
Me pareció tan sencillo colocar un diferente (<>) en vez de un igual (=), aunque creo que exsiste una palabra reservada NOT que cumpliría el cometido, yo lo hice así:
SELECT ROW_NUMBER() OVER() AS row_id, *
FROM platzi.alumnos
WHERE id NOT IN (
SELECT id
FROM platzi.alumnos
WHERE tutor_id = 30
);
También pudo ser:
SELECT *
FROM platzi.alumnos
WHERE tutor_id = 30;
Otra forma de hacerlo es decir a lo que son diferentes de tutor 30
es decir tutor_id != 30
SELECT *
FROM platzi.alumnos
WHERE id IN (
SELECT id
FROM platzi.alumnos
WHERE tutor_id != 30
)
<SELECT *
FROM (
SELECT ROW_NUMBER() OVER() AS row_id, *
FROM platzi.alumnos
ORDER BY row_id
) AS alumnos_with_row_num
WHERE row_id >
(SELECT count(*)/2
FROM platzi.alumnos)>
select *
from platzi.alumnos
where id >= (
select count(*)/2 as cuenta
from platzi.alumnos
);
SELECT *
FROM platzi.alumnos
WHERE id IN (
SELECT id
FROM platzi.alumnos
WHERE tutor_id = 30
AND carrera_id = 31
);
-- RETO
SELECT *
FROM platzi.alumnos
WHERE id NOT IN (
SELECT id
FROM platzi.alumnos
WHERE tutor_id = 30
);
Mi solución, fue lo primero que pense cuando aun explicaba la clase.
SELECT *
FROM platzi.alumnos
WHERE id IN (
SELECT id
FROM platzi.alumnos
WHERE tutor_id != 30
);
SELECT *
FROM platzi.alumnos
OFFSET 500;
estas son las tres formas que encontre para darle solución al problema del final de la clase:
SELECT *
FROM platzi.alumnos
WHERE id IN (
SELECT id
FROM platzi.alumnos
WHERE tutor_id <> 30
);
SELECT *
FROM platzi.alumnos
WHERE id NOT IN (
SELECT id
FROM platzi.alumnos
WHERE tutor_id = 30
);
SELECT *
FROM platzi.alumnos
WHERE tutor_id <> 30;
Dos formas
SELECT *
FROM (
SELECT ROW_NUMBER() OVER() AS row_id, *
FROM platzi.alumnos
) AS alumnos_with_row_num
WHERE row_id NOT IN (
SELECT id
FROM platzi.alumnos
WHERE tutor_id = 30
);
Segunda forma
SELECT * FROM platzi.alumnos
except
select * from platzi.alumnos where tutor_id=30;
Comparto mi solución al reto:
SELECT *
FROM platzi.alumnos
WHERE tutor_id <> 30;
select * from platzi.alumnos
where id in(
select id
from platzi.alumnos
where tutor_id != 30
);
SELECT *
FROM platzi.alumnos
EXCEPT
(SELECT *
FROM platzi.alumnos
WHERE id IN (
SELECT id
FROM platzi.alumnos
WHERE tutor_id=30)
);
SELECT *
FROM PLATZI.ALUMNOS
WHERE ID IN
(SELECT ID
FROM PLATZI.ALUMNOS
WHERE TUTOR_ID != 30);
TRAE LA SEGUNDA MITAD
SELECT *
FROM platzi.alumnos
OFFSET ( SELECT COUNT(*)/2 FROM platzi.alumnos );
Este es mi solución al reto:
select *
from (
SELECT count(*) over() as total_filas, *
FROM platzi.alumnos)
as consulta_externa
where id >= (total_filas / 2 )
Aunque entendí rápido cómo resolverlo, tuve problemas con el orden o la forma de colocar el count(*) junto con el * porque estaba poniendo de primero el asterisco… al cambiarlo al final funcionó.
Esta fue mi solucion para el reto
--- Traer la 2da mitad de la tabla Alumnos
SELECT *
FROM alumnos
OFFSET (
SELECT COUNT(id)/2
FROM alumnos);```
select *
from platzi.alumnos
where tutor_id != 30
SELECT *
FROM platzi.alumnos
WHERE id IN (
SELECT id
FROM platzi.alumnos
WHERE NOT tutor_id = 30 AND NOT id IN (1,5,10,12,15,20)
);
SELECT *
FROM platzi.alumnos
WHERE id >= 500
;
SELECT *
FROM platzi.alumnos
LIMIT 500 OFFSET 499
;
Creo que era mas fácil hacer un
top 50 percent con un order by platzi . alumnos . id asc
Consulta ordenada sobre tutor_id
USE platzi
GO
SELECT *
FROM platzi.alumnos
WHERE id not IN(
SELECT id
FROM platzi.alumnos
WHERE
tutor_id = 30
)
ORDER BY tutor_id ASC;
SELECT *
FROM platzi.alumnos
WHERE id NOT IN (
SELECT id
FROM platzi.alumnos
WHERE tutor_id = 30
AND carrera_id= 31
);
SELECT *
FROM platzi.alumnos
where tutor_id <> 30
;
SELECT *
FROM platzi.alumnos
WHERE id IN (SELECT id
FROM platzi.alumnos
WHERE tutor_id <>30);
Mi aporte al segundo desafío, que son los select inversos a los mostrados:
SELECT *
FROM platzi.alumnos
WHERE id IN(
SELECT id
from platzi.alumnos
WHERE tutor_id <>30);
SELECT
*
from
(select ROW_NUMBER() over() AS row_id, *
from platzi.alumnos)
as alumnos_with_row_num
where row_id not in (1,5,10,12,15,20);
select *
from platzi.alumnos
where id in (select id
from platzi.alumnos
where tutor_id !=30);
Solución al ejercicio anterior obtener la segunda mitad de registros de la tabla alumnos
select *
from platzi.alumnos
offset (select count(id)/2
from platzi.alumnos)
SELECT *
FROM platzi.alumnos
WHERE id IN (
SELECT id
FROM platzi.alumnos
WHERE tutor_id != 30
);
-- solo le agregué el signo de exclamación
SELECT *
FROM platzi.alumnos
where id in(
SELECT id
FROM platzi.alumnos
WHERE tutor_id !=30);
Want to see more contributions, questions and answers from the community?