SQL: diferencia de conjuntos

Hola a todos.

He leído que es posible hacer la unión de dos consultas SQL mediante UNION. Me pregunto si es posible hacer también la operación diferencia (en teoría de conjuntos) de dos de ellas.

Veréis, el caso es que tengo las típicas tablas usuarios y pedidos, y quiero buscar qué usuarios no tienen ningún pedido. Con JOIN y variantes no logro sacarlo...

¿alguna ayuda?

Gracias!
select * from usuarios where (user_id not in (select user_id from pedidos))


El código puede no ser el correcto, pero pillas lo que quiero decir, no?
pakopa escribió:
select * from usuarios where (user_id not in (select user_id from pedidos))


El código puede no ser el correcto, pero pillas lo que quiero decir, no?


O sin sub-selects:
select u.* from usuarios u, pedidos p where u.user_id != p.user_id

Es un join pero sin poner 'JOIN' (join implícito o algo así creo que se llama).
Me olía que debería usar SELECT anidados, pero no sabía cómo. Pillo la idea, Pakopa.

La opción de redscare me resulta un poco rara. Para ser un JOIN, podrían haberse currado una sintaxis específica.

Las probaré.

Gracias a los dos!
A mi es que usar JOIN me parece un soberano coñazo (y además no se hacerlo bien). Me parece mucho más sencillo hacerlo simplemente por condiciones. Pero vamos, esto ya es un poco cuestión de gustos. Eso si, tengo entendido que usar sub-selects penaliza el rendimiento de la base de datos y es mejor evitarlas siempre que sea factible... aunque si es un ejercicio académico esto te la pela infinito, claro XD
La verdad es que tu solución es mas elegante pero como dices si el fin es académico tampoco hay que complicarse. No he usado un JOIN en mi vida, hahaha, aunque tampoco SQL es mi mayor especialidad, me apaño. Desde luego cuanto he tenido que hacer algo similar ha sido como mucho por condiciones seleccionando de varias tablas.
redscare escribió:A mi es que usar JOIN me parece un soberano coñazo (y además no se hacerlo bien). Me parece mucho más sencillo hacerlo simplemente por condiciones. Pero vamos, esto ya es un poco cuestión de gustos. Eso si, tengo entendido que usar sub-selects penaliza el rendimiento de la base de datos y es mejor evitarlas siempre que sea factible... aunque si es un ejercicio académico esto te la pela infinito, claro XD


No es fin académico, sino laboral. Aunque el rendimiento me la sigue pelando infinito. XD

Pero agradezco la información. ;)

Un saludo y gracias!
6 respuestas