SQL 명령어 훑기 (키워드/예제 중심)


SQL 명령어 상기시키기

  • DDL, DML, DCL, TCL 명령어와 예제들

  • t재귀함수를 활용한 하노이 탑 풀이


SQL 문장들의 종류에는 DDL, DML, DCL, TCL이 있다.

DDL (Data Definition)

[CREATE]

  • 데이터 유형
    • CHARACTER - 고정 길이
    • VARCHAR(n) - 가변 길이
    • NUMERIC/INTEGER/FLOAT/…
    • DATE
  • 제약조건 (constraints)
    • NOT NULL
    • UNIQUE KEY - null있어도 괜찮지만 중복허가 X
    • PRIMARY KEY - not null & unique
    • FOREIGN KEY
    • CHECK - 특정 condition 만족 확인
    • DEFAULT - default로 들어가는 값 설정
CREATE TABLE employees(
	id			INTEGER	    PRIMARY KEY,
	first_name 	VARCHAR(50)	NOT NULL,
    last_name 	VARCHAR(50)	NOT NULL,
    fname 		VARCHAR(50)	NOT NULL,
    dateofbirth	DATE 		NOT NULL
);

[DROP]

테이블 초기화(destroys an existing DB)

DROP TABLE employees;

[TRUNCATE]

테이블 내의 모든 행 제거 BUT 구조만 남김

TRUNCATE TABLE employees;

[ALTER]

column 추가/삭제/변경

  • ADD COLUMN
ALTER TABLE sink ADD bubbles INTEGER;
  • DROP COLUMN
ALTER TABLE sink DROP COLUMN bubbles;
  • MODIFY COLUMN
ALTER TABLE sink MODIFY COLUMN bubb FLOAT;
  • DROP CONSTRAINT
ALTER TABLE sink DROP CONSTRAINT last_name;
  • ADD CONSTRAINT
ALTER TABLE sink ADD CONSTRAINT first_name PRIMARY KEY(first_name);

DML(Data Manipulation)

[INSERT]

데이터 입력할 때 사용

  • 입력 column 지정해서 입력할 때

    INSERT INTO phone_book (name, number) VALUES ('John', '555-1212');
    
  • 입력되는 column들이 다 해당될 때

    INSERT INTO phone_book VALUES ('John', 'Seoul', '555-1212');
    

[SELECT]

데이터 가져올 때 사용

SELECT name, city FROM customers;
SELECT * FROM customers;
  • w/ parameters
SELECT city, state, count(city) '도시카운트'
FROM customers
WHERE state LIKE 'A%'
GROUP BY city
HAVING count(city)>5
ORDER BY state;

파라미터(WHERE, GROUP BY, HAVING, ORDER BY, …) 에 대한 정보는 여기

DELETE

데이터 행 삭제할 때 사용

  • 주의 : WHERE절이 없으면 모든 데이터가 지워지는 참사가..
DELETE FROM mytable
WHERE mycol>100 AND item = 'Hammer';

UPDATE

데이터 변경할 때 사용

  • 주의 : WHERE절이 없으면 모든 데이터가 바뀌는 참사가..
UPDATE customer
SET name = "Alfredo", city="New York"
WHERE customerID = 1;

tip) DELETE 와 UPDATE의 경우 쓰기 이전에 SELECT절을 통해 데이터가 존재하는지 확인하는게 좋다.

  • JOINS

    • PK 와 FK를 이용해 테이블을 합치는 과정

    • CROSS JOIN : 모든 조합 다만들어냄

      image-20200714105751356

      SELECT *
      FROM employee CROSS JOIN department;
      
    • INNER JOIN

    • LEFT / RIGHT / FULL OUTER JOIN

    • ON 테이블1.id = 테이블2.id

      (Inner Join 예시)

      SELECT orders.orderID, customer.name, orders.orderdate
      FROM orders INNER JOIN customer ON orders.orderID=customer.ID; 
      

      (Outer Join 예시)

      SELECT *
      FROM employee FULL OUTER JOIN department ON employee.dID = department.dID;
      

      image-20200714110107177

[DCL (Data Control)]

유저/OBJECT/ROLE를 생성하고 권한을 제어하는 명령어

**CREATE USEROBJECTROLE**

유저 생성할 때 사용

CREATE USER pjs IDENTIFIED BY korea;

GRANT CREATE USER

유저 생성 권한을 부여할 때 사용

GRANT CREATE USER TO scott;

GRANT CREATE SESSION

로그인 권한 부여할 때 사용

GRANT CREATE SESSION TO pjs;

GRANT CREATE TABLE

테이블 생성 권한을 부여할 때 사용

GRANT CREATE TABLE TO pjs;

[TCL (Transaction Control)]

트랜잭션 = 분리될 수 없는 DB 조작 단위

트랜잭션의 특성인 atomicity, consistency, isolation, durability (ACID)를 만족시키며 이행하는 명령어

  • atomicity (원자성) : “all or nothing” - 다 수행되거나 아예 수행 안되거나
  • consistency (일관성) : 트랜잭션 실행결과는 바뀌지 X
  • isolation (고립성) : 트랜잭션끼리 서로 방해하지 X
  • durability (지속성) : 트랜잭션 한번 끝나면, system fail 해도 영구적으로 저장된다.

COMMIT

ROLLBACK

SAVEPOINT

rollback할 때 savepoint 까지만 복구하도록 한다.

SAVE TRANSACTION svpt;
...
ROLLBACK TRANSACTION svpt;

(DCL, TCL에 관한 사항은 추후 업뎃 예정)




© by Jihye Kwon