필요한 정보를 여러 응용시스템에서 공용할 수 있도록 논리적으로 연관된 데이터를 모으고, 중복되는 데이터를 최소화하여 구조적으로 통합/저장해 놓은 것
데이터베이스에서 데이터를 추출, 조작, 정의, 제어 등을 할 수 있게 해주는 데이터베이스 전용 관리 프로그램
ex) Oracle, Mysqul, MS-SQL, Maria
가장 널리 쓰이는 DMBS
select * from employee;
내용
1. SELECT 컬럼
2. FROM 테이블
3. WHERE 조건
4. ORDER BY 정렬기준
순서
1. 어떤테이블에서
2. 어떤조건으로
3. 어떤컬럼을검색할지
4. 어떤 정렬로
SELECT *FROM EMPLOYEE;
SELECT EMP_NAME, EMP_NO, EMAIL
FROM EMPLOYEE;
SELECT EMP_NAME, PHONE, SALARY
FROM EMPLOYEE
WHERE SALARY >= 3000000;
SELECT EMP_NAME,EMAIL, PHONE, JOB_CODE
FROM EMPLOYEE
WHERE JOB_CODE = 'J2';
오라클에서는 문자열을 'J2'로 표현한다.
SELECT NAME, PHONE, SALARY, JOB_CODE
FROM EMPLOYEE
WHERE SALARY>=3500000 AND JOB_CODE='J2';
SELECT EMP_NAME 이름, SALARY 월급, SALARY12 "연봉(원)" /특수기호가 들어갈 때에 쌍따옴표*/
FROM EMPLOYEE;
SELECT EMP_NAME, SALARY, '원'
FROM EMPLOYEE;
SELECT DISTINCT DEPT_CODE FROM EMPLOYEE;
SELECT DISTINCT JOB_CODE FROM EMPLOYEE;
-- 한 조건에는 중복이지만 다른 조건에서 중복이 안 될 경우에는 지워지지 않는다.
SELECT DISTINCT DEPT_CODE, JOB_CODE FROM EMPLOYEE;
SELECT EMP_NAME, SALARY||' 원' FROM EMPLOYEE;
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE SALARY >= 3500000 AND SALARY <= 6000000;
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE SALARY BETWEEN 3500000 AND 6000000;
SELECT EMP_NAME, HIRE_DATE
FROM EMPLOYEE
WHERE HIRE_DATE BETWEEN '90/01/01' AND '01/01/01';
**EMPLOYEE 테이블에서 이름중에 성이 전씨인 직원의 이름, 급여
와일드 카드 : 아무거나 대체할 수 있는 문자 (_ , %)
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE EMP_NAME LIKE '전';
전씨가 아닌 사람을 뽑고싶으면 WHERE EMP_NAME NOT LIKE '전';
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE EMP_NAME LIKE '전%';
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE EMP_NAME LIKE '전%';
SELECT EMP_NAME, EMAIL FROM EMPLOYEE
WHERE EMAIL LIKE '__#%' ESCAPE '#';
ESCAPE '#' 의미 : #뒤에 오는 것은 문자열이 아니다
SELECT EMP_NAME FROM EMPLOYEE WHERE EMP_NAME LIKE '%연';
-- 혹은 WHERE EMP_NAME LIKE '__연'; 도 된다.
SELECT EMP_NAME, PHONE FROM EMPLOYEE WHERE PHONE NOT LIKE '010%';
SELECT * FROM EMPLOYEE
WHERE EMAIL LIKE '%s%' AND (DEPT_CODE='D9' OR DEPT_CODE='D6') AND
(HIRE_DATE BETWEEN '90/01/01' AND '00/12/01') AND SALARY>=2700000;
텍스트DEPT_CODE가 D6이거나 D9인 직원의 이름, 부서코드 조회
SELECT EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE IN ('D6', 'D9', 'D5');
풀어쓰면 이와 같다 WHERE DEPT_CODE='D6' OR DEPT_CODE='D9' OR DEPT_CODE='D5'
NULL은 NULL전용 문법을 써야한다 IS/ IS NOT
SELECT EMP_NAME, DEPT_CODE FROM EMPLOYEE
WHERE DEPT_CODE IS NULL;
SELECT EMP_NAME, DEPT_CODE FROM EMPLOYEE
WHERE DEPT_CODE IS NOT NULL;
SELECT EMP_NAME, SALARY, BONUS, (SALARY + SALARYBONUS)12 연봉
FROM EMPLOYEE WHERE BONUS IS NOT NULL;
직원 중 직급코드(JOB_CODE)가 J7 또는 J2이고,
급여가 2000000원 초과인 직원의
이름, 급여, 직급코드
SELECT EMP_NAME, SALARY, JOB_CODE FROM EMPLOYEE
WHERE JOB_CODE IN ('J7', 'J2') AND SALARY > 2000000;
날짜데이터 + OR - 정수 => 정수만큼 더한날짜 OR 뺀날짜
날짜-날짜 => 몇일 차이나는지 확인
SYSDATE : 년/월/일/시/분/초-- SYSDATE : 현재 시스템시간을 가져옴
SYSDATE+1 : 현재 시스템시간을 가져온 후 +1
SELECT EMP_NAME, HIRE_DATE, SYSDATE 오늘, SYSDATE+1 내일, SYSDATE-1 어제,
SYSDATE+3-SYSDATE, FLOOR(SYSDATE-HIRE_DATE)
FROM EMPLOYEE;
SELECT EMP_NAME, EMAIL, SALARY
FROM EMPLOYEE
ORDER BY SALARY DESC;
-- ORDER BY SALARY; 는 오름차순 월급 정렬 (ASC는 오름차순으로 디폴트 값으로 생략)
-- ORDER BY SALARY DESC; 은 내림차순 월급 정렬
SELECT EMP_NAME, EMAIL, SALARY
FROM EMPLOYEE
ORDER BY 3 DESC;
-- ORDER BY는 마지막 순서이므로, 출력 기준으로 샐러리가 3열에 있기때문에
-- SALARY 대신 3을 적어도 데이터 출력 된다.
SELECT EMP_NAME, EMAIL, SALARY
FROM EMPLOYEE
ORDER BY SALARY DESC, EMP_NAME ASC;
-- 첫번째 기준이 같을 때 두번째 조건으로 정렬
SELECT EMP_NAME, EMAIL, SALARY, DEPT_CODE
FROM EMPLOYEE
ORDER BY DEPT_CODE DESC NULLS FIRST;
-- NULL 값을 처음 보내 DEPT_CODE 오름차순으로 정렬. DESC NULLS LAST면 맨아래로 보냄.
SELECT EMP_NAME, EMP_NO, SALARY, HIRE_DATE
FROM EMPLOYEE
WHERE (SYDDATE-HIRE_DATE) BETWEEN 5365 AND 10365
ORDER BY EMP_NAME;
SELECT EMP_NAME, DEPT_CODE, HIRE_DATE, ENT_DATE
FROM EMPLOYEE
WHERE ENT_YN LIKE '%Y%';
혹은 WHERE ENT_DATE IS NOT NULL
SELECT EMP_NAME, SALARY, FLOOR((SYSDATE-HIRE_DATE)/365) 근속년수
FROM EMPLOYEE
WHERE (SYSDATE-HIRE_DATE)/365 >=10
ORDER BY 3;
SELECT EMP_NAME, EMP_NO, EMAIL, SALARY
FROM EMPLOYEE
WHERE (HIRE_DATE BETWEEN '99/01/01' AND '10/01/01') AND SALARY <=2000000;
SELECT EMP_NAME, EMP_NO, SALARY, DEPT_CODE
FROM EMPLOYEE
WHERE (SALARY BETWEEN 2000000 AND 3000000) WHERE (SALARY BETWEEN 2000000 AND 3000000) AND(EMP_NO LIKE '__04%-2%')
ORDER BY EMP_NO DESC;