본문 바로가기
DataBase

[Oracle]SELECT문-2:WHERE절을 이용한 조건 검색

by 바까 2020. 4. 8.
반응형

SELECT문에서 WHERE절을 이용하면 원하는 조건에 해당하는 정보만을 추출할 수 있다.

SELECT *(전체) | 컬럼이름

FROM 테이블이름

WHERE 조건;

 


<비교연산자> 사용하여 조건 검색하기

= 같다.
 >  보다 크다.
보다 작다.
>= 크거나 같다.
<= 작거나 같다.
<>,!=,^= 같지않다.

예1) 테이블에서 급여가 1500이상인 사원만을 출력해야한다면

비교연산자 '>=, <=' 를 사용하여 정보를 추출할 수 있다. 

-- 급여(salary)가 1500 이상인 사원 출력하기

SELECT *
FROM employee
WHERE salary >= 1500;

SELECT *
FROM employee
WHERE 1500 <= salary;

결과

모든 콜럼에서 SALARY가 1500이상인 정보만을 추출한다.

예2) 부서 번호(DNO)가 10번인 사원을 출력하고 싶다면 비교연산자 '='을 사용하여 정보를 추출한다.

-- 10번 부서 소속 사원 출력하기

SELECT *
FROM employee
WHERE dno = 10;

결과

/* 참고로 콜럼 순서는 처음 테이블을 생성했을 때 순서이다. 임의로 바꿀 수 없고 seclet절에서 콜럼명을 지저해주거나 해야한다. */


문자데이터/날짜 데이터 조회하기

숫자 데이터를 비교 연산을 할 경우에는 그대로 사용했지만,

데이터 타입이 사용되는데 문자와 날짜 타입의 상수 값은 반드시 작은 따옴표(' ')로 묶어서 표현해야하고,

대소문자를 구분한다.

예를 들어 이름이 SCOTT인 사원을 출력하고 싶다면  처음 정보를 입력할 때, 대문자로 입력했기 때문에 대문자로 SCOTT을 검색해야한다.

-- 이름이 scott인 사원 출력하기
SELECT *
FROM employee
WHERE ename='SCOTT'; 

결과

하지만 만약 소문자로 scott을 검색한다면

SELECT *
FROM employee
WHERE ename='scott';

결과

소문자로 된 scott이라는 문자열을 찾지 못해 검색이 되지않는다.

*

문자데이터는 소문자 대문자 구분 뿐만아니라 작은따옴표(')를 써줘야한다.

만약 문자데이터임에도 불구하고 작은따옴표를 사용하지 않았다면

SELECT *
FROM employee
WHERE ename=SCOTT

결과

문자열 오류가 발생하며,

작은따옴표(')가 아니라 큰따옴표(")를 사용해도 

SELECT *
FROM employee
WHERE ename="SCOTT"; 

문자열 인식을 못해서 같은 오류가 발생한다.

*

Oracle은 날짜타입도 문자열로 인식하기 때문에 날짜에 작은따옴표를 씌어줘야한다. 

예)

-- 날짜데이터 조회/ 입사일이 '1981/01/01'이전에 입사한 사원을 출력하기
SELECT *
FROM employee
WHERE hiredate <= '1981/01/01';

<논리연산자> 사용하여 조건 검색하기

AND 두 가지 조건을 모두 만족해야만 검색할 수 있다.
OR 두 가지 조건 중에서 한 가지만 만족하더라도 검색할 수 있다.
NOT

조건에 만족하지 못하는 것만 검색.

참은 거짓으로, 거짓은 참으로 결과를 구한다.

즉, 반대되는 논리값을 구하는 연산자이며 적은 조건에 여집합에 해당되는 결과만을 나타낸다.

 

예1) 'AND'사용하기

--  부서 번호가 10이고 직급이 'MANAGER'인 사원만 출력
SELECT *
FROM employee
WHERE dno=10 AND job='MANAGER';

결과

 

예2) 'OR'사용하기

--부서 번호가 10이거나 직급이 'manager'인 사원만 출력하기
SELECT *
FROM employee
WHERE dno=10 OR job='MANAGER';

결과

 

예3) 조건을 제외한 나머지 정보만을 결과 값으로 가지고싶다면 'NOT'을 사용한다.

-- 10번 부서에 소속된 사원만 제외하고 나머지 사원의 정보출력(1)
SELECT *
FROM employee
WHERE NOT dno=10; 

