The Debugging Chronicles : "코드의 미학"

05 더 정확하고 다양하게 결과를 출력하는 WHERE절과 연산자 본문

DBMS/Do it! 오라클로 배우는 데이터 베이스 입문

05 더 정확하고 다양하게 결과를 출력하는 WHERE절과 연산자

sweetseonah1004 2024. 7. 28. 23:18

05-1 필요한 데이터만 쏙 출력하는 WHERE 절

WHERE 

SELECT문으로 데이터를 조회할 때 특정 조건을 기준으로 원하는 행을 출력하는 사용한다.

연산자를 함께 사용한다면 더욱 세밀한 검색이 가능하다.

어떤 조건에 일치하는 행만 골라내어 조회하는데 사용한다.

각 행에 조건식을 대입하여 결과가 참인 경우만 출력한다.

SELECT *
   FROM EMP
  WHERE DEPTNO = 30;

 

SELECT[조회할열1이름], [열2이름], •••, [열N이름]
FROM [조회할테이블이름]
WHERE [조회할행을선별하기위한조건식]; 

05-2 여러개 조건식을 사용하는 AND, OR 연산자

AND : 여러 개의 조건식이 모두 참이었을 때 true를 반환한다.

SELECT * FROM EMP
WHERE DEPTNO = 30
AND OJB =S'ALESMAN;'

 

OR : 여러 개의 조건식 중 하나라도 참이라면 true를 반환한다.

 

SELECT * 
FROM EMP
WHERE DEPTNO = 30 
RO OJB = C' LERK;'

 

where 절 조건식의 개수

 

WHERE절에사용할수있는조건식의개수는사 실상제한이없다고보아도무방합니다. 조건식을두개이상사 용할경우에도각조건식사이에AND또는OR연산자를추가 하여사용할수있습니다. 

 

실무에서 AND, OR 연산자

 

보통실무에서사용하는SELECT문은OR연산자보다AND연산자를많이사용하는경향이 있습니다. 이는다양한조건을한번에만족시키는데이터만을추출해야할때가많기때문입 니다. 

 

05-3 연산자 종류와 활용 방법 알아보기

산술 연산자

· +, -, *, / 를 사용하여 계산하는 연산자이다.

· WHERE절의 조건식 등에 사용된다.

SELECT *
      FROM EMP
WHERE SAL * 12 = 36000 ;

 

비교 연산자

SQL문을 작성할 때 자주 사용하는연산자로, 연산자의 앞 뒤에 있는 데이터 값을 비교하는데 사용한다.

· 대소 비교 연산자

초과, 미만, 이하 여부를 비교하는 연산자이다.

비교 대상인 데이터가 숫자가 아닌 문자열일 때도 사용할 수 있다.

연산자
사용법
설명
>
A > B
A 값이 B 값을 초과할 경우 true
>=
A >= B
A 값이 B 값을 이상일 경우 true
<
A < B
A 값이 B 값을 미만일 경우 true
<=
A <= B
A 값이 B 값을 이하일 경우 true

 

SELECT *
   FROM EMP
 WHERE ENAME >= 'F';  // 사원 이름의 첫 문자가 F와 같거나 뒤쪽인 것만 검색한다.

 

 

SELECT *
   FROM EMP
 WHERE ENAME <= 'FORZ';  // ENAME 열 값이 FORZ를 포함한 문자열보다 알파벳 순서로 앞에 있는 행을 출력하라


· 등가 비교 연산자

연산자 양쪽 항목이 같은 값인지 검사하는 연산자이다.

연산자
사용법
설명
=
A = B
A 값이 B값과 같을 경우 true, 다를 경우 false 반환
!=
A != B
A 값과 B값이 다를 경우 true, 같을 경우 false를 반환
<>
A <> B
^=
A ^= B
// !=
SELECT *
   FROM EMP
 WHERE SAL != 3000;

// <>
SELECT *
   FROM EMP
 WHERE SAL <> 3000;

// ^=
SELECT *
   FROM EMP
 WHERE SAL ^= 3000;

 

논리 부정 연산자

 

결과값을 반전시키는 연산자이다.

true는 false로, false는 true로 반전시킨다.

 

SELECT *
   FROM EMP
 WHERE NOT SAL = 3000;  // SAL이 3000이 아닌 것을 검색

 

 

IN 연산자

 

특정 열에 해당하는 조건을 여러 개 지정할 수 있다.

 

SELECT *
   FROM EMP
 WHERE JOB IN ('MANAGER', 'SALESMAN', 'CLERK'); // JOB이 MANAGER, SALESMAN, CLERK인 데이터 모두 검색

 

SELECT *
   FROM EMP
 WHERE JOB NOT IN ('MANAGER', 'SALESMAN', 'CLERK'); // JOB이 MANAGER, SALESMAN, CLERK가 아닌 데이터 모두 검색

 

BETWEEN A AND B 연산자

 

최소·최고 범위를 지정하여 범위 내에 값이 맞으면 true, 아니면 false 값을 반환하는 연산다이다.

A ~ B 사이값

 

