문제
MYSQL
내가 작성한 정답
select distinct id, email, first_name, last_name
from developers d
join skillcodes s on (d.skill_code & s.code) = s.code
where s.category = 'Front End'
order by id asc
전에 작성했던 정답
SELECT DISTINCT D.ID, D.EMAIL, D.FIRST_NAME, D.LAST_NAME
FROM DEVELOPERS D
JOIN SKILLCODES S ON D.SKILL_CODE & S.CODE != 0
WHERE S.CATEGORY = 'Front End'
ORDER BY ID ASC;
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS D
WHERE EXISTS (
// select 1 : 실제로 어떤 데이터를 선택하는지 중요하지 않고 결과의 행 수만 확인
// 데이터의 내용 필요 없고, 단순히 결과가 존재하는가?만 확인할 때
SELECT 1
FROM SKILLCODES S
WHERE S.CATEGORY = 'Front End'
// exists를 사용할 때에는 상위쿼리의 컬럼을 참조할 수 있다.
AND (D.SKILL_CODE & S.CODE) != 0
)
ORDER BY ID ASC;
EXISTS
서브쿼리의 결과가 하나 이상의 행을 반환하는지를 확인.
서브쿼리가 하나라도 결과를 반환하면 TRUE, 그렇지 않으면 FALSE를 반환하여 주로 특정 조건을 만족하는 데이터가 존재하는지를 체크할 때 사용된다.
EXISTS는 상위 쿼리의 컬럼을 참조할 수 있다.
Share article