데이터베이스

Jun·2022년 5월 11일
0

네이버 부스트캠프

목록 보기
18/21

1. 데이터베이스

1.1 데이터베이스 (DB)


데이터베이스란 여러 사람들이 공유하고 사용할 목적으로 통합 관리되는 데이터들의 모임이다.

데이터 베이스는 크게 관계형 데이터베이스 (RDB)와 NoSQL로 나뉜다.

관계형 데이터베이스

열과 행을 가진 테이블로 구성되며, 이를 통해 구조적 데이터 관리를 할 수 있다.

SQL을 이용하여 데이터베이스를 조작할 수 있다.

NoSQL

NoSQL은 Not Only SQL의 약자로 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술을 의미한다.

관계형 데이터베이스의 한계를 극복하기 위한 새로운 형태로 수평적 확장성을 가지고 있다. 문서, 그래프, 키 값, 인 메모리, 검색을 포함해 다양한 데이터 모델을 사용한다.

RDB vs NoSQL

RDB가 클라이언트 / 서버에 맞는 데이터 저장 기술이라면, NoSQL은 클라우드 환경에 맞는 저장 기술이다.

1.2 데이터베이스 관리 시스템 (DBMS)


데이터베이스 관리 시스템이란 다수의 사용자들이 데이터베이스 내의 데이터를 접근할 수 있도록 해주는 소프트웨어를 의미한다.

데이터베이스 관리 시스템이 존재하기 이전에는 파일 시스템을 이용하여 데이터를 관리하였고, 이는 데이터 중복, 데이터 불일치의 문제가 있고 만약 독립된 두 공간에서 같은 파일 시스템을 사용해야한다면 서로 공유하기 힘든 문제가 생긴다.

따라서 이러한 문제를 해결하기위해 데이터베이스가 개발되었다.

1.3 데이터베이스 관리 시스템의 특징


  1. 데이터의 독립성

    • 데이터베이스의 규모(사이즈 등)를 수정해도 관련 응용 프로그램을 수정할 필요가 없다.
  2. 데이터의 무결성

    • 데이터의 유효성을 검사해 데이터의 무결성을 보장한다.
    • 예를들어 입력 조건에 맞지 않는 값은 저장할 수 없도록 방지
  3. 데이터의 보안성

    • 허가된 사용자만 데이터베이스에 접근할 수 있다.
  4. 데이터의 일관성

    • 연관된 정보를 논리적인 구조로 관리하여, 어떤 하나의 데이터를 수정할 때 발생할 수 있는 데이터 불일치를 방지한다.
  5. 데이터의 중복 최소화

    • 데이터베이스는 데이터를 통합해서 관리하여 중복 문제를 해결할 수 있다.

2. SQL


SQL은 기능에 따라 세 분류로 나눌 수 있다.

  • DDL (데이터 정의 언어)
  • DML (데이터 조작 언어)
  • DCL (데이터 제어 언어)

2.1 DDL


CREATE

DB와 테이블을 생성할 수 있는 명령어이다.

CREATE DATABASE [DB_NAME];
// ex) CREATE DATABASE test_db;

CREATE TABLE [TABLE_NAME] ([COLUMN_NAME][DATA_TYPE]);
// ex) CREATE TABLE test_tb (name char(20), age int);

데이터 타입에는 다양한 종류가 있다.

미션에서는 INT형과 CHAR형만 고려하였지만 실제로는 몇십가지가 존재한다.

MySQL 기준 데이터 타입의 종류를 아래 사이트에서 참고해보자.

https://dev.mysql.com/doc/refman/8.0/en/data-types.html

http://www.incodom.kr/DB-데이터_타입/MYSQL

DROP

DROP은 DB와 테이블을 제거하는 명령어이다.

DROP DATABASE [NAME];
DROP TABLE [NAME];
// ex) DROP TABLE test_tb;

2.2 DML


SELECT

SELECT는 데이터를 조회하는 기능을 한다.

SELECT [COLUMN1] FROM [TABLE] WHERE [CONDITION];
// ex) SELECT name, age FROM test_tb WHERE age = 20;

WHERE을 통해 조건을 설정할 수 있다.

예를 들어 위의 경우는 age 컬럼의 값이 20인 레코드의 name과 age가 조회된다

SELECT * 을 사용하면 name, age뿐만 아니라 모든 속성이 다 보여진다.

조건을 설정하지 않는 경우 모든 레코드가 조회된다.

INSERT

INSERT는 데이터를 삽입하는 명령어이다.

INSERT INTO [TABLE_NAME]([COLUMN1]..) VALUES([DATA1],[DATA2]..);
// ex) INSERT INTO [test_tb](name, age) VALUES('Hong Kil-Dong',20);

