[TIL] 9월 22일: SQL

Jung·2021년 9월 22일
0

TIL

목록 보기
9/77
post-thumbnail
post-custom-banner

학부 때 데이터베이스 강의를 들으면서 Oracle을 사용했었다. 그 때는 DDL, DML, DCL을 공부하며 익숙했었다. 사용 안 한지 오래 되다 보니까 잊혀지려 하는 것이 두려워 다시 리마인드 시키고자 한다.

SQL

SQL은 Structured Query Language(구조적 질의 언어)의 줄임말로, RDBMS(관계형 데이터베이스 시스템)에서 자료를 관리 및 처리하기 위해 설계된 언어다.

SQL 언어적 특성

  • 대소문자를 가리지 않는다.
  • 세미콜론(;)으로 끝난다.
  • 고유의 값은 따옴표('')로 감싸준다.
  • 객체를 나타낼 때는 백틱(``)으로 감싸준다.
  • 주석은 문장 앞에 --를 붙인다.
  • 여러 줄 주석은 /* */로 감싸준다.

SQL 문법 종류

DDL

  • Data Definition Language - 데이터 정의 언어
  • 각 릴레이션을 정의하기 위해 사용하는 언어다.
  • CREATE: 테이블 생성
  • ALTER: 테이블 수정
  • DROP: 테이블 삭제
  • TRUNCATE: 테이블에 있는 모든 데이터 삭제

CREATE

테이블 생성

CREATE TABLE PERSON
(
	NAME VARCHAR(10)
    AGE INT
);  

ALTER

테이블 수정

  • 컬럼 추가
ALTER TABLE PERSON ADD ADDRESS VARCHAR(10);
  • 컬럼 수정
ALTER TABLE PERSON MODIFY ADDRESS VARCHAR(30);
  • 컬럼 삭제
ALTER TABLE PERSON DROP COLUMN ADDRESS;

DROP

테이블 삭제

DROP TABLE PERSON;

DML

  • Data Manipulation Language - 데이터 조작 언어
  • 데이터를 추가/수정/삭제하기 위한 데이터 관리를 위한 언어다.
  • SELECT: 데이터 조회
  • INSERT: 데이터 입력
  • UPDATE: 데이터 수정
  • DELETE: 데이터 삭제

SELECT

테이블이 생성되어 있다는 가정하에 데이터 조회

  • 테이블 내 모든 데이터 조회
SELECT * FROM [테이블명]; 
  • 조건(WHERE)
SELECT * FROM [테이블명] WHERE [컬럼] = ['값']; 
  • 정렬(ORDER BY) - ASC: 오름차순(디폴트) / DESC: 내림차순
SELECT * FROM [테이블명] ORDER BY [컬럼] [ASC/DESC];
  • 그룹화(GROUP BY)
SELECT [GROUP BY 절에 지정된 컬럼] [GROUP BY 별로 집계할 컬럼]
FROM [테이블명]
GROUP BY [그룹화할 컬럼];
  • 그룹화 조건(HAVING)
SELECT [GROUP BY 절에 지정된 컬럼] [GROUP BY 별로 집계할 컬럼] 
FROM [테이블명] 
GROUP BY [그룹화할 컬럼]
HAVING [그룹 내 조건 추가];

INSERT

데이터 입력

INSERT INTO [테이블명](컬럼1, 컬럼2, ...) VALUES ('값1', '값2', ...);

UPDATE

데이터 수정

UPDATE [테이블명] SET [수정할 컬럼] = ['수정할 값'] WHERE [조건 줄 컬럼] = ['값'];

DELETE

데이터 삭제

DELETE [테이블명] WHERE [조건 줄 컬럼] = ['값'];

DCL

  • Data Control Language - 데이터 제어 언어
  • 사용자 관리 및 사용자 별로 릴레이션 또는 데이터를 관리하고 접근하는 권한을 다루기 위한 언어다.
  • GRANT: 권한 부여
  • REVOKE: 권한 삭제

GRANT

권한 부여