결과

NOT은 연산자의 왼쪽에 적어야한다.

또한,  NOT 뿐만이 아니라 비교 연산자를 사용할 수도 있다.

-- 10번 부서에 소속된 사원만 제외하고 나머지 사원의 정보출력(2)
SELECT *
FROM employee
WHERE dno=20 or dno=30 or dno=40;
-- 10번 부서에 소속된 사원만 제외하고 나머지 사원의 정보출력(3)
SELECT *
FROM employee
WHERE dno!=10; 
-- 10번 부서에 소속된 사원만 제외하고 나머지 사원의 정보출력(4)
SELECT *
FROM employee
WHERE dno<>10; 
-- 10번 부서에 소속된 사원만 제외하고 나머지 사원의 정보출력(4)
SELECT *
FROM employee
WHERE dno^=10; 

<BETWEEN> 연산자를 사용한 조건 검색하기

특정 컬럼의 데이터 값이 하한값(A)과 상한값(B) 사이에 포함되는 로우를 검색하기 위한 연산자.

컬럼이름 BETWEEN A AND 

 

예1) 급여가 1000에서 1500사이인 사원 정보를 출력하고 싶다면 비교연산자와 논리연산자를 사용하여 정보를 추출할 수 있다. 

--급여가 1000에서 1500사이인 사원 출력하기(1)
SELECT *
FROM employee
WHERE salary >=1000  and salary<= 1500;

 

하지만 더 간편하게 BETWEEN연산자를 사용할 수 있다.

SELECT *
FROM employee
WHERE salary BETWEEN 1000 AND 1500;

 

예2) AND 사이에 값이 들어가지 않는 정보를 출력하고 싶다면 

비교연산자 OR을 사용할 수 있고, 

-- 급여가 1000미만이거나 1500초과인 사원 출력하기(1)

SELECT *
FROM employee
WHERE salary < 1000 OR salary > 1500;

BETWEEN연산자를 사용하고싶을땐 NOT을 함께 써주면된다.

SELECT *
FROM employee
WHERE salary NOT BETWEEN 1000 AND 1500; 

<IN>연산자를 이용한 조건 검색

특정 컬럼의 값이 A,B,C 중에 하나라도 일치하면 참이되는 연산자

컬럼이름 IN(A,B,C);

 

예) 비교연산자, 논리연산자를 사용하기

--커미션이 300이거나 500이거나 1400인 사원 출력하기
SELECT *
FROM employee
WHERE commision = 300 OR commision = 500 OR commision = 1400;

IN 연산자를 사용하면 간편하다

--커미션이 300이거나 500이거나 1400인 사원 출력하기(2)
SELECT *
FROM employee
WHERE commision IN(300,500,1400);

/*조건이 다수가 아니여도 정보추출가능.*/

SELECT *
FROM employee
WHERE commision IN(300);

<LIKE >연산자를 이용한 조건 검색하기

컬럼에 저장된 문자 상수 중에서 LIKE 연산자에서 지정한 문자 패턴과 부분적으로 일치하면 참이되는 연산자.

컬럼이름 LIKE 문자패턴

LIKE연산자는 '와일드카드'를 사용하여 조건을 검색하며 와일드카드란

운영 체제 명령어에서 파일의 이름을 지정할 때에, 

여러 파일을 한꺼번에 지정할 목적으로 사용하는 기호이다.

 

*Oracle의 와일드카드*

%: 문자가 없거나 하나 이상의 문자가 어떤 값이 와도 상관없다.

_ : 하나의 문자가 어떤 값이 와도 상관 없다.

 

예1) 이름이 F로 시작하는 사원 출력하기

SELECT *
FROM employee
WHERE ename LIKE 'F%'; 

예2) 이름이 'M'이 포함되는 사원 출력하기

SELECT *
FROM employee
WHERE ename LIKE '%M%';

예3) 이름이 'N'으로 끝나는 사원 출력하기

SELECT *
FROM employee
WHERE ename LIKE '%N';

예4) 이름의 두번째 글자가 A인 사원출력하기, 이름의 세번째 글자가 A인 사원출력하기

SELECT *
FROM employee
WHERE ename LIKE '_A%';


SELECT *
FROM employee
WHERE ename LIKE '__A%';

_는 한글자만을 의미하므로 순서를 지정할 때 사용할 수 있다.


 

반응형

댓글