💁♀️ 테이블 조회(SELECT)란,
데이터베이스에서 정보를 검색할 때 사용하는 기본 명령어. SELECT 문을 사용하여 테이블 전체를 불러올 수도 있고 특정 컬럼이나 특정 행 혹은 특정 행/특정 컬럼을 조회할 수 있음
🙋 잠깐 ! SQL부터 알아봅시다 !
💁♀️ SQL(Structured Query Language)이란,
관계형 데이터베이스에서 데이터를 조회하거나 조작하기 위해 사용하는 표준 검색언어
원하는 데이터를 찾는 방법이나 절차를 기술하는 것이 아닌 조건을 기술하여 작성
-- 대소문자를 구분하지 않으며 코딩 컨벤션에 따라서 키워드만 대문자로 사용하는 경우도 있고 모두 대문자, 모두 소문자로 사용하는 경우도 있을 수 있음
SELECT
* -- *은 모든 컬럼을 의미
FROM EMPLOYEE;
SELECT
EMP_ID
, EMP_NAME
FROM EMPLOYEE;
SELECT
*
FROM EMPLOYEE
WHERE DEPT_CODE = 'D9';
SELECT
*
FROM EMPLOYEE
WHERE JOB_CODE = 'J1';
SELECT
EMP_ID
, EMP_NAME
, DEPT_CODE
, SALARY
FROM EMPLOYEE
WHERE SAlARY >= 3000000;
AS
""
SELECT
EMP_NAME AS 이름
, SALARY * 12 "1년 급여"
, (SALARY + (SALARY * BONUS)) * 12 AS "총 소득"
, (SALARY + (SALARY * NVL(BONUS, 0))) * 12
>>> NVL : NULL에 대한 함수처리
FROM EMPLOYEE;
📌 Ref.
* AS는 생략가능
* 별칭에 띄어쓰기가 포함된 경우, ""로 반드시 묶어줘야함
* BONUS가 NULL일 경우 연산결과가 모두 NULL이 되어버림 (NVL사용해야함)
SELECT
EMP_ID
, EMP_NAME
, SALARY
, '원' AS 단위
FROM EMPLOYEE;
SELECT
DISTINCT JOB_CODE
FROM EMPLOYEE;
SELECT
DISTINCT JOB_CODE
, /*DISTINCT*/ DEPT_CODE
FROM EMPLOYEE;
📌 Ref.
* 여러 개의 컬럼의 중복을 제거하고 싶을 때는 간단하게 ','로 묶어 제외시키면 됨
💁♀️ WHERE절이란,
테이블에서 조건을 만족하는 값을 가진 행을 골라내는 절.
여러 개의 조건을 만족하는 행을 골라낼 때 AND 혹은 OR을 사용할 수 있음
SELECT
EMP_NAME
, DEPT_CODE
, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D6'
AND SALARY > 2000000;
SELECT
EMP_ID
, EMP_NAME
, SALARY
, BONUS
FROM EMPLOYEE
WHERE BONUS IS NULL; >>> 값이 NULL일 때는, '='이 아닌 'IS'를 사용해야함
SELECT
EMP_ID
, EMP_NAME
, SALARY
, BONUS
FROM EMPLOYEE
WHERE BONUS IS NOT NULL; >>> 값이 NULL일 때는, '!='이 아닌 'IS NOT'을 사용해야함
||
SELECT
EMP_NAME || SALARY || BONUS
FROM EMPLOYEE; -- 조회된 컬럼이 모두 병합되어 하나의 컬럼이 됨
SELECT
EMP_NAME || '님의 월급은 ' || SALARY || '원 입니다 :)' AS 월급조회
FROM EMPLOYEE;
=
같다
>
크다
<
작다
>=
크거나 같다
<=
작거나 같다
!=
^=
<>
같지 않다
SELECT
EMP_ID
, EMP_NAME
, DEPT_CODE
FROM EMPLOYEE
--WHERE DEPT_CODE != 'D9';
--WHERE DEPT_CODE ^= 'D9';
WHERE DEPT_CODE <> 'D9'; -- 세 가지 모두 '같지 않다'의 의미로 출력 결과 동일
SELECT
EMP_ID
, EMP_NAME
, HIRE_DATE
, '재직중' AS 근무여부
FROM EMPLOYEE
WHERE ENT_YN = 'N';
SELECT
EMP_NAME
, DEPT_CODE
, SALARY
FROM EMPLOYEE
WHERE SALARY >= 3500000
AND SALARY <= 5500000;
컬럼명 BETWEEN 하한값 AND 상한값
: 하한값 이상 상한값 이하의 값
SELECT
EMP_NAME
, DEPT_CODE
, SALARY
FROM EMPLOYEE
WHERE SALARY BETWEEN 3500000 AND 5500000; >>> 바로 위와 동일한 결과의 식
SELECT
EMP_NAME
, DEPT_CODE
, SALARY
FROM EMPLOYEE
--WHERE NOT SALARY BETWEEN 3500000 AND 5500000; >>> 1. 컬럼 앞에 NOT
WHERE SALARY NOT BETWEEN 3500000 AND 5500000; >>> 2. 연산자 앞에 NOT
📌 Ref.
* NOT 연산자는 컬럼명 앞, 또는 BETWEEN 연산자 앞에 붙을 수 있음 (모두 가능)
컬럼명 LIKE '문자 패턴'
💁♀️ LIKE 연산자란,
문자 패턴이 일치하는 값을 조회할 때 사용하는 연산자
- 문자 패턴
- 글자로 시작하는 값 :
'글자%'
- 글자로 끝나는 값 :
'%글자'
- 글자가 포함된 값 :
'%글자%'
SELECT
EMP_NAME
, HIRE_DATE
FROM EMPLOYEE
WHERE EMP_NAME LIKE '김%';
SELECT
EMP_NAME
, HIRE_DATE
FROM EMPLOYEE
--WHERE NOT EMP_NAME LIKE '김%'; >>> 1. 컬럼 앞에 NOT
WHERE EMP_NAME NOT LIKE '김%'; >>> 2. 연산자 앞에 NOT
SELECT
EMP_NAME
, DEPT_CODE
FROM EMPLOYEE
WHERE EMP_NAME LIKE '%하%';
SELECT
EMP_NAME
, PHONE
FROM EMPLOYEE
WHERE PHONE LIKE '___9%'; >>> 언더바(_)가 3개면 PHONE의 010이 제외
📌 Ref.
* 와일드 카드 사용 : _(글자 한 자리), %(0개 이상의 글자)
SELECT
EMP_NAME
, PHONE
FROM EMPLOYEE
WHERE PHONE LIKE '___9_______';
SELECT
EMP_NAME
, EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE '___#_%' ESCAPE '#';
>>> ESCAPE '#'로 표시해줘야함 (#말고 다른 문자 가능)
📌 Ref.
* ESCAPE '문자'
: 언더바(_)를 사용한 후, 조회해올 컬럼에 언더바(_)가 포함되어있는 경우 프로그램이 구분을 하지 못 함.
따라서 EXCAPE와 '문자(Any type)'를 사용하여 구분해줘야함
💁♀️ IN 연산자란,
비교하는 값 목록에 일치하는 값이 있는지 확인하는 연산자
SELECT
EMP_NAME
, DEPT_CODE
, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE IN ('D6', 'D8'); >>> : 'D6', 'D8'인 사람이 DEPT_CODE에 있나?
SELECT
EMP_NAME
, DEPT_CODE
, SALARY
FROM EMPLOYEE
--WHERE NOT DEPT_CODE IN ('D6', 'D8') >>> 1. 컬럼 앞에 NOT
WHERE DEPT_CODE NOT IN ('D6', 'D8') >>> 2. 연산자 앞에 NOT
>>> 부서코드가 NULL값인 직원들은 NOT IN에도 나오지 않음. 만약 나오게 하려면,
OR DEPT_CODE IS NULL;
>>> NULL 값은 NOT IN에서 취급되지 않으므로 이렇게 별도로 처리해야함
SELECT
EMP_NAME
, SALARY
, JOB_CODE
FROM EMPLOYEE
WHERE JOB_CODE = 'J7'
OR JOB_CODE = 'J2'
AND SALARY >= 2000000; >>> AND가 OR보다 먼저 동작 (J2 직급의 급여 200만원 이상 받는 직원)
SELECT
EMP_NAME
, SALARY
, JOB_CODE
FROM EMPLOYEE
WHERE (JOB_CODE = 'J7'
OR JOB_CODE = 'J2') >>> AND가 OR보다 먼저 동작하기 때문에 OR을 소괄호로 묶어야함
AND SALARY >= 2000000;
📌 Ref.
* 우선순위를 고려하여 OR가 먼저 처리되도록 ()를 이용하여 우선순위 변경