문자열을 삽입할 때는 ' ' 사이에 값을 넣어야 하고, column과 value 개수가 동일해야 한다.

만약 value 값을 모두 설정하고 싶지 않다면, DEFAULT를 이용할 수 있다.

이 때 테이블에서 설정해둔 기본 값이 지정된다.

INSERT INTO 테이블명(1,2) VALUES (2, DEFAULT);
//명시적으로 Default 값으로 넣기

DELETE

조건에 맞는 레코드를 삭제한다.

DELETE FROM [TABLE] WHERE [CONDITION];
// ex) DELETE FROM test_table WHERE age = 20;

만약 모든 행에 대하여 삭제하고 싶다면 아래 기능을 사용할 수 있다.

DELETE로 하나씩 지우는 것 보다 훨씬 빠르다.

TRUNCATE TABLE 테이블명;

2.3 DCL


GRANT

권한 부여

Grant 명령어는 사용자(User)에게 접속권한, 오브젝트 생성권한, DBA 권한 등을 부여할 수 있는 명령어다.

REVOTE

권환 회수

Revoke 명령어는 사용자(User)에게 부여한 권한을 다시 회수하는 명령어다

2.4 기타


WHERE

WRERE은 여러 조건을 조합할 수 있다.

SELECT * FROM 테이블명 WHERE 조건1 AND 조건2;
SELECT * FROM 테이블명 WHERE 조건1 OR 조건2;
SELECT * FROM 테이블명 WHERE NOT 조건;

프로그래밍 언어처럼 and, or, not을 지원한다.

패턴 매칭

WHERE문에서 = 연산자로 조건을 설정하지 않고 패턴을 이용하여 검색할 수 있다.

SELECT * FROM 테이블명 WHERE text LIKE 'SQL%';
// text라는 컬럼에서 SQL로 시작하는 레코드를 조회한다. (전방)

SELECT * FROM 테이블명 WHERE text LIKE '%SQL%';
// text라는 컬럼에서 SQL을 포함하는 내용이 있다면 검색한다. (중간)

COUNT

SELECT와 조합하여 행 개수를 구할 수 있다.

SELECT COUNT(*) FROM 테이블명 [WHERE 컬럼=조건];

또한 각각의 컬럼의 개수를 따로 셀 수도 있다.

SELECT COUNT(컬럼1), COUNT(컬럼2) FROM 테이블명;
//컬럼1과 컬럼2의 갯수를 별도로 센다.
//NULL은 집계함수가 세지 않는다.

SUM

SUM으로 합계를 구할 수 있다.

SELECT SUM(컬럼) FROM 테이블명;
//열의 합계를 구하여 출력한다.
//NULL 값은 무시한다.

//ex SELECT SUM(price) FROM Mart
// 마트 테이블의 price 컬럼의 총합을 구함

AVG

AVG로 평균을 구할 수 있다.

SELECT AVG(컬럼) FROM 테이블명;
//열의 평균을 구하여 출력한다.
//NULL 값은 무시한다.

//ex SELECT AVG(price) FROM Mart
// 마트 테이블의 price 컬럼의 평균을 구함

MIN & MAX

최대 최소 구하기

SELECT MIN(컬럼) FROM 테이블명;
SELECT MAX(컬럼) FROM 테이블명;

JOIN

여러 테이블들을 합쳐서 필요한 정보를 찾아내는 방법이다.

cfeb8897ab6e251f3f7fa2f82dc6a6ef (1)

LEFT JOIN

: 왼쪽 데이터를 기준으로 붙이기(join)

SELECT *
FROM 기준테이블
LEFTJOIN 붙일테이블ON join_기준열

스크린샷_2021-08-12_오전_2 07 13

RIGHT JOIN

  • 오른쪽 데이터를 기준으로 붙이기(join)
SELECT *
FROM 기준테이블
RIGHTJOIN 붙일테이블ON join_기준열

스크린샷_2021-08-12_오전_2 07 23

INNER JOIN

  • 교집합
  • JOIN하려는 모든 테이블에 존재하는 데이터
SELECT *
FROM 기준테이블
INNERJOIN 붙일테이블ON join_기준열

스크린샷_2021-08-12_오전_2 07 30

OUTER JOIN

  • 데이터가 없는 부분은 null로 가져온다.
  • FULL OUTER JOIN : 전체 합치기
  • LEFT OUTER JOIN = LEFT JOIN
  • RIGHT OUTER JOIN = RIGHT JOIN
SELECT *
FROM 기준테이블
OUTERJOIN 붙일테이블ON join_기준열

스크린샷_2021-08-12_오전_2 07 40

https://mizykk.tistory.com/81

profile
HiHi

0개의 댓글