# 이름 Davies인 사람보다 후에 고용된 사원들의 이름 및 고용일자를 출력하시오. 고용일자를 역순으로 출력
SELECT last_name, hire_date
FROM employees
WHERE hire_date > (SELECT hire_date
FROM employees
WHERE last_name = 'Davies')
ORDER BY hire_date DESC
# King을 매니저로 두고 있는 모든 사원들의 이름 및 급여를 출력하시오.
SELECT last_name
FROM employees
WHERE last_name = 'King'
# 회사 전체 평균급여보다 더 많이 받는 사원들 중 이름이 u가 있는 사원들이 근무하는
부서에 근무하는 사원들의 사번, 이름 및 급여를 출력하시오.
SELECT DISTINCT employee_id, last_name, salary
FROM employees
WHERE department_id IN ( SELECT department_id
FROM employees
WHERE salary > (SELECT AVG(salary)
FROM employees)
AND last_name LIKE '%u%')
1권 318페이지
# DML
트랜잭션 : SQL만 트랜잭션 작동할 수 있음
COMMIT, ROLLBACK
# selects는 검색만 하고 트랜잭션 작동 못함
# 트랜잭션 작동
DML : insert, update, delete
문장 전체를 하나의 트랜잭션으로 인식
DDL : create
실행과 동시 OP COMMIT
DCL : grant
실행과 동시 OP COMMIT
트랜잭션은 사이즈가 작으면 좋음
트랜잭션 : 자동 종료 - Auto COMMIT : 새로운 트랜잭션이 발생하면 앞의 트랜잭션이 DB 바로 저장
수동 종료 - 명령어를 입력하여 COMMIT
INSERT : ROLLBACK하면 저장 안됨, 트랜잭션 취소
COMMIT하면 수동 저장
CREATE하면 자동 저장
# 행 추가, 정렬은 안해줌
insert into departments(department_id, department_name)
2 values(280, 'tyktyk')
3 ;
select * from departments
rollback;
# 오늘 날짜
select sysdate from dual;
select * from dual;
외부에서 값을 받아들이는 dual함수
# 저장되지 않은 값을 쓰게 해주는 dual
select 1345*456 from dual;
insert into departments
values(&a, '&b', &c, &d);
Enter value for a: 300
Enter value for b: aa
Enter value for c: 100
Enter value for d: 1700
old 2: values(&a, '&b', &c, &d)
new 2: values(300, 'aa', 100, 1700)
에디터 기능
# 동시 다수 스크립트 파일 실행
save empinsert.sql
Created file empinsert.sql
C:\oraclexe\app\oracle\product\11.2.0\server\bin
empinsert.txt 실행
INSERT 행 삽입
DELETE 행 삭제
UPDATE는 다른 문장과 달리 COLUMN기준
update employees
set salary = 200000;
107 rows updated.
select salary
from employees;
# 1번 커맨드, 2번 커맨드
# 사번 141의 급여
SELECT salary
FROM employees
WHERE employee_id = 141;
# 1번 커맨드
# 급여 올려주기
UPDATE employees
SET salary = 350000
WHERE employee_id = 141;
# 1번 커맨드, 2번 커맨드
# 사번 141의 급여
SELECT salary
FROM employees
WHERE employee_id = 141;
# 데이터베이스 일관성 : 다른 Run SQL Command Line에서 변경이 일어나도 변경되기 이전의 값으로 일관성 유지
# 2번 커맨드
UPDATE employees
SET salary = 400000
WHERE employee_id = 141;
# 결과 안 나오고 커서
# 병행제어 : 트랜잭션 작성 중인 프로세스가 종료될 떄 까지 락 설정하여 대기 설정
deadlock : 서로의 자원을 요구
rollback 처리
트랜잭션을 작게 나누어서 사용하는 것을 권장 : 동시성 향상
1권 170페이지
# 테이블 생성 및 관리
# 사용자 테이블만들기
테이블은 사용자 명이 생략되어있다. hr.employees,
CREATE table test
(a number(3)
,b character(3));
Table created.
DESC test;
select *
from test;
--
no rows selected
insert into test
values (10, 'bb');
SELECT *
FROM test;
COMMIT;
# 딕셔너리 질의
user_ : 내가 소유한거 (hr)
all_ : 내가 엑세스 가능한 거 (system)
dba_ : db의 전체
char(5) : 미리 5칸 저장공간 확보, 성능 향상, 저장공간 낭비, 돈 많이 필요
varchar() : 크기를 보고 천천히 저자공간 할당, 성능저하, 저장공간 좋음
number - 안 씀
number(p) - 정수만 가능
number(p,s) - 최대 9자리, 두번쨰 자리는 소수점자리
Programming/Database