본 포스트는 개인 스터디에 대한 정리 및 기록의 용도로써, 오개념이 존재 할 수 있습니다. 글은 상시 수정되며, 지적사항에 대해서 검토 후 수정하겠습니다.
본 포스트는 한국데이터진흥원 발간, SQL 전문가 가이드 2013Edition을 참고하였습니다.
지금까지 SELECT문을 살펴 보았다. 이제는 WHERE을 사용해서 조건을 달아 추출데이터의 범위를 좁혀보자. 그러기 위해서는 다양한 연산자의 종류를 알아봐야 한다. 비교연산자와 SQL연산자 논리 연산자, 부정비교연산자, 부정SQL연산자가 존재한다. 각 연산자들은 하나씩 개별적으로 쓰이는게 아니라, 같이도 쓰고, 서로의 역할을 대신하기도 한다. 오늘 몇시에 잘까 의문이다. 이번 포스트만 쓰고 자야겠다.
- 연산자의 종류와 그 의미
구분 | 연산자 | 연산자의 의미 |
비교 연산자 | =, >, >=, <, <= | 모를 수 없을거라 생각한다. |
SQL 연산자 | Colum BETWEEN (a) AND (b) | a와 b 사이의 값들만 |
Colum IN ('a', 'b') | 'a','b'중 어느 하나라도 일치 // or | |
Colum LIKE '비교문자열' | 비교문자열과 일치한것 // %, _ 사용 | |
Colum IS NULL | NULL 인 것 |
논리 연산자 | AND | 모를 수 없을거라 생각한다. |
OR | ||
NOT |
부정 비교 연산자 | != , ^=, <> | 다 같은 의미의 같지 않다. |
- 조건식에 연산자를 이용하여 원하는 튜플 추출하기
- 비교연산자
PLAYER 테이블에서, 'K02' 또는 'K07' 팀에 소속된 선수 중에서 포지션이 'MF"이고 키가 170에서 180 사이인 선수를 찾고 싶을때 아래와 같은 조건식을 사용하면 된다.
SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE (TEAM_ID = 'K02' OR TEAM_ID = 'K07') AND
POSITION = 'MF' AND
HEIGHT >= 170 AND HEIGHT <= 180;
이제 어떤 생각이 스쳐 지나갈 것이다. HEIGHT >= 170 AND HEIGHT <= 180 에 대하여 Between 으로 바꿀 수 있지 않을까? 맞다. 이렇게 가독성이 떨어지니까 Between을 사용한다.
SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE (TEAM_ID = 'K02' OR TEAM_ID = 'K07') AND
POSITION = 'MF' AND
Height BETWEEN 170 and 180;
똑같은 결과가 실행 될것이다. SQL 비교연산자들 대부분이 비교 연산자를 사용해서 표현할수 있는데 이문장을 짧게 만들어주고, 성능적인 측면에서도 이점을 준다. SQL비교연산자들을 계속해서 알아보자.
- IN 연산자
이번에는 IN 연산자를 사용하여 브라질 국적 MF 선수 또는 러시아 국적 FW 선수들을 찾아보자.
SELECT PLAYER_NAME, TEAM_ID, POSITION, NATION
FROM PLAYER
WHERE(POSITION, NATION) IN (('MF','브라질'), ('FW', '러시아'));
-- (POSITION, NATION) = ('MF','브라질') OR (POSITION, NATION) = ('FW','러시아') 와 똑같다.
뭔가 점점 원하는 데이터들을 얻을 수 있는 것 같다.
- LIKE 연산자
이번에는 LIKE 연산자를 사용하여 특정 성을 가진 선수들을 찾아보자
SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE PLAYER_NAME LIKE '장%';
-- 내이름을 찾아보자
SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE PLAYER_NAME LIKE '김호준';
LIKE 에는 %와 _를 사용할 수 있다. 장_ 은 장으로 시작하는 두글자 문자열을 찾는거고, 장%은 장으로 시작하는 모든 문자열을 찾는다.
그냥 LIKE '이름' 을 사용하면 그 값만을 찾는다. IN과 비슷한 역할을 하기도 한다.
- IS NULL 연산자
NULL 값을 찾을때는 조건 = NULL 이런식으로 찾으면 항상 False의 값을 가지기 때문에 IS NULL , IS NOT NULL을 사용해야 올바른 값을 얻을 수 있으니 주의 해야한다.
포지션이 없는 선수를 찾고 싶을때는 POSITION = NULL 이 아니라 POSITION IS NULL 로 조건을 줘야한다.
SELECT PLAYER_NAME 선수이름, POSITION 포지션, TEAM_ID
FROM PLAYER
WHERE POSITION IS NULL;
-- 원하는 값을 얻을 수 없다.
SELECT PLAYER_NAME 선수이름, POSITION 포지션, TEAM_ID
FROM PLAYER
WHERE POSITION = NULL;
이번 포스트까지 SELECT문을 사용하기 위한 기초단계를 끝냈다고 생각한다. 다음부터 공부해볼 내장 함수에서는 배운것들을 응용해서 더 세세하게 원하는 데이터들을 추출해보는 시간을 가져보겠다.
'• 데이터베이스(DB) > __SQL__' 카테고리의 다른 글
#7 [DML] MySQL의 다중행 함수중 GROUP BY, HAVING, ORDER BY, LIMIT 사용하기 (0) | 2021.05.31 |
---|---|
#6 [DML] MySQL에서 내장함수 중 단일행 함수 사용하기, CASE절이란? (0) | 2021.05.29 |
#4 [DML] MySQL에서 SELECT 사용해보기 (0) | 2021.05.25 |
#3[DML] MySQL 에서 INSERT, DELETE, UPDATE 문을 사용해보기, sql_Safe_Updates모드 (0) | 2021.05.25 |
#2[DDL]_ MySQL 을 이용하여 제약조건 사용 및 DROP TABLE, ALTER TABLE 정리 (0) | 2021.05.20 |