[MySQL] dual 테이블 조인 질문 0 3 2,437

by 화조 [SQL Query] mysql [2020.02.14 11:37:37]


홈페이지에서 5446, 4455 학생번호를 받아서 현재 student 테이블에 존재하는지 아닌지 확인하는 쿼리를 짰습니다.

제가 원하는 로직은 이렇습니다.

1. student 테이블에 존재하는 학생번호면 학생번호가 없다면 null을 리턴

2. 5446, 4455 로 입력받았을 경우 5446, 4455에 해당하는 결과 값에 순서 보장

   (저는 방법을 몰라 입력받은 값을 내림차순으로 정렬하고 쿼리에 order by 조건을 추가했습니다.)

 

위 로직에 따라 아래 쿼리를 작성해봤습니다.

 

select s.student_no

from student t right outer join

(select 1 as student_no

union select 5446

union select 4455

) d

ON d.student_no = s.student_no

order by d.student_no

 

-----------

student_no

------------

5446,

null

 

트래픽이 좀 많이 들어오는데 위와 같이 쿼리를 작성해도 문제가 없을까요?? 

입력받은 학생번호 수는 동적으로 변합니다.

더 좋은 방법이 있을까 해서 문의남깁니다.

읽어주셔서 감사합니다.

by 마농 [2020.02.14 15:21:01]

UNION 을 사용하면 안되구요 UNION ALL 을 써야 합니다.
코드만 하지 마시고, 순번도 함께 넣으셔야 입력 순서대로 정렬 가능합니다.


by 화조 [2020.02.14 15:56:16]

마농님 답변 감사드립니다. 질문사항 몇 가지 더 있습니다.

1. 쿼리에 dual 을 쓰는 경우가 있나요??
2. dual을 쓴다고 쿼리 수준이 떨어지나요?
3. dual을 썼을 때 성능상에 단점이 있나요?? 

 


by 마농 [2020.02.14 16:00:28]

일괄적으로 써야 한다 말아야 한다 논쟁은 불필요합니다.
그때 그때 상황에 맞게 적절하게 잘 사용하셔야 합니다.
잘 쓰면 약이 되고, 못 쓰면 독이 됩니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입