GRANT [권한1, 권한2, ...] TO [권한 줄 사용자];

REVOKE

권한 삭제

REVOKE [권한1, 권한2, ...] FROM [권한 삭제할 사용자];

참고
“SQL이란? - 한 눈에 끝내는 SQL.” 구름EDU, https://edu.goorm.io/learn/lecture/15413/%ED%95%9C-%EB%88%88%EC%97%90-%EB%81%9D%EB%82%B4%EB%8A%94-sql/lesson/767683/sql%EC%9D%B4%EB%9E%80.

승미니1024 곱슬 곰탱. “[Oracle] SQL의 종류 (DDL, DML, DCL).” 돼민이, TISTORY, 24 Dec. 2016, https://jink1982.tistory.com/31.


Join(조인)

  • 둘 이상의 테이블을 연결해 데이터를 검색하는 방법
  • 조인하려면 테이블들이 적어도 하나의 컬럼을 공유하고 있어야 한다.
  • 공유하고 있는 컬럼을 PK(기본키) 또는 FK(외래키)로 사용

종류

  • INNER JOIN: 내부조인 ➡️ 교집합
  • LEFT/RIGHT JOIN ➡️ 부분집합
  • OUTER JOIN: 외부조인 ➡️ 합집합
  • 오라클은 OUTER JOIN이 있지만, MySQL은 없어서 LEFT JOIN + RIGHT JOIN로 사용


A, B 두 개의 테이블이 있다고 가정

A

IDNAME
1KIM
2LEE
3PARK

B

IDAGE
221
322
423

INNER JOIN

교집합, 공통적인 부분만 SELECT

SELECT A.ID, A.NAME, B.AGE
FROM A INNER JOIN B
ON (A.ID = B.ID);
IDNAMEAGE
2LEE21
3PARK22

LEFT JOIN

  • 조인 기준 왼쪽에 있는 행(레코드) 전부 SELECT
SELECT A.ID, A.NAME, B.AGE
FROM A LEFT OUTER JOIN B
ON (A.ID = B.ID);
IDNAMEAGE
1KIMNULL
2LEE21
3PARK22

  • 조인 기준 왼쪽에 있는 행(레코드)만 SELECT
SELECT A.ID, A.NAME, B.AGE
FROM A LEFT OUTER JOIN B
ON (A.ID = B.ID)
WHERE B.ID IS NULL;
IDNAMEAGE
1KIMNULL

RIGHT JOIN

  • 조인 기준 오른쪽에 있는 행(레코드) 전부 SELECT
SELECT A.ID, A.NAME, B.AGE
FROM A RIGHT OUTER JOIN B
ON (A.ID = B.ID);
IDNAMEAGE
2LEE21
3PARK22
4NULL23
  • 조인 기준 오른쪽에 있는 행(레코드)만 SELECT
SELECT A.ID, A.NAME, B.AGE
FROM A RIGHT OUTER JOIN B
ON (A.ID = B.ID)
WHERE A.ID IS NULL;
IDNAMEAGE
4NULL23

OUTER JOIN

  • 합집합, A, B 테이블 둘 다 SELECT
SELECT A.ID, A.NAME, B.AGE
FROM A FULL OUTER JOIN B
ON (A.ID = B.ID);
IDNAMEAGE
1KIMNULL
2LEE21
3PARK22
4NULL23
  • 합집합 - 교집합 (왼쪽에만 있는 행(레코드) + 오른쪽에만 있는 행(레코드)) SELECT
SELECT A.ID, A.NAME, B.AGE
FROM A FULL OUTER JOIN B
ON (A.ID = B.ID)
WHERE A.ID IS NULL OR B.ID IS NULL;
IDNAMEAGE
1KIMNULL
4NULL23

참고
Godpearl. “DB Join 정리(Inner/Left/Right/Outer).” 그럼에도 불구하고🔥💎, TISTORY, 18 May 2021, https://pearlluck.tistory.com/46.

profile
97kim.github.io
post-custom-banner

0개의 댓글