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';