# 오라클 실행
Oracle database 11g Express Edition 폴더
Run SQL Command Line 실행
# SQl문은 세미콜론(;)으로 문장이 종결됨 - 문장 종결자
# 커넥팅하기
conn system / 12345
# hr로 접속
conn hr/hr
# 가장 상위 관리자로 커넥팅하기
conn / as sysdba
# 접속 유저 변경
alter user system
identified by 12345;
# 계정 잠겨있는 hr 유저를 풀어줌
alter user hr account unlock;
# hr 유저를 비밀번호 hr로 바꿈
alter user hr identified by hr;
# 3권 55페이지
# 테이블명 외워오기
# DEPARTMENT TABLE
DEPARTMENT_ID : PRIMARY KEY, NUMBER(4), 4자리까지 숫자 저장
NAME : VARCHAR(30), 30자리 문자
MANAGER_ID : 6자리 숫자, 관리자 번호, 담당 관리자가 비어있으면 회장님임
LOCATION_ID : LOCATIONS TABLE의 FOREIGN KEY, 4자리 문자, 지역번호
# EMPLOYEE TABLE
EMPLOYEE_ID : PRIMARY KEY
HIRE_DATE : 입사 날짜
JOB_ID : 업무
SALARY : 급여
COMMISION_PCT : 보너스
DEPARMENT_ID : DEPARTMENT TABLE의 FOREIGN KEY
# LOCATIONS TABLE
LOCATION_ID : PRIMARY KEY
# department 테이블 구조 확인(desc; describe)
DESC departments
# 항목 보여주기
SELECT * from departments;
# 설정을 보기 좋게 편집
COLUMN department_name format a16
COLUMN 명령어 : 현재 화면에 표현되는 것의 사이즈를 조정
다시 명령프롬프트 실행시키면 초기화되어있다.
alphatbet 16 : 문자를 16자리로 조정하겠다.
# 명령어 ed(에디터의 약자) - 가장 마지막에 실행시켰던 sql 문장 하나를 sql broughter 저장공간에서 가져와 메모장에 표기하여 실행
오타 났을 때 ed를 명령해서 에디터를 가져와서 수정할 때 써라
# 실행명령어 /(슬래시)
1권 47페이지
# 데이터베이스는 SQL을 통해서만 다룰 수 있다.
# ANSI가 만든 표준 SQL1999를 기준으로 오라클과 같은 회사들은 자신들의 제품과 호환이 잘 되도록 문법을 조금 바꿈
# SQL
데이터 검색 SELECT
데이터 조작 INSERT, UPDATE, DELETE, MERGE
데이터 정의 CREATE, ALTER, DROP, RENAME, TRUNCATE
트랜잭션 제어 COMMIT, ROLLBACK, SAVEPOINT
데이터 제어 GRANT, REVOKE
# SELECT
SELECTION 테이블을 구성하는 모든 컬럼에 있는 모든 데이터를 볼 때 사용
PROJECTION 특정 컬럼에 대한 데이터를 볼 때 사용
JOIN 여러 개의 테이블에서 데이터를 검색
# SELECT와 FROM을 항상 포함하여 명령한다.
# ;으로 마무리
# SELECT절 : select list(보고 싶은 데이터가 있는 컬럼이름) - 창고 이름
FROM절 : select list가 있는 table이름 - 지역 이름
# 예제
SELECT last_name
FROM employees;
COLUMN last_name format a10/
# 예제
SELECT *
FROM departments;
출력 값인 27 rows selected.는 부서가 27개 있다는 것을 의미
# 예제
SELECT *
FROM employees;
출력 값이 107 rows selected.는 사원이 107명이라는 것을 의미
# * 대신 컬럼 이름을 다 입력해도 됨
SELECT department_id, department_name, manager_id, location_id
FROM departments;
# 컬럼의 순서를 다르게 쓰면 그 순서로 출력
첫 번째 컬럼을 어떤 것으로 잡느냐가 현업에서 중요한 이슈
SELECT manager_id, department_id, department_name, location_id
FROM departments;
# 특정컬럼 뽑아내기
예제 : 우리회사에 근무하는 사원의 이름과 월급, 그 사원이 근무하는 부서 번호를 출력하시오.
SELECT last_name, salary, department_id
FROM employees;
# SQL은 대소문자 구별 안하지만
SELECT나 FROM과 같은 명령문은 대문자
column명은 소문자로 현업에서 적어줌
성능을 생각해서 함
# PARSE(파싱)
1. 검증 : 검색하는 열이 테이블에 있는가 체크
2. 실행계획 : 테이블에서 데이터를 어떻게 가져올 것인지 최적 경로를 설정
3. 실행 : 데이터를 가져오기
# 오라클에서 data dictionary(D.D)로 파싱 결과를 저장한다.
파싱하기 전 data dictionary 안을 먼저 찾아보고 전에 했던 동일한 작업(아스키코드가 같음)이면 파싱 안하고 재실행
대소문자가 다르면 아스키코드가 다르므로 재실행을 못하고 파싱을하여 느리게 실행한다.
성능을 생각해서 대소문자를 구분하여 작성한다.
# 정렬만 보고 문자, 숫자 판단
컬럼헤딩 : 컬럼명은 대문자로 출력된다
문자, 날짜값 : 왼쪽 정렬
숫자값 : 오른쪽 정렬
# SELECT문은 산술 연산을 할 수 있음
예제 : 우리 회사에 근무하는 사원의 이름과 그 사원이 받는 월급여를 출력하시오.
SELECT last_name, salary
FROM employees;
예제 : 우리 회사에 근무하는 사원의 이름과 그 사원이 받는 연봉을 출력하시오.
SELECT last_name, 12 * salary
FROM employees;
컬럼과 컬럼의 산술 연산도 가능함
but, 문자값에 대해서는 산술연산을 할 수 없음
날짜값에 대해서는 '+'와 '-'로 앞뒤로 이동 연산만 하고 '*'와 '/'는 할 수 없음
# NULL값과의 산술 연산은 NULL임
SELECT last_name, job_id, salary * commission_pct
FROM employees;
해결 : nvl(컬럼명, 1)로 null값은 1으로 바꿔주고 보너스 포함
SELECT last_name, job_id, salary * (1 + nvl(commission_pct,1))
FROM employees;
# salary * nvl(commission_pct,1) 컬럼헤딩을 알기 쉽게 이름 바꿈
SELECT last_name, job_id, 12 * salary as annsal
FROM employees;
# 컬럼의 이름을 바꾸는 명령어가 없음
# alias는 컬럼의 헤딩을 바꿔줌
# AS나 공백(blank)로 컬럼 헤딩 변경
1. 12 * salary AS Annsal - 추천(data dictionary가 alias로 바로 인식)
2. 12 * salary Annsal - 컬럼 이름으로 인식하고 찾다가 alias로 인식하여 설정(성능 안좋다.)
출력이 되는 컬럼 헤딩을 변경
SELECT last_name AS name, commission_pct comm
FROM employees;
3. 변경되는 컬럼헤딩의 소문자와 띄어쓰기를 포함하고 싶으면 ""로 Alias 사용
SELECT last_name "Name", salary * 12 "Annual Salary"
FROM employees;
# DISTINCT : 중복 제거
SELECT문에서 단 한번 사용할 수 있음
중복 제거해서 부서개수를 파악하려 DISTINCT를 써서 rows selected를 확인하고
개수에서 부서를 배정받지 못한 null값을 빼서 개수를 산정(빼기 1)
여러 개의 컬럼을 DISTINCT하면 첫 번째 컬럼을 기준으로 그룹화하여 전체 적용
distinct는 항상 select 바로 뒤로 작성
# SQL prompt는 보안에 강함
1권 92페이지
# WHERE : 행을 제한
조건 추가
예제 : 우리회사에 90번 부서에 근무하는 사원의이름과 그 사원이 받는 연봉을 출력하시오
SELECT last_name, 12 * salary
FROM employees
WHERE department_id = 90;
# 날짜와 문자값은 반드시 ''로 표기해야함
모든 컬럼과 테이블 이름은 문자로 표기
# no row selected 오류 : 실제 값과 대소문자가 달라 찾을 수 없음
# WHERE절에 쓰는 연산자 <> 또는 !=가 '같지 않음'임
단일 연산자 (인자 2개) : =
복수 연산자 (인자 3개 이상) : IN
# 예제 : 연봉이 120000 이상인 사원의 이름과 연봉을 출력하시오. 단, 연봉은 AnnSal로 출력하시오.
SELECT last_name, salary * 12 AS "AnnSal"
FROM employees
WHERE salary *12 >= 120000
# BETWEEN AND : 둘 값 사이의 조건
SELECT last_name, salary
FROM employees
WHERE salary BETWEEN 2500 AND 3500;
# IN : 값에 포함되는 데이터 조건
SELECT employee_id, last_name, salary, manager_id
FROM employees
WHERE manager_id IN (100, 101, 201);
# LIKE : 문자로 시작하고 끝나는 값 찾기
''로 묶어서 표기
문장 전체 : %
문자 하나 : _
예제 : 2005년에 입사한 사원의 이름과 입사일을 출력하시오.
년 월 일 표기
SELECT last_name, hire_date
FROM employees
WHERE hire_date LIKE '05%';
Programming/Database