database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 7041 게시물 읽기
No. 7041
쿼리 질문좀 드려도 될까요?
작성자
김지철(jcmmk)
작성일
2017-03-26 09:08
조회수
2,552

 A테이블

학생번호 학생이름 학생정보

1      동길     기타

2      철수     기타

3      영희     기타

B테이블 

학생번호 수강과목 학점

1               수학            90

1               영어            90

2               수학            80

2               과학            20

3               수학            30

 

 

여기서 수강과목중 영어를 듣지 않고 수학을 듣는 학생목록을 구해야 하는데

만약 쿼리돌린다면 철수, 영희가 나와야 해요

어떤식으로 해야 할까요??

 지금은  

  select 이름 from A  where a.학생번호 in(select b.학생번호 from A where 학생번호 in(

 

(select count(b.학생번호) from B where a.학생번호 =b.학생번호 and 과목 <> 수학)=0 ) and

(select count(b.학생번호)from B where a.학생번호 = b.학생번호 and 과목 = 수학)=0)

)

이런느낌으로 뽑아 냈는데 다른 방식으로 간단하고 효율좋은 방법이 없을까요??

 

 

 

 

 

 

이 글에 대한 댓글이 총 1건 있습니다.

SELECT a.학생이름
  FROM a
 INNER JOIN b
    ON a.학생번호 = b.학생번호
 WHERE b.수강과목 = '수학'
   AND NOT EXISTS (SELECT 1
                     FROM b
                    WHERE a.학생번호 = b.학생번호
                      AND b.수강과목 = '영어'
                   )
;


SELECT a.학생이름
  FROM a
 INNER JOIN b
    ON a.학생번호 = b.학생번호b
 WHERE b.수강과목 IN ('수학', '영어')
 GROUP BY a.학생번호, a.학생이름
HAVING MAX(b.수강과목) = '수학'
;

마농(manon94)님이 2017-03-27 11:42에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
7044높은값 가까운수, 낮은값 가까운수 찾기 [1]
둥둥이
2017-03-29
2787
7043접수일자 완료일자에서 복구된 소요시간을 구할려고합니다. [1]
차진호
2017-03-29
2598
7042UPDATE STATISTICS을 이용한 통계정보갱신처리에 대해서
선도리
2017-03-26
2723
7041쿼리 질문좀 드려도 될까요? [1]
김지철
2017-03-26
2552
7040쿼리 문의 드립니다. [4]
왕초보
2017-03-17
2715
7039쿼리 질문좀 드려도 될까요? [1]
김지철
2017-03-15
2693
7038트랜잭션 로그에 관해 질문 드립니다 :)
이성원
2017-03-09
2806
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.049초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다