본문 바로가기

Programming/Database

데이터베이스 2강

# 오라클 실행
  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' 카테고리의 다른 글

데이터베이스 6강  (0) 2020.03.10
데이터베이스 5강  (0) 2020.03.10
데이터베이스 4강  (0) 2020.03.10
데이터베이스 3강  (0) 2020.03.10
데이터베이스 1강  (0) 2020.03.10