BASHA TECH
DB#CH03. SQL 문장 이해 본문
1. SELECT문
2. INSERT문
3. UPDATE문
4. DELETE문
5. COMMIT과 ROLLBACK, TRUNCATE
6. 의사컬럼
7. 연산자
8. 표현식
9. 조건식
EMPLOYEE_ID : 사원번호, PK
EMP_NAME : 사원명
EMAIL : 이메일
PHONE_NUMBER : 연락처
HIRE_DATE : 입사일
SALARY : 급여, 연봉 (수정)
MANAGER_ID : 상급자 사원번호 (수정)
COMMISSION_PCT : 인센티브 비율 => 영업부 사원에게 부여 (수정)
RETIRE_DATE : 퇴사일 => 퇴사 X => NULL (수정)
DEPARTMENT_ID : 부서번호 (수정)
JOB_ID : 업무번호 (수정)
CREATE_DATE : 생성일
UPDATE_DATE : 수정일
1. SELECT문 : 데이터 조회 / 목록
SELECT * 혹은 컬럼
FROM [스키마.] 테이블명 혹은 [스키마.] 뷰명
WHERE 조건
ORDER BY 컬럼
;
2. INSERT문 : 데이터 추가
- INSERT 기본 형태
INSERT INTO [스키마.] 테이블명 (컬럼1, 컬럼2, ...) // 칼럼자리
VALUES (값1, 값2, ...) // 컬럼에 대입 될 값
;
- INSERT 컬럼 명 기술 생략 형태
INSERT INTO [스키마.] 테이블명 //컬럼 틀
VALUES (값1, 값2, ...)
;
- INSERT ~ SELECT 형태
: 컬럼 순서와 데이터 타입을 맞춰줘야 한다.
INSERT INTO [스키마.] 테이블명 (컬럼1, 컬럼2, ...)
SELECT문
;
3. UPDATE문 : 데이터 수정
: 기존 데이터를 수정할 때 사용한다
UPDATE [스키마.] 테이블명
SET { 컬럼1 = 변경값 1,
컬럼2 = 변경값 2,
.
.
.
}
WHERE 조건
;
4. DELETE문 : 데이터 삭제
- 일반 구문
DELETE [FROM] [스키마.] 테이블명
WHERE delete 조건 //Row 찾기
;
- 특정 파티션만 삭제할 경우의 구문
DELETE [FROM] [스키마.] 테이블명 PARTITION (파티션명)
WHERE delete 조건
;
5. COMMIT과 ROLLBACK, TRUNCATE : Transaction
- COMMIT : 변경한 데이터를 데이터베이스에 마지막으로 반영하는 역할
COMMIT [WORK] [TO SAVEPOINT 세이브포인트 명]
;
- ROLLBACK : 변경한 데이터를 변경하기 이전 상태로 되돌리는 역할
ROLLBACK [WORK] [TO SAVEPOINT 세이브포인트 명]
;
- TRUNCATE : TRUNCATE문을 한번 실행하면 데이터가 바로 삭제 되고, DELETE와 다르게 ROLLBACK을 실행하더라도 삭제 전 상태로 복귀 되지 않는다. 또한 DELETE문 처럼 WHERE절을 붙여 특정 조건에 해당되는 데이터만 삭제 할 수 없다. 쓰레기 데이터 삭제할 사용. 완전 삭제임. 조심해서 사용해야함.
TRUNCATE TABLE [스키마명.] 테이블명
;
6. 의사컬럼 : 컬럼 처럼 사용
: 데이터를 저장하는 최소단위 .
컬럼은 물리적으로 존재하지만 의사 컬럼은 물리적으로 존재x
SELECT문에서는 의사컬럼을 사용O
INSERT, UPDATE, DELETE에선 사용X
- ROWNUM
- ROWID
- ROWNUM: ROW단위 컬럼을 SELECT할 때 마다 ROWNUM value 발생. 1부터 시작하는 일련 번호
주의! ROWNUM은 비교연산자, 크다 등호 사용X
ROWNUM < 6 (O) :
ROWNUM = 6 (X) : ROW가 들어올 때마다 1로 구분하기 때문
ROWNUM > 6 (X) : 새로 추가된 1의 ROW가 6이상 수가 될 수 영원히 없음.
- ROWID: 테이블에 저장된 각 ROW가 저장된 주소 값. 각 로우를 식별하는 값이므로 유일한 값을 가진다. FIXED됨.
#예제
SELECT ROWNUM, employee_id ROWID
FROM employees
WHERE ROWNUM < 5;
7. 연산자
- 수식 연산자 : +, -, *, /
- 비교 연산자 : >, <, >=, <=, = (비교연산자), <> (동일), != (Not)
- 논리 연산자 : AND (둘 다 T → T), OR (둘 중 T → T), NOT ( T → F, F → T)
- 집합 연산자 : Table의 합집합- UNION, UNION ALL / Table의 교집합- INTERSECT / Table의 차집합- MINUS
8. 표현식
Expression이란 한 개 이상의 값과 연산, SQL 함수 등이 결합된 식
CASE 표현식*
CASE WHEN 조건1 THEN 값1
WHEN 조건2 THEN 값2
...
ELSE 기타 값
END // Oracle에선 end로 마무리 해야함 안 그러면 error
SELECT employee_id,
salary,
CASE
WHEN salary <= 5000
THEN 'C등급',
WHEN salary > 5000
AND salary <= 15000
THEN 'B등급',
ELSE 'A등급'
END AS salary_grade
FROM employees;
SELECT a.EMPLOYEE_ID,
a.SALARY
FROM EMPLOYEES a
WHERE ROWNUM < 6;
SELECT a.EMPLOYEE_ID ,
a.SALARY ,
CASE
WHEN a.SALARY <= 5000
THEN 'A'
WHEN a.SALARY > 5000
AND a.SALARY <= 15000
THEN 'B'
ELSE 'C'
-- WHEN a.SALARY > 15000 THEN 'C'
END
FROM EMPLOYEES a
WHERE ROWNUM < 6 ;
9. 조건식
ALSE, UNKNOWN 타입으로 반환
WHERE절에서 사용되었던 모든 조건이 조건식에 포함됨
비교 조건식 : 논리 연산자나 ANY, ALL키워드로 비교하는 조건식
ANY가 '아무것'이나 '하나'란 뜻
SELECT EMPLOYEE_ID, SALARY
FROM EMPLOYEES
WHERE SALARY = ANY (2000, 3000, 4000)
/* SALARY = 2000
OR SALARY = 3000
OR SALARY = 3000 내용이 이하동일
*/
ORDER BY EMPLOYEE_ID;
> SQLGATE
-- DB, ML ,DL : 가장 중요한 것은 데이터의 구조와 의미 파악 우선되어야 한다.
-- 컬럼(Column) => 특성(Feature)
-- 급여(연봉) 5000불 이상인 사원번호, 사원명 조회
-- 1. 테이블 찾기 : employees table
-- 2. 해당 컬럼 정리 : salary, employee_id, emp_name
SELECT employee_id, emp_name, salary
FROM EMPLOYEES
WHERE SALARY > 5000 --> Row 선택
ORDER BY employee_id ASC -- 사원번호 ASC 정렬 => 입사순 출력 =>
;
SELECT * FROM EMPLOYEES;
-- 문제 : 급여가 5000이상이고 업무 'it_prog' 인 사원번호, 사원명 조회
SELECT a.EMPLOYEE_ID, a.EMP_NAME, a.SALARY
FROM EMPLOYEES a
WHERE a.SALARY > 5000
AND a.JOB_ID = 'IT_PROG' -- 문자열 값은 대소문자를 따진다.
ORDER BY a.EMPLOYEE_ID
;
SELECT a.EMPLOYEE_ID, a.EMP_NAME, a.SALARY
FROM EMPLOYEES a
WHERE a.JOB_ID = 'IT_PROG'
ORDER BY a.EMPLOYEE_ID
;
-- emp, dept
SELECT emp.empno, emp.empnm
FROM EMP
;
SELECT e.EMPNO, e.EMPNM
FROM emp e -- 테이블의 별칭
;
SELECT e.EMPNO AS "사원번호" -- 컬럼 별칭 부여
, e.EMPNM AS "사원명" -- 컬럼 별칭 부여시 "" 사용
FROM EMP e -- 테이블 별칭 부여
;
-- 데이터 복사 : insert select문
CREATE TABLE ex3_2(
empid NUMBER
, emp_name VARCHAR2(100)
);
-- 사원테이블에서 급여 5000이상인 사원번호, 사원명 추출
-- => ex3_2 테이블 데이터 복사
INSERT INTO ex3_2
SELECT a.EMPLOYEE_ID, a.EMP_NAME
FROM EMPLOYEES a
WHERE a.SALARY > 5000
;
SELECT * FROM ex3_2;
-- CTAS
CREATE TABLE ex33
AS
SELECT a.EMPLOYEE_ID, a.EMP_NAME
FROM EMPLOYEES a
WHERE a.SALARY > 5000
;
SELECT * FROM ex33;
-- create table ex3_4 => DDL
CREATE TABLE ex3_4(
employee_id number
);
-- 데이터 추가 => insert => transaction start
INSERT INTO ex3_4 VALUES(100);
SELECT * FROM ex3_4;
-- disk 반영
COMMIT; -- Transaction end
INSERT INTO ex3_4 VALUES(200); -- Transaction start
INSERT INTO ex3_4 VALUES(300);
SELECT * FROM ex3_4;
ROLLBACK; -- Transaction end
SELECT * FROM ex3_4;
INSERT INTO ex3_4 VALUES(400);
COMMIT;
'Computer > DB' 카테고리의 다른 글
수정할 거임 0802 (0) | 2022.08.02 |
---|---|
DB#CH06. 조인과 서브쿼리 이해 (0) | 2022.07.29 |
DB#CH05. 그룹 쿼리와 집합 연산자 이해 (0) | 2022.07.28 |
DB#CH04. SQL 함수 이해 (0) | 2022.07.27 |
DB#CH02. 데이터베이스를 구성하는 객체 이해 (0) | 2022.07.26 |