on my way
Do it! 오라클로 배우는 DB 입문 : 05 더 정확하고 다양하게 결과를 출력하는 WHERE절과 연산자 + 실습 문제 본문
Do it! 오라클로 배우는 DB 입문 : 05 더 정확하고 다양하게 결과를 출력하는 WHERE절과 연산자 + 실습 문제
wingbeat 2024. 4. 1. 17:24
05-1 필요한 데이터만 쏙 출력하는 WHERE절
해당 조건이 만족(true)하는 행을 출력한다.
SELECT *
FROM EMP
WHERE deptno=30; --dept가 30인 데이터만 출력
05-2 여러 개 조건식을 사용하는 AND, OR 연산자
SELECT *
FROM EMP
WHERE deptno=30 AND job='SALESMAN' ;
SELECT *
FROM EMP
WHERE deptno=30 OR job!='CLERK' ;
열을 비교하는 문자열 데이터는 반드시 대소문자 정확하게 작성해야 한다.
틀리게 작성하면 invalid identifier 에러 발생할 수 있다.
SELECT * FROM EMP
WHERE deptno=30 AND empno=7499;
SELECT * FROM EMP
WHERE deptno=20 OR job='SALESMAN';
WHERE절 조건식의 개수
사실상 제한이 없다.
실무에서의 AND, OR 연산자
실무에선 AND를 많이 사용한다.
05-3 연산자 종류와 활용 방법 알아보기
산술 연산자
비교 연산자
숫자가 아니라 문자열에서도 비교 연산자를 사용할 수 있다.
ENAME 열 값의 첫 문자와 대문자 F를 비교했을 때 F보다 같거나 뒤인 문자열을 출력한다.
등가 비교 연산자
논리 부정 연산자
not은 산술 연산자보다 키워드 연산자에서 사용하는 경우가 많다.
산술 연산자에서는 !에서 사용
IN 연산자
특정 열 데이터 값만을 조회하고자 할 때 사용한다.
서브쿼리(쿼리 안의 쿼리. 하위로 또 다른 SQL들어갈 때)에 많이 사용한다.
OR로도 쓸 수 있지만, IN 연산자로 조건을 여러개 지정할 수 있다.
BETWEEN A AND B 연산자
-- 회계 부서의 직원명 출력
SELECT ename FROM EMP WHERE deptno=10;
-- 급여 1000이상인 직원 이름, 급여 출력
SELECT ename, sal FROM EMP WHERE sal>=1000;
-- 급여가 500이상, 1000이하 (500~1000)인 직원명, 급여 출력
SELECT ename, sal FROM EMP WHERE sal >= 500 and sal<=1000;
-- 위와 같은 코드
SELECT ename, sal FROM EMP WHERE sal between 500 and 1000;
-- 500보다 작거나 1000보다 큰
SELECT ename, sal FROM EMP WHERE sal not between 500 and 1000;
-- 부서코드가 10, 30인 직원명, 부서코드 출력
SELECT ename, deptno FROM EMP WHERE deptno=10 OR deptno=30;
SELECT ename, deptno FROM EMP WHERE deptno in (10, 30);
-- 10, 30이 아닌 것
SELECT ename, deptno FROM EMP WHERE deptno not in (10, 30);
LIKE 연산자와 와일드 카드
길이와 상관없이 일부 문자열이 포함된 데이터를 조회할 때 사용하는 기능
-- Like 검색
--대문자 S로 시작하는 데이터
SELECT * FROM emp WHERE ename LIKE 'S%';
SELECT * FROM emp WHERE ename LIKE '%S'; -- S로 끝
SELECT * FROM emp WHERE ename LIKE '%S%'; -- S 포함
-- 두번째가 L인 사원
SELECT * FROM emp WHERE ename LIKE '_L%';
SELECT * FROM emp WHERE ename LIKE 'SMITH_';
-- 사원 이름에 AM 포함
SELECT * FROM emp WHERE ename LIKE '%AM%';
SELECT * FROM emp WHERE ename NOT LIKE '%AM%'; --미포함
와일드 카드 문자가 데이터 일부일 경우
ESCAPE 절을 사용하면 와일드카드 기호가 아닌 데이터로서의 문자로 다루는 것이 가능해짐. (자주 사용 안 함)
IS NULL 연산자
0은 숫자 0이 존재한다는 뜻이다. NULL과 혼동되어서는 안됨
NULL은 산술연산자 = 로 비교가 안됨.
따라서 NULL을 구별하려면 IS NULL을 사용해야 함
-- null check
-- null은 연산이 불가능.
SELECT * FROM emp WHERE comm = null; --결과 안 뜸
SELECT * FROM emp WHERE comm is null;
SELECT sal+10, comm+10 FROM emp;
SELECT ename, sal, sal*12+comm AS ANNSAL, comm FROM emp
WHERE comm IS NOT NULL AND comm != 0;
SELECT ename, sal, sal*12+comm AS ANNSAL, comm FROM emp
WHERE comm > NULL; -- 결과 안 뜸. 산술연산자 사용 불가.
집합 연산자
JOIN인 A+B가 가로로 합쳐지는거고 (두 개 이상의 테이블에서 데이터 결합)
UNION은 위아래로 합쳐진다. (두 개 이상의 SELECT문 결과 결합)
UNION : 중복제거
UNION ALL : 중복 허용
-- 집합 연산자
SELECT empno, ename, sal, deptno FROM emp WHERE deptno=10
UNION
SELECT empno, ename, sal, deptno FROM emp WHERE deptno=20;
컬럼 수가 같아야 한다.
컬럼끼리 매칭이 아님, 타입만 같으면 컬럼 순서대로 출력된다.
사실 SQL이 느려지는 대표적인 요인이므로 가능한 쓰지 않는 것이 좋음.
-- 집합 연산자
SELECT empno, ename, sal, deptno, comm FROM emp WHERE deptno=10
UNION
SELECT sal, ename, empno, deptno, mgr FROM emp WHERE deptno=20
ORDER BY deptno;
실행순서가 매우 중요하다.
ORDER BY는 끝에 나와야 한다. (UNION 한 다음에 실행 됨)
연산자 우선순위
확인문제
SELECT * FROM emp WHERE ename LIKE '%S';
SELECT empno, ename, job, sal, deptno FROM emp
WHERE deptno=30 AND job='SALESMAN';
-- 집합연산자 사용X
SELECT empno, ename, job, sal, deptno FROM emp
WHERE deptno in (20, 30) AND sal > 2000;
-- 집합연산자 사용
SELECT empno, ename, job, sal, deptno FROM emp
WHERE deptno = 20 AND sal > 2000
UNION
SELECT empno, ename, job, sal, deptno FROM emp
WHERE deptno = 30 AND sal > 2000;
SELECT * FROM emp
WHERE sal < 2000 OR sal > 3000 ;
SELECT ename, empno, sal, deptno FROM emp
WHERE ename like '%E%'
AND deptno = 30
AND sal NOT BETWEEN 1000 and 2000;
select * from emp
where ename not like '_L%'
and job in ('MANAGER', 'CLERK')
and comm is null
and mgr is not null;
'Computer Science > Database' 카테고리의 다른 글
Do it! 오라클로 배우는 DB 입문 : 06 데이터 처리와 가공을 위한 오라클 함수 + 실습 문제 (0) | 2024.04.02 |
---|---|
Do it! 오라클로 배우는 DB 입문 : 04 SELECT문의 기본 형식 + 실습 문제 (0) | 2024.04.01 |
Do it! 오라클로 배우는 DB 입문 : 03 오라클 데이터베이스와 도구 프로그램 설치 (0) | 2024.04.01 |
Do it! 오라클로 배우는 DB 입문 : 02 관계형 데이터베이스와 오라클 데이터베이스 (0) | 2024.04.01 |
Do it! 오라클로 배우는 DB 입문 : 01 데이터베이스 (0) | 2024.04.01 |