간단한 SQL문 질문 드립니다. 0 1 2,085

by 규또 [MySQL] SELECT SQL [2020.05.17 17:17:41]


STUDENT(Sid, Sname) : 학생의 학번과 이름 

COURSE(Cid, Did) : 교과목의 번호와 개설한 학과번호

ENROL(Sid, Cid) : 수강하는 학생들의 학번과 교과목 번호

DEPT(Did, Dname): 학과번호와 학과이름

이러한 테이블이 있고 구하려는 것은 컴퓨터학과에서 개설한 교과목 모두를 듣는 학생의 학번과 이름을 검색하는 것입니다. 그래서 DEPT 테이블의 Dname이 '컴퓨터학과'인 Did와 COURSE 테이블의 Did가 같고 그 교과목들을 모두 GROUP_CONCAT으로 묶어서 ENROL 테이블의 각 학생들이 듣는 교과목들과 비교해서 일치하는 학생들의 학번과 이름을 출력하면 될 것 같은데 왜 안될까요..

아래와 같이 sql문 작성하였는데 어디가 틀렸는지 알려주세요 ㅠㅠ

SELECT S.Sid,S.Sname FROM STUDENT S INNER JOIN ENROL E ON S.Sid=E.Sid 
WHERE (SELECT Did FROM COURSE C) = (SELECT Did FROM DEPT D WHERE Dname='컴퓨터학과')
GROUP BY S.Sid,S.Sname
HAVING GROUP_CONCAT(E.Cid ORDER BY E.Cid)
= (SELECT GROUP_CONCAT(Cid ORDER BY Cid) FROM COURSE 
WHERE (SELECT Did FROM COURSE C) = (SELECT Did FROM DEPT D WHERE Dname='컴퓨터학과'));

 

by 마농 [2020.05.18 08:45:56]
SELECT s.sid
     , s.sname
  FROM student s
 INNER JOIN enrol e
    ON s.sid = e.sid 
 INNER JOIN course c
    ON e.cid = c.cid 
 WHERE c.did IN (SELECT did FROM dept WHERE dname = '컴퓨터학과')
 GROUP BY s.sid, s.sname
HAVING COUNT(*)
    = (SELECT COUNT(*)
         FROM course
        WHERE did IN (SELECT did FROM dept WHERE dname = '컴퓨터학과')
       )
;

 

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