SELECT *
   FROM EMP
 WHERE SAL BETWEEN 2000 AND 3000;  // SAL 값이 2000~3000 사이인 데이터 검색

 

LIKE 연산자와 와일드 카드

 

일부 문자열이 포함된 데이터를 조회할 때 사용한다.

와일드 카드 : 특정 문자 또는 문자열을 대체하거나 문자열 데이터의 패턴을 표기하는 특수 문자이다.

LIKE 연산자나 와일드 카드를 어떻게 사용하느냐에 따라 데이터를 조회하는 시간의 차이가 난다.

종류
의미
_
어떤 값이든 상관없이 한 개의 문자 데이터를 의미
%
길이와 상관없이(문자 없는 경우도 포함) 모든 문자 데이터를 의미
SELECT *
   FROM EMP
 WHERE ENAME LIKE 'S%';  // ENAME이 S로 시작되는 모든 데이터를 검색

 

· 와일드 카드 문자가 데이터 일부일 경우

ESCAPE절을 사용하여 _, %를 와일드 카드 기호가 아닌 데이터로서의 문자로 다루는 것이 가능하다.

실무에선 잘 사용하진 않는다.

 

// 예시) A_A
SELECT *
   FROM SOME_TABLE
 WHERE SOM_COLUM LIKE 'A\_A%' ESCAPE '\';
// A\_A%에서 \ 문자 바로 뒤에 있는 _는 와일드 카드 기호로서가 아닌 데이터에 포함된 문자로 인식하라는 의미이다.

 

IS NULL 연산자

 

· NULL의 의미

'현재 무슨 값인지 확정되지 않은 상태'이거나 '값 자체가 존재하지 않는 상태'이다.

의미
값이 존재하지 않음
통장을 개설한 적 없는 은행 고객의 계좌 번호
해당 사항 없음
미혼인 고객의 결혼기념일
노출할 수 없는 값
고객 비밀번호 찾기 같은 열람을 제한해야 하는 특정 개인 정보
확정되지 않은 값
미성년자의 출신 대학
SELECT *
   FROM EMP
 WHERE COMM = NULL; // COMM 값이 NULL인 값을 불러라

 

※ NULL은 산술 연산자와 비교 연산자로 비교해도 결과값이 NULL이 되기 때문에 WHERE절 연산값이 NULL이 되어버려

출력되는 데이터가 없다.

· IS NULL

해당 데이터의 지정 열 값이 NULL인지 아닌지 확인하는 연산자다.

연산의 결과값이 NULL 인 것을 확인하려면 IS NULL연산자를 사용해야한다.

 

SELECT *
   FROM EMP
 WHERE COMM IS NULL; // COMM 값이 NULL인 값을 불러라

 

AND 연산

피연산자 1 | 피연산자 2
true
false
NULL
true
true
false
Null
false
false
false
false
NULL
NULL
false
NULL

OR 연산

피연산자 1 | 피연산자 2
true
false
NULL
true
true
true
true
false
true
false
NULL
NULL
true
NULL
NULL
// OR 연산자와 IS NULL
SELECT *
   FROM EMP
 WHERE SAL > NULL
    OR COMM IS NULL;;

 

집합 연산자

SELECT문을 통해 데이터를 조회한 결과를 하나의 집합과 다룰 수 있도록 한다.

두 개 이상의 SELECT문의 결과 값을 연결할 때 사용한다.

UNION 연산자를 사용한다.

집합 연산자로 두 개의 SELECT문의 결과를 연결 할 때 각 SELECT문이 출력하려는 열 개수와 각 열의 자료형이 순서별로

일치해야 한다. (그렇지 않으면 실행 오류가 나타남)

종류
설명
UNION
연결된 SELECT문의 결과 값을 합집합으로 묶어준다. 결과 값의 중복은 제거된다.
UNION ALL
연결된 SELECT문의 결과 값을 합집합으로 묶어준다. 중복된 결과 값도 제거 없이 모두 출력된다.
MINUS
먼저 작성한 SELECT문의 결과 값에서 다음 SELECT문의 결과 값을 차집합 처리한다. 먼저 작성한 SELECT문 결과 값 중 다음 SELECT문에 존재하지 않는 데이터만 출력된다.
INTERSECT
먼저 작성한 SELECT문과 다음 SELECT문의 결과 값이 같은 데이터만 출력된다. 교집합과 같은 의미이다.
/ 연결하려는 SELECT문의 결과 값이 같을 경우 UNION과 UNION ALL
// UNION
SELECT EMPNO, ENAME, SAL, DEPTNO
  FROM EMP
 WHERE DEPTNO = 10
 UNION
SELECT EMPNO, ENAME, SAL, DEPTNO
 FROM EMP
 WHERE DEPTNO = 10;

// UNION ALL
SELECT EMPNO, ENAME, SAL, DEPTNO
  FROM EMP
 WHERE DEPTNO = 10
 UNION ALL
SELECT EMPNO, ENAME, SAL, DEPTNO
 FROM EMP
 WHERE DEPTNO = 10;
 

 

연산자 우선순위