-
[Oracle] WHERE 절을 이용한 조건 검색SQL 2022. 4. 18. 14:30
22/04/14 강의 실습 내용
WHERE 절
where 절을 이용하면 테이블에 저장된 데이터 중에서 원하는 데이터만 선택적으로 검색할 수 있다.
문자와 날짜 타입의 상수 값은 작은 따옴표(' ')로 묶어서 표현하고 숫자는 그대로 사용한다. 상수 값에서 영문자는 대소문자를 구별한다.
Q. 학생 테이블에서 1학년 학생만 검색하여 학번, 이름, 학과 번호를 출력하라.
select studno, name, deptno from student where grade=1;
* 비교 연산자를 사용한 조건 검색
비교 연산자는 where 절에서 숫자, 문자, 날짜의 크기나 순서를 비교하는 연산자다.
연산자 의미 = 같다 !=, <> 같지 않다 > 크다 >= 크거나 같다 < 작다 <= 작거나 같다 Q. 학생 테이블에서 몸무게가 70kg 이하인 학생만 검색하여 학번, 이름, 학년, 학과 번호, 몸무게를 출력해라.
select studno,name,grade,deptno,weight from student where weight <= 70;
조건에 맞게 잘 검색되었다.
* 논리 연산자를 이용한 조건 검색
연산자 의미 AND 모든 조건이 참일 때, 참 값을 반환 OR 모든 조건 중에서 하나가 참일 때, 참 값을 반환 NOT 조건과 반대되는 결과를 반환 Q. 학생 테이블에서 1학년이면서 몸무게가 70kg 이상인 학생만 검색하여 이름, 학년, 몸무게, 학과 번호를 출력해라.
select studno,name,grade,deptno,weight from student where grade=1 and weight <=70;
조건에 맞게 잘 출력되었다.
* SQL 연산자를 이용한 조건 검색
연산자 의미 BETWEEN a AND b a와 b 사이의 값, a, b도 포함 IN(a,b,c,...,n) a,b,c,...,n 중의 하나와 일치하면 참 LIKE 문자 패턴과 부분적으로 일치(%, _)하면 참 IS NULL NULL이면 참 Q. BETWEEN 연산자를 이용하여 몸무게가 50kg에서 70kg 사이인 학생의 학번, 이름, 몸무게를 출력해라.
select studno,name,weight from student where weight between 50 and 70;
몸무게가 50kg 이상 70kg 이하인 학생들의 데이터가 잘 출력되었다.
Q. IN 연산자를 이용하여 102번 학과와 201번 학과 학생의 이름, 학년, 학과 번호를 출력해라.
select name,grade,deptno from student where deptno in (102,201);
조건에 맞게 잘 출력되었다.
Q. LIKE 연산자를 이용하여 성이 '김' 씨인 학생의 이름, 학년, 학과 번호를 출력해라.
select name,grade,deptno from student where name like '김%';
이름의 길이와 상관없이 성이 '김' 씨인 학생을 모두 검색하였다.
패턴 와일드 문자에는 %를 포함한 두 가지가 있다.
- %: 길이와 상관없이 일치하면 참 (matching with any number of any character)
- _(언더바): 개수 당 한 글자가 일치하면 참 (matching with any single character)
%와 _는 앞, 뒤, 양옆 모두 가능하다.
Q. 학생 테이블에서 이름이 3글자고, 중간 글자가 '진'인 학생의 이름, 학년, 학과 번호를 출력해라.
select name,grade,deptno from student where name like '_진_';
* ESCAPE 옵션
escape 옵션은 like 연산자에서 사용하는 와일드 문자(%,_)자체를 포함하는 문자열을 검색할 때, 와일드 문자를 일반 문자처럼 취급하기 위한 옵션이다.
Q. 부서 테이블에서 부서 이름 중에 '경영_'으로 시작하는 부서의 이름을 출력해라.
실습을 위해 임의로 '경영_대학' 행을 생성하자.
insert into department(deptno,dname) values ('500', '경영_대학');경영과 _(언더바) 사이에 |(백 슬래시)를 넣고 escape '|' 옵션을 추가한 뒤 select문을 실행해보자.
select dname from department where dname like '경영\_%' escape '\';
와일드 문자인 _(언더바)를 일반 문자로 취급하여 '경영_'로 시작하는 부서 이름이 잘 출력되었다!
escape 옵션을 하지 않았다면, 언더바를 와일드 문자로 인식해서 '경영으로 시작하는 세 글자'를 출력했을 것이다.
* NULL 연산자
- IS NULL: 콜롬 값 중에서 null을 포함하는 행을 검색
- IS NOT NULL: null이 아닌 행을 검색할 경우
Q. 교수 테이블에서 보직수당이 없는 교수의 이름, 직급, 보직수당을 출력해라.
select name, position, comm from professor where comm is null;
Q. 교수 테이블에서 보직수당을 받고 있는 교수의 이름과 급여를 출력해라.
select name, sal from professor where comm is not null and comm >0;
이처럼 null 연산자를 이용한 조건 검색을 할 때는 '='이 아닌 'is'을 사용해야 하는 것에 유의해야 한다. '='을 쓰면 'null' 문자열이 있는지를 검색하기 때문에 원하는 결과가 나오지 않는다.
* 산술식에서의 NULL 처리
null에 산술식이나 함수를 적용하면 연산 결과도 null이 나온다.
Q. 교수 연봉을 구하라.(연봉=sal+comm)*12)
select name, sal, comm, (sal+comm)*12 "연봉" from professor;
이렇게 되면 comm 값이 null인 교수는 연봉도 null이 되어 값이 출력되지 않는다. 하지만 우리는 보직수당이 없는 교수의 연봉도 구하고 싶다. 이럴 때는 nvl를 사용해보자!
select name, sal, comm, (sal+nvl(comm,0))*12 "연봉" from professor;
nvl은 null value이다. null이 아니면 주어진 값을 쓰고, null이면 명령문에 설정한 값을 쓰라는 의미다. 위 명령문에서는 nvl(comm,0)인데, null이 아니면 comm 값을 넣고 null이면 0을 넣고 연봉을 계산하라는 뜻이다. 예시로 이재우의 경우를 보면, comm이 null이므로 연봉은 (320+0)*12로 계산되어 3840이 출력된다.
오늘은 where절을 이용한 조건 검색을 실습해보았다. 다음에는 집합 연산자에 대해 블로깅할 예정이다.
'SQL' 카테고리의 다른 글
[BigQuery] 다면적인 축을 사용해 데이터 집약하기 (0) 2022.05.06 [BigQuery] 시계열 기반으로 데이터 집계하기 (0) 2022.05.06 [Oracle] SELECT 명령문을 사용하여 다양한 방법으로 데이터 출력하기 (0) 2022.04.15 [Oracle] 테이블에 데이터를 잘못 삭제 또는 잘못 입력했을 때! (0) 2022.04.14 [Oracle] SQL Delveloper를 이용해 테이블에 데이터 삽입하기 (0) 2022.04.01