LIKE
LIKE : 패턴과 일치하는 데이터를 검색
% : 0개 이상의 문자를 나타냄.
_ : 한 문자를 나타냄.
s가 처음 , 중간 , 끝에 오는 이름을 검색 /* % 사이기 때문에 */
SELECT * FROM emp WHERE ename LIKE '%S%';
NOT을 사용하여 부정
SELECT * FROM emp WHERE ename NOT LIKE '%S%';
입사일이 22로 끝나는 사원 정보 구하기
SELECT ename,hiredate FROM emp WHERE hiredate LIKE '%22';
NOT을 사용하여 부정
SELECT ename,hiredate FROM emp WHERE hiredate NOT LIKE '%22';
FOR 다음에 꼭 한 글자
SELECT * FROM emp WHERE ename LIKE 'FOR_';
한 글자 다음의 M, M다음에 없거나 여러개
SELECT * FROM emp WHERE ename LIKE '_M%';
NULL조건 사용
NULL 조건 사용 (null 앞에 IS를 쓴다 마치 숙어처럼)
SELECT * FROM emp WHERE comm IS null; -- com = null은 불가
SELECT * FROM emp WHERE comm IS NOT null--com != null은 불가
AND,OR,NOT논리연산자
논리연산자(AND,OR,NOT),를 사용하여 주건 정의
SELECT empno,ename,job,sal FROM emp
WHERE sal >= 2000 AND job LIKE '%MAN%';
SELECT empno,ename,job sal FROM emp
WHERE sal >=2000 OR job LIKE '%MAN%';
SELECT ename,job FROM emp WHERE job NOT IN('CLERK','SALESMAN');
실습문제
[실습문제]
1.81년 05월 01일과 81년 12월 03일 사이에 입사한 사원의 이름,급여,입사일을 출력하시오.
SELECT ename,sal,hiredate FROM emp WHERE hiredate BETWEEN '81/05/01' AND '81/12/03';
2.사원번호가 7566,7782,7934인 사원을 제외한 사람들의 사원번호, 이름,월급을 출력하시오.
SELECT empno,ename,sal FROM emp WHERE empno NOT IN('7566','7782','7934');
3.급여가 $2,000와 $5,000 사이고 부서번호가 10또는 30인 사원의 이름과 급여,부서번호를 출력하시오
SELECT ename,sal,deptno FROM (emp WHERE sal BETWEEN 2000 AND 5000) AND deptno IN(10,30);
4.업무가 SALESMAN 또는 MANAGER 이면서 급여가 $1,600, $2,975,$2,850이 아닌 모든 사원의 이름,업무 및 급여를 표시하시오.
SELECT ename,job,sal FROM emp WHERE job IN('SALESMAN','MANAGER') AND sal NOT IN (1600,2975,2850);
ORDER BY 절
ORDER BY 절 : 정렬 (WHERE 절 다음에 오는 절)
ASC(오름차순), DESC(내림차순)
오름차순 정렬
SELECT * FROM emp ORDER BY sal; --ASC가 default 값이다.
SELECT * FROM emp ORDER BY sal ASC;
내림차순 정렬
SELECT * FROM emp ORDER BY sal DESC;
1차 정렬에서 중복값이 있을 경우 2차 정렬 수행
SELECT * FROM emp ORDER BY sal DESC, ename DESC; --sal로 내림차순을 한 뒤에 sal기준을 해치지 않는 선에서 ename을 다시 내림차순
날짜 정렬
SELECT ename,job,deptno,hiredate FROM emp
ORDER BY hiredate DESC;
열 ALIAS 기준으로 정렬
SELECT empno,ename,sal*12 annsal FROM emp
ORDER BY annsal;
열의 숫자 위치를 사용하여 정렬
SELECT ename,job,deptno,hiredate FROM emp
ORDER BY 3; --deptno가 3번째이므로 deptno를 기준으로 정렬했다.(JAVA와 다르게 시작이 0이 아닌 1부터 시작한다)
컬럼명을 명시하지 않을 경우 테이블에 생성된 순서대로 열 숫자 위치를 부여한다.
SELECT * FROM emp ORDER BY 2; --ENAME 기준으로 정렬
NULL값을 갖고 있는 컬럼을 정렬할 때
NULLS FIRST 또는 NULLS LAST 키워드를 사용하여 반환된 행 중
NULL값을 포함하는 행이 정렬 순서상 맨 처음에 나타나거나 마지막에 나타나도록
지정할 수 있다.
SELECT * FROM emp ORDER BY comm; --오름차순 정렬시 defalut값으로 null값은 맨 아래로 위치시킨다. NULLS LAST랑은 조금 다른 면이 있다는 것 같지만 모르겠음.
SELECT * FROM emp ORDER BY comm NULLS FIRST;
SELECT * FROM emp ORDER BY comm NULLS LAST;
SELECT * FROM emp
ORDER BY comm NULLS LAST , ename DESC; -- comm을 정렬하고 널값이 뒤로가게 정렬한 뒤 ename을 정렬
SELECT * FROM emp
ORDER BY comm DESC NULLS FIRST;
실습문제
[실습문제]
1.EMP테이블에서 사원번호,사원이름 입사일을 출력하는데 입사일이 빠른 사람순으로 정렬하시오.
SELECT empno,ename,hiredate FROM emp
ORDER BY hiredate ASC;
2.사원이름, 급여,연봉을 구하고 연봉이 많은 순으로 정렬하시오.
SELECT ename,sal,sal*12 annsal FROM emp
ORDER BY annsal DESC;
3.10번 또는 20번 부서에서 근무하고 있는 사원의 이름과 부서번호를 출력하는데 이름을 영문자순으로 표시하시오.
SELECT ename,deptno FROM emp
WHERE deptno IN(10,20) ORDER BY ename ASC ;
4.커미션 계약을 맺은 모든 사원의 이름,급여,커미션을 출력하는데 커미션을 기준으로 내림차순 정렬하시오.
SELECT ename,sal,comm FROM emp
WHERE comm IS NOT NULL ORDER BY comm DESC ;