1. 연결 연산자
||를 사용하여 여러 컬럼을 하나의 컬럼인 것처럼 연결하거나 컬럼과 리터럴을 연결할 수 있다.
-- EMPLOYEE 테이블에서 사번, 직원명, 급여를 연결해서 조회
SELECT EMP_ID || EMP_NAME || SALARY AS "사번 직원명 급여" -- 하나의 컬럼인 것처럼 출력
FROM EMPLOYEE;
-- EMPLOYEE 테이블에서 직원명, 급여를 리터럴과 연결해서 조회
-- '' : 문자열 "" : 별칭
SELECT EMP_NAME || '의 월급은 ' || SALARY || '원 입니다.' AS "급여 정보"
FROM EMPLOYEE;
2. 논리 연산자
- 여러 개의 제한 조건 결과를 하나의 논리 결과로 만들어준다.
- AND는 여러 조건이 동시에 TRUE 일 경우에 TRUE를 반환한다.
AND (~이면서, 그리고)
-- EMPLOYEE 테이블에서 부서 코드가 D6이면서 급여가 300만원 이상인 직원들의 사번, 직원명, 부서 코드, 급여 조회
SELECT EMP_ID,
EMP_NAME,
DEPT_CODE,
SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D6' AND SALARY >= 3000000;
- OR는 여러 조건들 중에 하나의 조건만 TRUE 이면 TRUE를 반환한다.
OR (~ 이거나, 또는)
- NOT은 조건에 대한 반대 값으로 반환한다. (NULL 제외)
-- EMPLOYEE 테이블에서 부서 코드가 D5이거나 급여가 500만원 이상인 직원들의 사번, 직원명, 부서코드, 급여 조회
SELECT EMP_ID,
EMP_NAME,
DEPT_CODE,
SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5' OR SALARY >= 5000000;
3. 비교 연산자
- 값 또는 표현식 사이의 관계를 비교하기 위해 사용하는 연산자이다.
- 비교하는 값 또는 표현식은 동일한 데이터 타입이어야 하고 비교 결과는 논리 결과(TRUE/FALSE/NULL) 중 하나가 된다.
1) 대소/동등 비교 연산자
- 비교하려는 값의 대소, 동등 비교를 하는 연산자이다.
>, <, >=, <= : 대소 비교
= : 같다, 동등 비교
!=, ^=, <> : 같지않다, 동등 비교
2) BETWEEN AND
- 비교하려는 값이 지정한 범위에 포함되는지 확인하는 연산자이다.
- WHERE 컬럼 BETWEEN 하한값 AND 상한값
- WHERE 절에서 사용되는 연산자로 범위에 대한 조건을 제시할 때 사용한다.
- 컬럼의 값이 하한값 이상이고, 상한값 이하인 경우 검색 대상이 된다.
-- EMPLOYEE 테이블에서 급여가 350만원 이상 600만원 이하가 아닌 직원의 사번, 직원명, 부서코드, 급여 조회
SELECT EMP_ID,
EMP_NAME,
DEPT_CODE,
SALARY
FROM EMPLOYEE
--WHERE NOT SALARY BETWEEN 3500000 AND 6000000
WHERE SALARY NOT BETWEEN 3500000 AND 6000000 -- NOT 연산자는 컬럼명 앞 또는 BETWEEN 앞에 사용
ORDER BY SALARY;
3) LIKE
- 비교하려는 값이 지정한 특정 패턴을 만족하는지 확인하는 연산자이다.
- %와 _를 와일드카드로 사용하여 패턴을 지정한다.
- % : 0 글자 이상
컬럼 LIKE '문자%' -> 컬럼 값 중에 '문자'로 시작하는 모든 행을 조회한다.
컬럼 LIKE '%문자' -> 컬럼 값 중에 '문자'로 끝나는 모든 행을 조회한다.
컬럼 LIKE '%문자%' -> 컬럼 값 중에 '문자'가 포함되어 있는 모든 행을 조회한다.
-
- _ : 1글자
컬럼 LIKE '_문자' -> 컬럼 값 중에 '문자' 앞에 무조건 한 글자가 오는 모든 행을 조회한다.
컬럼 LIKE '__문자' -> 컬럼 값 중에 '문자' 앞에 무조건 두 글자가 오는 모든 행을 조회한다.
-- EMPLOYEE 테이블에서 성이 전 씨인 사원의 직원명, 급여, 입사일 조회
SELECT EMP_NAME, SALARY, HIRE_DATE
FROM EMPLOYEE
WHERE EMP_NAME LIKE '전%';
-- EMPLOYEE 테이블에서 이름 중에 '하'가 포함된 사원의 직원명, 주민번호, 부서 코드 조회
SELECT EMP_NAME, EMP_NO, DEPT_CODE
FROM EMPLOYEE
WHERE EMP_NAME LIKE '%하%';
-- EMPLOYEE 테이블에서 김씨 성이 아닌 직원의 사번, 직원명, 입사일 조회
SELECT EMP_ID, EMP_NAME, HIRE_DATE
FROM EMPLOYEE
--WHERE EMP_NAME NOT LIKE '김%';
WHERE NOT EMP_NAME LIKE '김%';
--WHERE NOT EMP_NAME NOT LIKE '김%'; -- 부정의 부정 -> 긍정
-- EMPLOYEE 테이블에서 전화번호 4번째 자리가 9로 시작하는 직원의 사번, 직원명, 전화번호, 이메일 조회
SELECT EMP_ID, EMP_NAME, PHONE, EMAIL
FROM EMPLOYEE
WHERE PHONE LIKE '___9%';
- 와일드카드 문자를 특수문자로 사용해야 하는 경우 데이터로 처리할 와일드카드 문자 앞에 임의의 특수문자를 사용하고 ESCAPE로 등록하여 처리한다.
-- EMPLOYEE 테이블에서 이메일 중 _ 앞 글자가 3자리인 이메일 주소를 가진 직원의 사번, 직원명, 이메일 조회
SELECT EMP_ID, EMP_NAME, EMAIL
FROM EMPLOYEE
--WHERE EMAIL LIKE '____%'; -- 와일드 카드와 데이터 값이 구분이 되지 않는다.
WHERE EMAIL LIKE '___$_%' ESCAPE '$';
4) IS NULL
- WHERE 컬럼 IS NULL
- 컬럼 값이 NULL인 경우 검색 대상이 된다.
-- EMPLOYEE 테이블에서 보너스를 받지 않은 사원의 사번, 직원명, 급여
SELECT EMP_ID, EMP_NAME, SALARY, BONUS
FROM EMPLOYEE
--WHERE BONUS = NULL; -- NULL은 비교 연산자로 비교할 수 없다.
WHERE BONUS IS NULL;
-- EMPLOYEE 테이블에서 관리자도 없고 부서도 배치 받지 않은 사원의 이름, 부서 코드 조회
SELECT EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE MANAGER_ID IS NULL AND DEPT_CODE IS NULL;
5) IN
- WHERE 컬럼 IN(값, 값, ..., 값)
- 값 목록 중에 일치하는 값이 있을 때 검색 대상이 된다.
-- EMPLOYEE 테이블에서 부서 코드가 'D5', 'D6', 'D8'인 부서원들의 직원명, 부서 코드, 급여 조회
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
--WHERE DEPT_CODE = 'D5' OR DEPT_CODE = 'D6' OR DEPT_CODE = 'D8'
WHERE DEPT_CODE IN('D5', 'D6', 'D8')
ORDER BY DEPT_CODE;
4. 연산자 우선순위
- 논리 연산자의 경우 연산자마다 우선순위가 다르기 때문에 SQL 작성 시 주의해야 한다.
-- EMPLOYEE 테이블에서 직급 코드가 J2 또는 J7 직급인 사원들 중 급여가 200만원 이상인 사원들의 모든 컬럼을 조회
SELECT *
FROM EMPLOYEE
--WHERE (JOB_CODE = 'J7' OR JOB_CODE = 'J2') AND SALARY >= 2000000;
WHERE JOB_CODE IN ('J7', 'J2') AND SALARY >= 2000000;
--WHERE JOB_CODE = 'J7' OR JOB_CODE = 'J2' AND SALARY >= 2000000;로 했을 경우 아래와 같은 순서로 실행
SELECT *
FROM EMPLOYEE
WHERE JOB_CODE = 'J2' AND SALARY >= 2000000;
SELECT *
FROM EMPLOYEE
WHERE JOB_CODE = 'J7';
* 위 내용은 KH 정보교육원 수업을 정리한 내용을 바탕으로 작성된 글입니다. *
'DB > SQL' 카테고리의 다른 글
INNER JOIN & OUTER JOIN (0) | 2022.09.01 |
---|---|
GROUP BY & HAVING (0) | 2022.08.30 |
함수(FUNCTION) (0) | 2022.08.29 |
DQL - SELECT (0) | 2022.08.26 |
실습 환경 구축 (0) | 2022.08.25 |