<목차>
ㅇ CREATE
ㅇ AS 서브쿼리 사용
<실습쌤 좋은 말씀>
ㅇ 여러 개 한꺼번에 배우면 헷갈리는데
공부를 계속하다 보면 어느 순간 뚫릴때가 있어. 터득!
그 지점을 만나야 해. 그 때 업그레이드가 되는거야. 퀀텀 점프!
한쪽만 두드리면 안돼 . 여기저기 두드려야 벽이 무너져
즉, 아는 것만 두드리면 안돼. 모르는 것, 어려운 것을 두드려야 해
ㅇ CREATE 개요

CREATE TABLE 내가생성할테이블이름 (생성할켤럼이름 데이터타입(길이), 생성할켤럼이름 데이터타입(길이), 생성할켤럼이름 데이터타입(길이) )
ㅇ 예)
CREATE TABLE dept ( deptno number(2), dname varchar2(14), loc varchar2(13) )
- 여기에 실제 데이터 INSERT 하고 나면 꼭 커밋!!
ㅇ 실습 : 부서가 80번인 사람들의 e_id, 이름, 연봉, 입사일로 테이블을 만들기
CREATE TABLE dept80 AS SELECT employee_id, last_name, salary*12 annsal, hire_date FROM employees WHERE department_id = 80 SQL> desc dept80 Name Null? Type ----------------- -------- --------------- EMPLOYEE_ID NUMBER(6) LAST_NAME NOT NULL VARCHAR2(25) ANNSAL NUMBER HIRE_DATE NOT NULL DATE
as 서브쿼리는
서브쿼리가 실행되면 출력 되는 결과물이 테이블로 만들어진 것
서브쿼리의 결과가 그대로 테이블 화 된다
데이터 타입이나 길이, 제약조건, 데이터 전부를 가져와
테이블 내용 복사할 때 주로 사용
이게 편리?????한게 뭐냐면 (장점)
50번 부서에 근무하는 사원의 이름과 연봉을 저장하는 dept50이라는 테이블을 생성하시오.
순서
1크리에이트 테이블 .생성
2(데이터 삽입 하기 전에) 50번 부서에 근무하는 사원의 정보를 확인. 조회
3그 데이터를 근거로 삽입 : 인서트
4데이터저장
이 때 크리에이트 애스 서브쿼리를 이용하면. 이걸 한 번에 수행 가능
(문제점)
임플로이스테이블에
101번 급여 100
dept50에다가 연봉을 저장해뒀어 1200원
pkfk로 연결되어 있는 테이블인가? 아니야
독립된 테이블이라서
급여가 200이 되면 dept50의 데이터가 의미가 없어져
크리에이애즈서브쿼리는 이럴 때 사용.
주 단위로 변경해야하는 통계성자료. 매출 내역처럼
(이거는 나중에 월요일날 배울 뷰 를 더 사용해)
<2교시>
ㅇ 연봉이 15000이상이 되는 사원의 이름과 부서번호, 급여을 저장하는 AVGSAL 테이블을 생성하시오
서브쿼리 긴으을 사용한다는 건 서브쿼리의 결과가 테이블화가된다
컬럼 헤딩이 컬럼이 되는 것
서브쿼리를 먼저 작성
avgsal을 소문자로 입력했지만, 실제로 생성되는 테이블과 컬럼 이름들은 디폴트로 대문자로 저장 돼
컬럼 헤딩 만드는 방법 2가지
1avgsal 에 컬럼 이름을 직접 명시해도 돼
CREATE TABLE avgsal(name, deptid, sal)
AS
SELECT last_name, department_id, salary
FROM employees
WHERE salary*12 >= 150000
이 방법을 쓰면 반드시 3개가 딱 맞아야 해
만약 내가 마지막에 컬럼 aa를 넣으면 에러 발생
2셀렉트 리스트절에 알리아스 - 이게 더 좋아.
CREATE TABLE avgsal
AS
SELECT last_name name, department_id deptid, salary sal
FROM employees
WHERE salary*12 >= 150000
SQL> desc avgsal
Name Null? Type
LAST_NAME NOT NULL VARCHAR2(25)
DEPARTMENT_ID NUMBER(4)
SALARY NUMBER(8,2)
ㅇ 부서별 평균급여를 저장하는 avgdept 테이블을 생성하시오.
부서번호와 평균급여를 저장하시오
CREATE TABLE avgdept
AS
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id
/
CREATE TABLE avgdept
AS
SELECT department_id , AVG(salary) avgsal
FROM employees
GROUP BY department_id
/
컬럼 이름의 네이밍 규칙.
내 예상 - 컬럼이름에 예약어 사용할 수 없어. 그룹함수avg
답 - 오라클 명령어를 사용하면 안된다. 괄호라는 특수기호 들어가있어(오!이거는 놓쳤었네)
그래서 avg샐러리는 알리아스로 이름을 바꿔줘
알리아스 꼭 입력해야 해!
서브쿼리만 실행시키면 잘 돼
앞의 예제에서도 연봉 쓸 때 annsal 알리아스 부여한 이유가 * 사용 못하기 때문에
ㅇ
인서트 문장의 서브쿼리 기능 (어제 생략하고 넘어갓던 거)
truncate
열? 삭제하는 명령어래
밸류스 대신 서브쿼리 문장 사용 가능
INSERT INTO avgdept
SELECT department_id, salary
FROM employees
/
ㅇ
크리에이트 테이블의 애즈 서브쿼리 기능과
인서트 인투 절의 서브쿼리 기능 차이점
크리에이트는
테이블 구조, 컬럼 데이터길이, 데이터 타입까지 전부 가져와
인서트는
데이터 결과만 가져와
서브쿼리의 결과를 그냥 그대로 삽입
이거는 복사하고자 할때 (자주 사용하는 편이야. 간단하게)
107개 입력 다 하려면 번거로운데 섭쿼리 문장 하나로 107개 문장 한꺼번에 삽입할 수 있으니까
복사할 때 사용
서브쿼리는 안 쓰이는 데 없을 정도로 편리한 기능이야
여기까지 테이블 생성