SQL-DAY 1

BUMSOO·2024년 6월 10일

SQL(Structured Query Language)

  • 데이터베이스에서 데이터를 정의,조작,제어하기 위해 사용하는 언어
  • ANSI(American National Standards Institude) 표준어인 SQL를 사용한다.

DQL(Data Query Language)

  • 데이터베이스에 저장된 데이터를 조회하는 명령어
  • select

DML(Data Manipulation Language)

  • 데이터베이스에 데이터를 입력, 수정 ,삭제하는 명령어
  • insert, update, delete, merge

TCL(Transaction Control Language)

  • 데이터의 일관성을 유지하면서 안정적으로 데이터를 복구시키기 위한 명렁어
  • commit, rollback, savepoint

DCL(Data Control Language)

  • 데이터베이스에 저장된 데이터를 관리하기 위하여 데이터의 보안성 제어하기 위한 명령 권한관리
  • grant, revoke

DDL(Data Definition Language)

  • 데이터베이스나 테이블등을 생성, 삭제하거나 그 구조를 변경하기 위한 명령어
  • create,alter,drop, truncate, rename, comment

SELECT문

데이터베이스에서 데이터를 검색하는 명령어이다.

  • projection : query(쿼리)에 의해 반환되는 테이블의 열을 선택한다. 열 추출

    	select employee_id from employees;
  • selection : query(쿼리)에 의해 반환되는 테이블의 행을 선택한다. 행 추출

    	select * from employees where employee_id=100;
  • join : 서로 다른 테이블에서 내가 원하는 데이터를 추출

	select e.employee_id, d.department_name
	from employees e, departments d 
	where e.department_id = d.department_id;

SQL문 작성시 주의점(성능의 관점)

  1. SQL문은 대소문자를 구분하지 않습니다.
  • 하지만 성능의 관점에서 생각하면 대소문자를 구분해서 수행하자.
    대소문자 구분하지 않을경우 실행계획을 공유하지 않아 메모리 과다사용됨
  1. 공백문자는 구분한다.

    select employee_id,last_name from employees;    	
    select employee_id,  last_name from employees;
  • 이 또한 마찬가지로 실행계획을 공유하지 않아 메모리 과다사용됨
  1. tab key, enter key 구분한다.

    select employee_id, last_name from employees;
    
    select employee_id, last_name 
    from employees;
  • 서로다른 절은 다음절로 작성하는 습관을 갖자

SQL문 작성할때 규칙적으로 작성하자.

  1. 대소문자를 구분 지어서 작성하자.
  2. 절은 서로 다른 줄에 작성하자.
  3. 주석처리 잘하자.
    주석
    한행 주석 --
    여러행 주석 /* */
  4. SQL문 제일 뒤에는 ;종료하자

산술연산자

*,/,+,-

-NUMBER : *,/,+,-
-DATE : +,-
-VARCHAR2, CHAR : 사칙연산 불가능

사칙연산 우선순위

1순위 *,/ 동급
2순위 +,- 동급

dual(dummy table,가상테이블) : 오라클에서는 from dual이 필수, 다른 DBMS에서는 생략가능

desc : describe

데이터품질, OLTP, OLAP

null

  • null은 사용할 수 없거나, 할당되지 않았거나, 알수 없거나, 적용할 수 없는 값, 계산할 수 없다.
  • 결측값, 결측치
  • null은 0, 공백이 아니다.

pl/sql 조건제어문

if commission_pct is null then
0;
else
commission_pct;
end if

NVL

SELECT
employee_id,
salary,
commission_pct,
((salary 12) + (salary 12 * nvl(commission_pct,0)) as res
FROM hr.employees;

열별칭

  • 열이름을 다른 이름으로 출력한다.
  • 열이름 바로 뒤에 한칸 띄어쓰기를 한 후 입력하면 된다
  • 열이름과 열 별칭 사이에는 as키워드를 사용할 수 있다(선택)
  • 열별칭에 공백,특수문자(_,#,$제외한), 대소문자를 구분하려면 큰따옴표로 묶어야 한다.
  • 열별칭에 숫자가 먼저 나오면 큰따옴표로 묶어야 한다.

연결연산자

  • 열(컬럼)이나 문자열을 다른 열(컬럼)에 연결할때 사용
  • 두개의 세로선(||)으로 표현한다.
  • 컬럼과 컬럼은 문자열로 생성된다.

리터럴문자

  • 작은 따옴표로 묶어 있는 문자를 리터럴 문자열이라고 한다.
    SELECT '사원 번호는 '|| employee_id ||' 입니다.'
    FROM hr.employees;

  • 작은 따옴표를 리터럴문자로 보는게 아니라 단어로 보고 싶을때
    '(')

  • q의 활용
    q'[리터럴문자]'
    q'<리터럴문자>'
    q'{리터럴문자}'
    q'(리터럴문자)'
    q'!리터럴문자!'

중복행 제거

  • distinct 키워드를 이용해서 중복을 제거할 수 있다.
  • distinct 키워드는 SELECT절 제일 앞에 한번만 기술해야 한다.
  • unique 키워드를 이용해서 중복을 제거할 수 있다.

[문제1]

employees 테이블에서 employee_id, last_name과 first_name은 연결해서 표시하고(공백으로 구분) 열 별칭은 화면 결과처럼 쿼리문을 작성해 주세요.

<화면결과>

Emp#Employee Name
100King Steven
101Kochhar Neena
102De Haan Lex
select 
    employee_id as "Emp#", last_name || ' ' || first_name as "Employee Name"
from hr.employees;

[문제2]

employees 테이블에서 컬럼중에 last_name, job_id를 연결해서 표시하고(쉼표와 공백으로 구분) 열 별칭은 화면 결과처럼 쿼리문을 작성하세요.

<화면결과>

Employee and Title
Abel, SA_REP
Ande, SA_REP
select 
    last_name || ',' || ' ' ||  job_id as "Employee and Title"
from hr.employees;

[문제3]

departments 테이블에 있는 데이터에서 department_name , manager_id 칼럼을 가지고 화면결과 처럼 출력하는 쿼리문을 작성하세요.

<화면결과>

Department and Manager
Administration Department's Manager Id: 200
Marketing Department's Manager Id: 201
with
temp_01 as (
select 
    department_name || q'[ Department's Manager Id: ]' || manager_id as "Department and Manager"
    ,row_number() over (order by department_name || q'[ Department's Manager Id: ]' || manager_id) as rnum
from hr.departments
)
select "Department and Manager" from temp_01 where rnum <=2; 

0개의 댓글