실시간 강의

28. Oracle 01/22 (1) - 패스트캠퍼스 백엔드 부트캠프 3기

gkss2tpt 2025. 1. 22. 13:35

1. 저장할 컬럼과 계산할 컬럼

  • 저장 해둔 컬럼은 빠르게 보여줄수 있지만 변경에 불리
  • 계산할 컬럼은 변경에 유리하지만 매번 처리해줘야함
CREATE TABLE EMP(
    ID NUMBER(5) NOT NULL PRIMARY KEY,
    NAME VARCHAR2(25) NOT NULL,
    SALARY NUMBER(7,2),
    TITLE VARCHAR2(25) DEFAULT '사원',
    IN_DATE DATE DEFAULT SYSDATE,
    DEPT_NAME VARCHAR2(25)
);

SELECT SYSDATE FROM DUAL; -- 주석: DUAL 가상 테이블, SYSDATE 현재 날짜
SELECT * FROM EMP;

INSERT INTO EMP
(ID, NAME, SALARY, TITLE, DEPT_NAME)
SELECT 1, '홍길동', NULL, '사원', '111' FROM DUAL UNION ALL
SELECT 2, '김길동', 3000, '사원', '111' FROM DUAL UNION ALL
SELECT 3, '최길동', 4000, '대리', '112' FROM DUAL UNION ALL
SELECT 4, '감길동', 5000, '대리', '112' FROM DUAL UNION ALL
SELECT 5, '갱길동', 6000, '과장', '113' FROM DUAL UNION ALL
SELECT 6, '동길동', 7000, '과장', '113' FROM DUAL UNION ALL
SELECT 7, '콩길동', 8000, '부장', '114' FROM DUAL UNION ALL
SELECT 8, '고길동', 9000, '부장', '114' FROM DUAL UNION ALL
SELECT 9, '배길동', 10000, '이사', '115' FROM DUAL UNION ALL
SELECT 10, '가길동', 12000, '사장', '116' FROM DUAL
;

DROP TABLE EMP;

RENAME EMP TO EMP_13;      -- 이름 변경

UPDATE EMP_13
SET NAME = 'ABC', SALARY = SALARY * 10;

SELECT NAME, SALARY, SALARY*10 AS 연봉 FROM EMP;

SELECT DISTINCT TITLE, NAME FROM EMP;

SELECT NAME || ' ' || TITLE FROM EMP;

SELECT * 
FROM EMP 
WHERE SALARY BETWEEN 1000 AND 5000 -- 1000 <= SALARY <= 5000
ORDER BY ID DESC;

SELECT * 
FROM EMP
WHERE NAME LIKE '김%';
-- LIKE 문자열 비교, % = 0~N개 비교 , _ = 1개 비교 

SELECT * FROM S_EMP -- 없는 테이블
WHERE START_DATE < TO_DATE('16/01/01', 'YY/MM/DD') -- CHAR -> DATE
--WHERE TO_CHAR(START_DATE,'YY/MM/DD') < '16/01/01' -- DATE -> CHAR 자동 형변환에 의지 하지 않기
ORDER BY START_DATE;

SELECT SUBSTR('강남구 대치동', -3, 3) FROM DUAL;  -- 음수는 뒤에서 부터 , SUBSTR( , FROM, TO)
SELECT LENGTH('홍길동') FROM DUAL; -- 글자 수
SELECT LPAD('홍길동',10,'*') FROM DUAL; -- LPAD는 채우기, 한글은 2글자 취급 
SELECT TRANSLATE('AABBA', 'B','C') FROM DUAL;   -- 다중 변경

SELECT SYSDATE FROM DUAL;   -- 오늘
SELECT SYSDATE + 1 FROM DUAL;   -- 내일
SELECT ADD_MONTHS(SYSDATE, 1) FROM DUAL;    -- 한달 뒤
SELECT LAST_DAY(ADD_MONTHS(SYSDATE, 1)) FROM DUAL;    -- 다음 달 말
SELECT TRUNC(ADD_MONTHS(SYSDATE, 0), 'MONTH')-1 FROM DUAL;   -- 1일에서 하루를 빼면 전달 마지막날
SELECT TO_DATE('10 9월 2017', 'DD MONTH YYYY') FROM DUAL;    -- 형식 지정
SELECT COUNT(TITLE) FROM EMP;  -- NULL은 COUNT 제외
SELECT COUNT(*) FROM EMP;   -- *은 행의 개수

SELECT DEPT_NAME, SUM( SALARY) AS SUM, AVG(SALARY) AS AVG, MAX(SALARY),COUNT(ID)
FROM EMP
--WHERE SALARY > 3000
GROUP BY DEPT_NAME;

SELECT DEPT_NAME, AVG(SALARY),COUNT(TITLE)
FROM EMP
WHERE TITLE LIKE '사원'
GROUP BY DEPT_NAME;