2015년 12월 2일 수요일

MySQL - SubQuery


SELECT

부속 질의어에 대해서 보겠습니다.
부속 질의어(sub query)는 질의 안에 또 쿼리가 있는 것을 말합니다.

예를 보면,

select stu_no, stu_name
from student
where stu_no in (select stu_no from fee);

이런식으로 in 을 사용하여 부속 질의어를 만드는데요.

이를 이용하여 이렇게도 활용할 수 있습니다.

 Q:
"적어도 한 번의 장학금을 받았던 학생의 학번과 이름을 출력하라."
학생 테이블 : student, 학생 학번 : stu_no, 이름 : stu_name
장학금 테이블 : fee, 장학금 받은 수치 : jang_total

A:
SELECT stu_no, stu_name
FROM student
WHERE stu_no IN(SELECT stu_no FROM fee WHERE jang_total>0);


답은 조금만 생각해보시고 보면 될 것 같습니다.( 생각해보는게 중요하고 직접 만들어보는게 중요합니다^^)

앞의 포스팅에서 in 연산자에 대해 배웠는데요
in("내용") 이것은 "내용"과 비교해서 내용이 포함되었다면 그에 대한 내용을 출력하게 할 수 있는 연산자 입니다.

이를 이용해서 in 연산자 안에 내용을 쿼리로 다시 넣는다면 일일이 입력하지않아도 쿼리로 처리가 가능합니다.

Q;
"'20061011'인 학생이 가입한 동아리를 제외한 다른동아리에 적어도 한 번 가입을 한 학생의
학번과 이름, 주민등록번호를 출력하라"
학생 테이블 : student, 학번 : stu_no, 이름 : stu_name, 주민등록번호 : id_num
동아리 테이블 : circle, 동아리 이름 : cir_name

A:
SELECT stu_no, stu_name, id_num
FROM student
WHERE stu_no IN
(SELECT stu_no FROM circle
WHERE cir_name NOT IN
(SELECT cir_name FROM circle WHERE stu_no='20061011'));


이번건 좀 어려운데요 ㅎㅎ
부속 질의어 안에 또 부속 질의어가 있는 문제 입니다.
첫번째 부속 질의어는 학번을 출력하는데 두번째 부속 질의어에 따라 학번을 출력합니다.
(not이 있으므로 20061011학번을 가지고 있는 학생이 없는 동아리를 포함)
두번째 부속 질의어는 동아리 이름을 출력하는데 학번이 20061011이 가입한 동아리에 대해 출력합니다.
중간에 있는 not을 이용해서 20061011학번 학생이 가입한 동아리를 제외하고,
제외한 동아리 외의 동아리에 들어있는 학생들의 정보를 출력합니다.




댓글 없음:

댓글 쓰기

JIRA Plugin - ScriptRunner 소개 #2

관련 글 소개 #1:  https://pineoc.blogspot.com/2019/03/scriptrunner-1.html ScriptRunner 소개 #2 지난 글에서는 Behaviours를 보았고 다음 내용인 콘솔, 리스너 등을 ...