과목 II SQL 기본 및 활용
제1장 SQL 기본
제5절 WHERE 절
5. 논리 연산자
[예제] 예를 들어 “소속이 삼성블루윙즈”인 조건과 “키가 170 센티미터 이상”인 조건을 연결해 보면 “소속이 삼성블루윙즈이고 키가 170 센티미터 이상인 조건을 가진 선수들의 자료를 조회”하는 것이 되는 것이다.
SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키 |
[실행결과]
(45개 행이 영향을 받음)
[예제] “소속이 삼성블루윙즈이거나 전남드래곤즈”인 조건을 SQL 비교 연산자로, “포지션이 미드필더(MF)”인 조건을 비교 연산자로 비교한 결과를 논리 연산자로 묶어서 처리한다.
SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키 FROM PLAYER WHERE TEAM_ID IN ('K02','K07') AND POSITION = 'MF'; |
[실행결과]
(40개 행이 영향을 받음)
[예제] 요구 사항을 하나씩 하나씩 AND, OR 같은 논리 연산자를 사용하여 DBMS가 이해할 수 있는 SQL 형식으로 질문을 변경한다. 요구 사항을 순서대로 논리적인 조건을 적용한다.
------------------------------------------------------------------
소속팀이 삼성블루윙즈이거나 전남드래곤즈에 소속된 선수들이어야 하고,
포지션이 미드필더(MF:Midfielder)이어야 한다.
키는 170 센티미터 이상이고 180 이하여야 한다.
1) 소속팀이 삼성블루윙즈 OR 소속팀이 전남드래곤즈
2) AND 포지션이 미드필더
3) AND 키는 170 센티미터 이상
4) AND 키는 180 센티미터 이하
------------------------------------------------------------------
SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키 |
책에 설명대로 괄호가 누락됨으로서 OR 논리 연산자보다 AND 논리 연산자를 먼저 실행하기 때문에 잘못된 결과를 나타낸 것입니다.
[실행결과]
(66개 행이 영향을 받음)
[예제] 잘못된 결과를 보여 준 SQL 문장을 괄호를 사용하여 다시 적용한다.
SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키 |
[실행결과]
(33개 행이 영향을 받음)
[예제] IN (list)와 BETWEEN a AND b 연산자를 활용하여 같은 결과를 출력하는 SQL 문장을 작성한다. 두개의 SQL 문장은 DBMS 내부적으로 같은 프로세스를 거쳐 수행되므로 당연히 실행 결과도 같다.
SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키 |
[실행결과]
(33개 행이 영향을 받음)