부트캠프 6주차가 흘렀다. 이번주는 Java 수업이 끝나고 데이터베이스 수업을 받았는데 db를 다루는 것에 약간 흥미가 생겼다. 이론 대신 실습을 해서 그런 것일까? DB를 씹고 맛보고 즐기니까 더욱 그런 것 같다. Oracle, MySQL 둘 다 써보니 약간의 차이가 있지만 공통적인 문법이 있기 때문에 쓰는데는 문제가 없었다. 일단은 Oracle을 우선적으로 실습을 많이 해봐야겠다.
강사님의 지인, 취업한 제자들 분들이 오셔서 한마디씩 해주시는데 나의 미래를 그리는데에 세밀한 붓으로 한번씩 터치해주시는 것 같았다. 특히, 17년 경력의 찐개발자분이 이야기하실때 자신에 대한 프라이드와 자신이 만든 프로그램에 대한 자부심이 느껴졌고, 그분과 눈이 맞췄을 때 내 가슴 속에 있는 화톳불이 활활 타오르기 시작했다.
학원 과제와 비기너반 과제 제출이 남았고, 자바 복습, SQL 복습, 디자인패턴 복습 등등 할일들이 매우 많이 남아있지만 요즘 공부하는 게 너무 재밌다.
이번주 배운 것을 토대로 코드를 작성해보았다.
- 직원의 이름과, 각 직원이 속한 부서의 이름 함께 출력
SELECT e.emp_name,
(SELECT dept_name
FROM departments d
WHERE d.dept_id = e.dept_id) dept_name
FROM employees e;
-- 전체 평균보다 높은 부서의 평균 급여 출력
SELECT dept_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY dept_id
HAVING AVG(salary) > (
SELECT AVG(salary)
FROM employees
);
-- 가장 높은 급여를 받는 사원의 보너스를 1000으로 변경
UPDATE employees
SET bonus = 1000
WHERE salary = (
SELECT MAX(salary)
FROM employees
);
-- 판매 1등 상품을 다른 테이블에 백업
INSERT INTO best_selling_products (product_id, product_name)
SELECT product_id, product_name
FROM products
WHERE sales = (
SELECT MAX(sales)
FROM products
);
SELECT e.name, e.title, d.name
FROM(SELECT name, title, dept_id
FROM s_emp
WHERE title = '사원') e, s_dept d
WHERE e.dept_id = d.id
);
CREATE TABLE emp_100 (id, name, mail_id, start_date)
AS SELECT id, name, mail_id, start_date
FROM s_emp
WHERE dept_id = 100 -- WHERE 1<>1 공백테이블
);
SELECT e.emp_name, d.dept_name
FROM employees e, departments d
WHERE e.dept_id = d.dept_id;
-- 직원 급여에 따라 급여 등급 매핑
SELECT e.name, e.salary, s.grade
FROM s_emp e, salgrade s
WHERE e.salary BETWEEN s.losal AND s.hisal;
SELECT e.emp_name, d.dept_name
FROM employees e
LEFT OUTER JOIN departments d ON e.dept_id = d.dept_id;
SELECT e.emp_name AS employee, m.emp_name AS manager
FROM employees e
JOIN employees m ON e.manager_id = m.emp_id;
-- 시퀀스 생성
CREATE SEQUENCE order_seq
START WITH 1000
INCREMENT BY 1
NOCACHE;
-- INSERT에서 사용
INSERT INTO orders (order_id, customer_id, order_date)
VALUES (order_seq.NEXTVAL, 101, SYSDATE);
• B*Tree는 B-Tree의 확장 버전
• 디스크 I/O를 줄이기 위해 다진 균형 트리 구조 사용
• 정렬된 구조 덕분에 빠른 검색과 범위 조회 가능
• 노드 분할 시 형제 노드까지 고려하여 공간 활용도 높음
• 리프 노드 간 연결 포인터 존재
• 대부분의 RDBMS에서 인덱스 기본 구조로 사용
-- 직원의 이름과, 각 직원이 속한 부서의 이름 함께 출력
SELECT *
FROM employees
WHERE emp_id = 1001;
-- 범위 검색
SELECT *
FROM employees
WHERE salary BETWEEN 3000 AND 5000;
P.S. 전공자들과 이야기할 시간이 있었는데, 개념에 대한 이해가 매우 남달랐다. 전공자들 수준으로 내 실력을 올리는 것이 목표이지만, 그 갭을 메꾸기 위해서 시간을 쪼개서 더 공부를 해야 할 것 같다. 이번주도 열심히 한 나 칭찬해!