Itwill 학습내용 정리/1. SQL

1.2 Where 절과 Order by절 사용법 + 기타 비교 연산자

cannonvirus 2019. 4. 17. 21:31

 


※ EMP 테이블 구조


 # 문제 8. 커미션이 300인 사원의 이름, 커미션, 직업을 출력하시오.

 

select ename, comm, job

  from emp

  where comm = 300;

- 혹시나 파이썬이나 기타 언어를 썼다면 comm == 300 이라 쓸 수 있으니 주의!!

 # 문제 9. 이름이 SCOTT인 사원의 이름과 월급을 출력하시오.

 

select ename, sal

  from emp

  where ename = 'SCOTT';

- 문자와 날짜는 양쪽에 싱글 쿼테이션('')을 사용해야 한다. 

- 데이터가 대문자로 저장되어 있으면 대문자로 검색해야 한다. ename = 'scott' 은 검색이 안됨

 # 문제 10. 1981년 11월 17일에 입사한 사원의 이름과 입사일을 출력하시오.

 

select ename, hiredate

  from emp

  where hiredate = '81/11/17';

 

select ename, hiredate

  from emp

  where hiredate = to_date('81/11/17','RR/MM/DD');

- 첫 번째 쿼리는 sqlgate에서 에러가 날 수 있다. 왜냐하면 날짜 형식이 sqlplus와 다르기 때문이다.

- 따라서 현재 세션의 날짜 형식을 확인해야 하는 데 쿼리는 다음과 같이 입력하면 된다.

 

select *

  from nls_session_parameters;

 

다음과 같이 출력된다.

 # 문제 11. 월급이 1500 이상인 사원들의 이름과 월급을 출력하시오.

 

select ename, sal

  from emp

  where sal >= 1500;

 

※ 기타 비교 연산자

between A and B 두 값 사이(경계값 포함!!!!)
in(set) 값 리스트 중 일치하는 값을 검색
like 일치하는 문자 패턴을 검색
is null null 값인지 여부를 판단

 

★ between ~ and ~

 # 문제 12. 월급이 1000에서 3000 사이인 사원들의 이름과 월급을 출력하시오.

 

select ename, sal

  from emp

  where sal between 1000 and 3000;

 - " between 낮은 값 and 높은 값 " 형식을 유지하라!!! // 만약 높은 값과 낮은 값의 위치가 바뀐다면 에러가 뜰 것이다.

 

★ Like 연산자

 # 문제 13. 이름의 첫 글자가 S로 시작하는 사원들의 이름을 출력하시오.

 

select ename

  from emp

  where ename like 'S%';

 - %가 특수문자가 아닌 wild card로 인식하려면 연산자가 반드시 = 이 아닌 like를 사용해야 한다.

 # 문제 14. 이름의 세번째 철자가 L인 사원들의 이름을 출력하시오.

 

select ename

  from emp

  where ename like '__L%';

 - " _ " 은 한자리의 wild card를 의미한다. 의미한다. 

 # 문제 15. emp 테이블에 A%B라는 이름의 사원이 있다고 가정해보자. 이 때 두번 째 철자가 %인 사원의 이름을 출력하시오.

 

select ename

  from emp

  where ename like '_%%';

 

select ename

  from emp

  where ename like '_m%%' escape 'm';

 - 첫번 째 쿼리를 실행 할 경우에는 emp이름의 모든 사원이 출력될 것이다. 

 - 두번 째 쿼리를 실행하면 m 바로 다음에 나오는 %를 wild card가 아닌 특수문자 %로 인식하라 쿼리인다. 따라서 A%B의 이름만 출력할 수 있게된다.

 # 문제 16. 이름의 두번 째 철자도 %이고 세번 째 철자도 %인 사원들의 이름을 출력하시오.

 

select ename

  from emp

  where ename like '_m%m%%' escape 'm';

 

★ In 연산자 & Not In

 # 문제 17. 사원번호가 7788, 7902, 7369 번인 사원의 사원번호와 이름을 출력하시오.

 

select empno, ename

  from emp

  where empno in (7788,7902,7369);

 # 문제 18. 직업이 SALESMAN, ANALYST인 사원들의 이름과 직업을 출력하시오. (항상 문자는 대소문자 구분하도록!!)

 

select ename, job

  from emp

  where job in ('SALESMAN','ANALYST');

 # 문제 19. 부서번호가 10, 20번이 아닌 사원들의 이름과 부서번호를 출력하시오.

 

select ename, deptno

  from emp

  where deptno not in (10,20);

 

★ Is Null 연산자

 # 문제 20. 커미션이 null인 사원들의 이름과 커미션을 출력하시오.

 

select ename, comm

  from emp

  where comm is null;

 - 주의! comm = null 은 안된다. // comm = 'null' 이것은 null이란 값을 가지는 comm을 찾는 것이다. 

 

※ 간단한 논리연산자

True and True True and False True and Null
True False

Null

(만약 Null이 True 라면 True 일 것이다. 그 반대라면 결과는 False일 것이다.

두가지 경우에 대해 일치 하지 않으니

우리는 그 결과를 알 수 없다.)

True or True True or False True or Null
True True

True

(만약 Null이 True 라면 True 일 것이다. 그 반대라면 결과도 True일 것이다.

두가지 경우에 대해 일치하니 결과를

True 라고 알 수 있다.)

False and Null False or Null

False

(위의 논리와 동일하다. Null 값이 무엇이냐에

관계 없이 이 값은 False의 결과를 도출한다.)

Null

(Null 값이 어떤 값을 가지느냐에 따라서 결과가

달라지므로 Null의 결과를 도출한다.)

 # 문제 21. 직업이 SALESMAN 이고 월급이 1000 이상인 사람들의 이름과 월급과 직업을 출력하시오.

 

select ename, sal, job

  from emp

  where job = 'SALESMAN' and SAL >= 1000;

 

※ 알아두면 좋은 연산자의 우선순위

1. 산술연산자 2. 연결연산자 3. 비교연산자
4. is null, like, in 5. between 6. 같지 않음
7. Not논리 8. And 논리 9. Or 논리

 # 문제 22. 직업이 SALESMAN 이거나 CLERK 이고 월급이 1000 이상인 사원들의 이름과 월급과 직업을 출력하시오.

 

select ename, sal, job

  from emp

  where job in ('SALESMAN','CLERK') and sal >= 1000;

 

select ename, sal, job

  from emp

  where job = 'SALESMAN' or job = 'CLERK' and sal >= 1000;

 - 첫번 째 쿼리가 옳다. 두번 째 쿼리는 SALESMAN 이거나 CLERK이면서 월급이 1000이상인 사람을 출력하는 것이다. 그 이유는 or 논리 연산자가 가장 마지막에 정산되기 때문이다.