쿼리문 작성 방법을 알아보자

0taetae·2024년 12월 26일
post-thumbnail
  1. DDL
    • CREATE, ALTER, DROP
  2. DML
    • SELECT, INSERT, UPDATE, DELETE
  3. DCL
    • GRANT, REVOKE
  4. TCL
    • COMMIT, ROLLBACK

📙CREATE

💡Primary Key란?

  • table의 튜플을 식별하기 위해 사용한다.
  • 하나 이상의 속성으로 구성한다.
  • 중복된 값을 가질 수 없으며, Null도 값으로 가질 수 없다.
  • Primary Key를 선언하는 방법
    1. attribute 하나로 구성
      create table PLAYER(
      	id INT PRIMARY KEY
      );
    2. attribute를 두개 이상으로 구성
       create table PLAYER(
          id VARCHAR(12),
          number INT,
       
          PRIMARY KEY(id, number)
       );

💡Unique란?

  • 중복된 값을 가질 수 없다.
  • Null은 중복을 허용한다. (✔️단, RDBMS마다 다름 주의!!)
  • Unique Key를 선언하는 방법
    1. attribute 하나로 구성
      create table PLAYER(
      	id INT UNIQUE
      );
    2. attribute 두개 이상으로 구성
       create table PLAYER(
          id VARCHAR(12),
          number INT,
       
          UNIQUE(id, number)
       );
      

💡NOT NULL 제약사항

  • attribute가 NOT NULL로 지정되면 해당 attribute는 NULL을 값으로 가질 수 없다.
create table Student(
	number INT NOT NULL UNIQUE,
);
✔️ UNIQUE의 경우 NULL을 중복 허용
 -> NOT NULL과 UNIQUE를 주로 같이 많이 사용

💡attribute DEFAULT이란?

  • attribute의 default 값을 정의할 때 사용한다.
  • 새로운 튜플을 저장할 때, 해당 attribute에 대한 값이 없다면, default 값으로 저장한다.
  • DEFAULT 선언하는 방법
create table Orders (
 menu VARCHAR(15) DEFAULT '짜장면'
);

💡CHECK 제약사항

  • attribute의 값을 제한하고 싶을 때 사용한다.
  • CHECK를 선언하는 방법
    1. attribute 하나로 구성
      create table EMPLOYEE(
      	age INT CHECK(age>=20)
      );
    2. attribute 두개 이상으로 구성
       create table EMPLOYEE(
       	start_date DATE,
           end_date DATE,
           
           CHECK(start_date <= end_date)
       );

💡참조 무결성 제약조건 : FOREIGN KEY

  • attribute가 다른 table의 primary key나 unique key를 참조할 때 사용한다.
  • FOREIGN KEY를 선언하는 방법
create table Employee(
	dept_id INT,
    FOREIGN KEY(dept_id)
    	references DEPARTMENT(id)
        on delete reference_option
        on update reference_option
);

✔️ reference_option

  • CASCADE : 참조값의 삭제/변경을 그대로 반영
  • SET NULL : 참조값이 삭제/변경 시 NULL로 변경
  • RESTRICT : 참조값이 삭제/변경되는 것을 금지
  • NO ACTION : RESTRICT와 유사
  • SET DEFAULT : 참조값이 삭제/변경 시 default 값으로 변경

💡constraint 이름 명시하기

  • 이름을 붙이면 constraint을 위반했는지 쉽게 파악할 수 있다.
  • constraint를 삭제하고 싶을 때 해당 이름으로 삭제 가능
create table TEST(
	age INT CONSTRINT age_over_20 CHECK(age>20)
);

📙ALTER

💡ALTER 사용 유형

  1. attribute 추가

    ALTER TABLE employee ADD blood VARCHAR(2);
  2. attribute 이름 변경

    ALTER TABLE employee RENAME COLUMN phone TO phone_num;
  3. attribute 타입 변경

    ALTER TABLE employee MODIFY COLUMN blood CHAR(2);
  4. table 이름 변경

    ALTER TABLE logs RENAME TO backend_logs;
  5. primary key 추가

    ALTER TABLE log ADD PRIMARY KEY (id);

