SQL
[MySQL] SQL 함수 : 질의문, LIKE, EXISTS, UNION
zzheng
2024. 5. 27. 20:36
부속 질의문(subquery)을 사용한 검색
- 질의문
- 다른 질의문에 중첩(nested) 되어 사용된 검색문
- 형태 : SELECT-FROM-WHERE-GROUP BY-HAVING
- 중첩 질의문 : 부속 질의문을 포함하고 있는 질의문
- IN 다음에 사용 : 집합의 멤버십 연산자(∈)로 해석
# 과목 번호(Cno) 'C413' 등록한 학생 이름(Sname) 검색하기
mysql> SELECT Sname
-> FROM STUDENT
-> WHERE Sno IN
-> (SELECT Sno FROM ENROL WHERE Cno ='C413');
# 과목 번호(Cno) 'C413' 등록되지 않는 학생 이름(Sname) 검색하기
mysql> SELECT Sname
-> FROM STUDENT
-> WHERE Sno NOT IN
-> (SELECT Sno FROM ENROL WHERE Cno ='C413');
[질의] 학생 '정기태'와 같은 학과의 학생이름과 학과를 검색하기
mysql> SELECT Sname, Dept
-> FROM STUDENT
-> WHERE Dept =
-> (SELECT Dept FROM STUDENT WHERE Sname = '정기태');
# 학번이 500인 학생의 모든 기말 성적보다 좋은 학기말 성적을 받은 학생의 학번과 과목 번호 검색하기
mysql> SELECT Sno, Cno
-> FROM ENROL
-> WHERE Final > ALL
-> (SELECT Final FROM ENROL WHERE Sno = 500);
LIKE를 사용하는 검색
검색방법
- LIKE : 서브 스트링 패턴(substring parttern) 비교 연산자
- % : 어떤 길이의 어떤 문자 스트링도 관계 없음을 의미
- _ : 문자 하나를 의미
# 과목번호(Cno)가 C로 시작하는 과목의 과목번호와 과목 이름(Cname)을 검색하기
mysql> SELECT Cno, Cname
-> FROM COURSE
-> WHERE Cno LIKE 'C%';
EXISTS를 사용하는 검색
- 결과가 존재하는지를 확인하는데 사용함.
#[질의] 과목 'C413'에 등록한 학생의 이름을 검색하기
mysql> SELECT Sname
-> FROM STUDENT
-> WHERE EXISTS
-> (SELECT*
-> FROM ENROL
-> WHERE Sno = STUDENT.Sno AND Cno = 'C413');
UNION 이 관련된 검색
# [질의] 3학년이상이거나 과목 'C324'에 등록한 학생의 학번을 검색하기
mysql> SELECT Sno
-> FROM STUDENT
-> WHERE Year =3
-> UNION
-> SELECT Sno
-> FROM ENROL
-> WHERE Cno = 'C324';