You don't have access to this class

Keep learning! Join and start boosting your career

Aprovecha el precio especial y haz tu profesión a prueba de IA

Antes: $249

Currency
$209
Suscríbete

Termina en:

0 Días
8 Hrs
33 Min
42 Seg
Curso Práctico de SQL

Curso Práctico de SQL

Israel Vázquez Morales

Israel Vázquez Morales

Seleccionar de un set de opciones

12/29
Resources

Contributions 552

Questions 21

Sort by:

Want to see more contributions, questions and answers from the community?

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

);

12. Seleccionar de un set de opciones

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;
\-- Traer segunda mitad de una tabla SELECT count (ID) FROM platzi.alumnos WHERE ID > (SELECT COUNT (T.ID)/2 FROM (SELECT ID FROM platzi.alumnos LIMIT 1000) AS T); \---- Otra forma select \* from platzi.alumnos offset ( select count(id)/2 from platzi.alumnos );
Aqui mi desafio: ![](https://static.platzi.com/media/user_upload/Screenshot%202024-04-18%2011.24.54-de965ea1-f719-42d9-b292-9e68a0541d84.jpg)
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)
```js SELECT *FROM platzi.alumnos WHERE id>(SELECT COUNT (DISTINCT id) FROM platzi.alumnos)/2 ``` \*FROM platzi.alumnos WHERE id>(SELECT COUNT (DISTINCT id) FROM platzi.alumnos)/2
SELECT \* FROM platzi.alumnos WHERE id NOT IN( SELECT id FROM platzi.alumnos WHERE tutor\_id = 30 ) ORDER BY tutor\_id DESC;
También obtuve la primera mitad: ```js -- Obtener la primera mitad de la tabla alumnos SELECT * FROM platzi.alumnos LIMIT ( SELECT COUNT(*)/2 FROM platzi.alumnos ); ```-- Obtener la primera mitad de la tabla alumnos SELECT \* FROM platzi.alumnos LIMIT ( SELECT COUNT(\*)/2 FROM platzi.alumnos );
Así resolvi el reto anterior: SELECT \* FROM alumnos WHERE id > (SELECT COUNT(\*)/2 FROM alumnos);
SELECT \* FROM platzi.alumnos WHERE id IN ( SELECT id FROM platzi.alumnos WHERE tutor\_id <> 30 );
```js SELECT * FROM platzi.alumnos WHERE id NOT 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 ) ;
Mi solución del reto anterior: SELECT \* FROM platzi.alumnos ORDER BY id LIMIT (SELECT COUNT(id) / 2 FROM platzi.alumnos) OFFSET (SELECT COUNT(id) / 2 FROM platzi.alumnos);
![](https://static.platzi.com/media/user_upload/image-2a21c5af-e7a1-499a-b42d-f913a0d7b54f.jpg)
SELECT \* FROM platzi.alumnos WHERE tutor\_id <> 30 ;
Mi idea para poder resolver el problema fue la siguiente tuve dos posibles soluciones: `SELECT * ` `FROM (SELECT ROW_NUMBER() OVER() AS row_id, *` `FROM platzi.alumnos) as row_id` `WHERE row_id >= (SELECT count(*)/2 FROM platzi.alumnos);` `SELECT * ` `FROM platzi.alumnos ` `WHERE id >= (SELECT count(*)/2 FROM platzi.alumnos);`
SELECT \* FROM platzi.alumnos WHERE id IN ( SELECT id FROM platzi.alumnos WHERE tutor\_id != 30);
mi Sentencia: SELECT \* FROM platzi.alumnos WHERE alumnos.id > ( SELECT COUNT(\*)/2 FROM platzi.alumnos ) ; SELECT \* FROM ( SELECT ROW\_NUMBER () OVER () AS numero\_reg, \* FROM platzi.alumnos ) AS id\_registro WHERE numero\_reg > ( SELECT COUNT (\*)/2 FROM platzi.alumnos );
```js SELECT * FROM alumnos WHERE id in ( SELECT id from alumnos where tutor_id != 30) ```SELECT \* FROM alumnos WHERE id in ( SELECT id from alumnos where tutor\_id != 30)
![]()![](https://static.platzi.com/media/user_upload/image-30f9be38-ed8f-4b58-b42c-6272b2f05616.jpg)solo coloque un negado XD
No me gusta los retos, son muy simples y no se aplican a una situacion real.
```txt SELECT a.* FROM platzi.alumnos a LEFT JOIN ( SELECT id FROM platzi.alumnos WHERE tutor_id = 30 AND carrera_id = 31 ) excluidos ON a.id = excluidos.id WHERE excluidos.id IS NULL; ```
Para seleccionar datos de un conjunto de opciones en SQL, puedes usar la cláusula `WHERE` combinada con `IN`. Esto te permite filtrar filas basándote en un conjunto de valores específicos. Aquí tienes un ejemplo: ### Sintaxis general: SELECT columnas FROM tabla WHERE columna IN (opcion1, opcion2, opcion3); ### Ejemplo práctico: Supongamos que tienes una tabla llamada `productos` y deseas seleccionar los productos que pertenecen a las categorías "Electrónica", "Ropa" y "Hogar": SELECT \* FROM productos WHERE categoria IN ('Electrónica', 'Ropa', 'Hogar'); ### Notas adicionales: 1. **Uso de** `NOT IN`**:** Si deseas excluir un conjunto de opciones, usa `NOT IN`:SELECT \* FROM productos WHERE categoria NOT IN ('Electrónica', 'Ropa'); 2. **Compatibilidad con subconsultas:** Puedes usar un resultado de otra consulta dentro de `IN`:SELECT \* FROM productos WHERE categoria IN (SELECT categoria FROM categorias\_populares); 3. **Cuidado con los valores** `NULL`**:** Si usas `NOT IN`, ten cuidado con los valores `NULL` en la lista, ya que pueden causar resultados inesperados.
```js 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 );
SELECT \* FROM platzi.alumnos WHERE id BETWEEN (SELECT COUNT(\*) FROM platzi.alumnos) / 2 AND (SELECT COUNT(\*) FROM platzi.alumnos); SELECT \* FROM platzi.alumnos LIMIT 500 OFFSET 500; SELECT \* FROM platzi.alumnos LIMIT (SELECT COUNT(\*) FROM platzi.alumnos) / 2 OFFSET (SELECT COUNT(\*) FROM platzi.alumnos) / 2; acá mis soluciones
yo lo hice con la primera mitad de la tabla el profesor con la segunda mitad aquí mi consulta `SELECT *` `FROM (` ` SELECT *, ROW_NUMBER() OVER(ORDER BY id) AS row_number ` ` FROM platzi.alumnos` `) AS mitad_registros` `WHERE row_number <= (SELECT COUNT(*) / 2 FROM platzi.alumnos);` ahora con copilot me ayudo a mejorar la con algo que no conocia llamado WITH `WITH mitad_registros AS (` ` SELECT *, ROW_NUMBER() OVER(ORDER BY id) AS row_number ` ` FROM platzi.alumnos AS alumnos ` `)` `SELECT *` `FROM mitad_registros` `WHERE row_number <= (SELECT COUNT(*) / 2 FROM platzi.alumnos)` ```js ``` ```js ```
Yo habia encontrado algunas soluciones mas sencillas de la siguiente manera```js SELECT * FROM platzi.alumnos OFFSET 499; SELECT * FROM platzi.alumnos LIMIT 500 OFFSET 499; ```
La solucion a la actividad planteada es negar la lista. `SELECT *` `FROM platzi.alumnos` `WHERE id NOT IN (` `SELECT id` `FROM platzi.alumnos` `WHERE tutor_id = 30` `);`
Para traer las filas de las posiciones multiplo de 5 podemos utilizar lo siguiente: ```js SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY id) AS row_num FROM platzi.alumnos ) sub WHERE row_num % 5 = 0; ```y como en nuestro caso ocupamos `serial`como primary key podemos simplificar a simplemente: ```js SELECT * FROM platzi.alumnos WHERE id % 5 = 0; ```
SELECT \* FROM platzi.alumnos WHERE id NOT IN ( SELECT id FROM platzi.alumnos WHERE tutor\_id = 30 );
SELECT \* FROM platzi.alumnos *a* LIMIT (SELECT COUNT(\*) / 2 FROM platzi.alumnos) offset 500;
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);
```js select * from (select row_number() over() as row_id, * from alumnos )as alumnosfila where row_id in (1,5,10,15) ```
select \* from platzi.alumnos where id not in( select id from platzi.alumnos where tutor\_id = 30)
Me gusta este modelo práctico del curso, donde se plantean retos en una lección y en la siguiente se revisan posibles respuestas. Esto es mucho mejor que el usual estribillo al final de cada lección: " Ahora, te invito a que...", con el que se propone cualquier cosa que el estudiante quiera hacer, pero sin seguimiento alguno.
Respuestas al segundo reto: segunda mitad de la tabla: ```js SELECT * FROM platzi.alumnos LIMIT 500 OFFSET 500; ```Y otra: ```js SELECT * FROM platzi.alumnos ORDER BY id DESC LIMIT 500; ```
```js SELECT * FROM ( SELECT ROW_NUMBER() OVER() AS row_id, * FROM alumnos ) AS alumnos_with_row_num WHERE row_id NOT IN (1 , 2 , 4 , 8, 16 , 32) ```SELECT \* FROM ( SELECT ROW\_NUMBER() OVER() AS row\_id, \* FROM alumnos ) AS alumnos\_with\_row\_num WHERE row\_id NOT IN (1 , 2 , 4 , 8, 16 , 32)
```js select * from alumnos a where id not in (select id from alumnos a2 where tutor_id = 30) ```
```java SELECT * FROM platzi.alumnos WHERE id NOT IN (1,2,3,4,5,6) ORDER BY id ASC; ```
```python SELECT * FROM platzi.alumnos WHERE id NOT IN (1,2,3,4,5,6) ORDER BY id ASC; ```
```css SELECT * FROM platzi.alumnos WHERE id NOT IN (1,2,3,4,5,6) ORDER BY id ASC; ```
```txt SELECT * FROM platzi.alumnos WHERE id NOT IN (1,2,3,4,5,6) ORDER BY id ASC; ```
SELECT \* FROM platzi.alumnos where id not in( 1,5,10,12,15,20 )
```js SELECT * FROM platzi.alumnos WHERE id NOT IN ( SELECT id FROM platzi.alumnos WHERE tutor_id = 30 ) ORDER BY tutor_id; ```
![]()![](https://static.platzi.com/media/user_upload/CodeMitadSQL-fbfe5f70-c2ad-4068-9315-040990a26773.jpg)
```txt SELECT * FROM platzi.alumnos LIMIT (SELECT COUNT(*) / 2 FROM platzi.alumnos); ```SELECT \* FROM platzi.alumnos LIMIT (SELECT COUNT(\*) / 2 FROM platzi.alumnos);
select \* from platzi.alumnos where id IN ( SELECT id from platzi.alumnos where tutor\_id !=30 );
Una alternativa de solución de las muchas que pueden ser: ![](https://static.platzi.com/media/user_upload/image-c3a4da95-c513-4e7e-b8ca-edd1945e6d28.jpg)
!=
select \* from *otratabla* where *otroserial* <=(SELECT round(count(\*)/2) FROM *otratabla* );
select \* from *otratabla* where *otroserial* <=(SELECT round(count(\*)/2)FROM *otratabla* );
select \* from *otratabla* where *otratabla* <=(SELECT round(count(\*)/2)FROM *otratabla*);
```txt SELECT * FROM platzi.alumnos as a1 WHERE a1.id > ( SELECT count ( a2.id) FROM platzi.alumnos as a2 ) / 2; ```select count ( colegiatura) from platzi.alumnos as a2
select \* from platzi.alumnos where id in ( select id from platzi.alumnos where tutor\_id != 30 );
Para hacer lo solo agrege la consulta not al where de adentro `SELECT * FROM platzi.alumnos WHERE id IN(` `SELECT id from platzi.alumnos ` `WHERE not tutor_id = 30 ` `)`
**SELECT** \* **FROM** ( **SELECT** **ROW\_NUMBER**() **OVER**() **AS** *row\_id*, \* **FROM** usuarios ) *subquery* **WHERE** *row\_id* >= ( **SELECT** **CEIL**(**COUNT**(\*) / 2.0) **FROM** usuarios );
`SELECT * FROM platzi.alumnos` `WHERE id IN (` `SELECT * FROM platzi.alumnos ` `WHERE tutor_id != 30 ` `)`
SELECT *
FROM platzi.alumnos
WHERE id IN (
	SELECT id
	FROM platzi.alumnos
	WHERE tutor_id != 30
);
-- solo le agregué el signo de exclamación
No es la solución al reto, pero si es otra forma de utilizar la clausula `IN` y su contra parte `NOT IN` Lista de alumnos que pagan una de las tres colegiaturas más altas: ```js SELECT * FROM platzi.alumnos WHERE colegiatura IN ( SELECT DISTINCT al.colegiatura FROM platzi.alumnos AS al ORDER BY al.colegiatura DESC LIMIT 3 ); ``` Lista de alumnos que su colegiatura no esta dentro de las 3 más altas(costosas) ```js SELECT * FROM platzi.alumnos WHERE colegiatura NOT IN ( SELECT DISTINCT al.colegiatura FROM platzi.alumnos AS al ORDER BY al.colegiatura DESC LIMIT 3 ); ```
Yo lo hice así: SELECT \* FROM platzi.alumnos WHERE tutor\_id NOT IN (30);
Hola, es un poco tarde respecto a la salida del curso, pero... ¿alguien puede ayudarme con este error? Es la solución del reto 2 tal cuál como el tutor lo indica... (sandbox.data\_champions.alumnos) `SELECT ROW_NUMBER() OVER() AS row_id, *` `FROM platzi.alumnos` `OFFSET( ` `SELECT COUNT(*)/2 ` `FROM platzi.alumnos` `);` ![](https://static.platzi.com/media/user_upload/image-82baa47e-6d1c-4ff8-ac7e-05b8326aeed8.jpg)
A lo sencillo SELECT \* FROM platzi.alumnos OFFSET 501 Sirve.

SELECT *
FROM platzi.alumnos
where id in(
SELECT id
FROM platzi.alumnos
WHERE tutor_id !=30);

**RETO:**  Crear una query el cual visualiza a los alumnos que no están dentro del rango de colegiatura entre  2000 y 2500. ```js select * from platzi.alumnos as alum left join ( select * from platzi.alumnos where id in ( select id from platzi.alumnos where colegiatura > 2000 and colegiatura <2500 ) ) as alumno_filtro on alum.id = alumno_filtro.id where alumno_filtro.id is null ```select \*  from platzi.alumnos as alum left join ( select \*  from platzi.alumnos where id in ( select id from platzi.alumnos where colegiatura > 2000 and colegiatura <2500 ) ) as alumno\_filtro on alum.id = alumno\_filtro.id   where alumno\_filtro.id is null
Mi solucion: ```js SELECT * FROM platzi.alumnos LIMIT ( SELECT COUNT(*) / 2 FROM platzi.alumnos ); ```SELECT \*  FROM platzi.alumnos  LIMIT ( SELECT COUNT(\*) / 2 FROM platzi.alumnos );
![](https://static.platzi.com/media/user_upload/image-3b91925b-a7db-47a4-bf74-c740725e2a15.jpg)
'Reto: Seleccionar los resultados que no se encuentren en el set anterior' 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 OFFSET (SELECT MAX(id)/2 FROM platzi.alumnos) ;
Para el reto de la 2n clase: Sacar la segunda mitad de la tabla en **SQL Server** seria: ```js SELECT TOP 50 PERCENT * FROM platzi.alumnos ORDER BY id DESC; ```SELECT TOP 50 PERCENT \* FROM platzi.alumnos ORDER BY id DESC;
Para el reto de la 2n clase: Sacar la segunda mitad de la tabla en **SQL Server** he utilizado la siguiente instrucción: ```js SELECT * FROM platzi.alumnos ORDER BY id ASC OFFSET (((SELECT COUNT (id) FROM platzi.alumnos) / 2)-1) ROWS FETCH NEXT ((SELECT COUNT (id) FROM platzi.alumnos) / 2) ROWS ONLY; ```