🌟 ALTER TABLE로 인해 백엔드에 영향이 없을지 검토한 후 변경하는 것이 중요하다.

📙DROP

  • table 삭제할 때 사용한다.
DROP TABLE table_name;

📙SELECT

  • 데이터 조회할 때 사용
  • WHERE 절이 없는 경우, 테이블에 있는 모든 tuples를 반환

💡SELECT 작성 방법

SELECT attribute(s) 
FROM table(s) 
[WHERE conditioin(s)];

💡SELECT 관련 keyword

  • AS

    • 테이블이나 attribute에 별칭(Alias)을 붙일 때 사용
    • AS는 생략 가능하다.
      SELECT E.id, E.name, position
      FROM project AS P, employee AS E
      WHERE P.id = 2002 and P.leader_id=E.id;
  • DISTINCT

    • select 결과에서 중복되는 tuples는 제외하고 싶을 때 사용
      SELECT DISTINCT P.id P.name
      FROM employee AS E, works_on AS W, project AS P
      WHERE E.position = 'DSGN' and E.id = W.empl_id 
      and W.proj_id = P.id;
  • LIKE

    • 문자열 pattern matching에 사용
    • reserved character
      • % : 0개 이상의 임의의 개수를 가지는 문자들
      • _ : 하나의 문자
    • escape character
      • \ : 예약 문자를 escape 시켜서 문자 본연의 문자로 사용하고 싶을 때 사용
    • 이름에 NG가 포함된 경우
      SELECT name
      FROM employee
      WHERE name LIKE '%NG%';
    • %로 시작하거나 _로 끝나느 경우
      SELECT name
      FROM employee
      WHERE name LIKE '\%%' or name LIKE '%\_';
    • (asterisk)
    • 테이블의 모든 attributes를 알고 싶을 때

📙INSERT

  • 데이터를 추가할 때 사용

💡INSERT 작성 방법

  1. 테이블을 생성할 때 모든 attribute 순서대로 데이터를 추가할 때
INSERT INFO employee(name, birth_date, sex, position, id) 
VALUES('JENNY', '2000-10-10','F', 'DEV_BACK',3);
  1. 원하는 attribute만 원하는 순서로 데이터를 추가할 때
INSERT INTO table_name(attributes list)
VALUES(attributest list 순서와 동일하게);
  1. 한번에 한 테이블에 여러개의 데이터를 추가할 때
INSERT INTO table_name VALUES (  ,  ), (  ,  );

📙UPDATE

💡UPDATE 작성 방법

UPDATE table_name(s)
SET attribute = value[attribute = value,..]
[WHERE conditions(s)];

💡UPDATE 예시

  • id가 1인 사람의 소속팀 id를 1003으로 업데이트
UPDATE employee SET dept_id = 1003 WHERE id=1;
  • 소속팀 id가 1003인 사람들의 연봉을 두배 인상
UPDATE employee 
SET salary = salary *2 
WHERE dept_id = 1003;
  • 프로젝트 id 2003에 참여한 직원의 연봉을 두배 인상
UPDATE employee,works_on
SET salary = salary*2
WHERE id = empl_id and proj_id = 2003;

📙DELETE

💡DELETE 작성 방법

DELETE FROM table_name 
[WHERE conditions(s)];

💡DELETE 예시

DELETE FROM employee WHERE id=8;
  • 테이블의 모든 데이터(튜플)를 삭제
DELETE FROM employee;

>> 마무리

✔️ 서비스의 스택과 데이터 일관성, 편의성, 확장성 등을 종합적으로 고려하여 DB 스키마를 정의해야한다.
✔️ SELECT로 조회할 때 조건들을 포함해서 조회를 한다면, 이 조건들과 관련된 attributes에 index가 걸려 있어야 한다.
그렇지 않으면, 데이터가 많아질수록 조회 속도가 느려진다.

0개의 댓글