데이터베이스란 여러 사람들이 공유하고 사용할 목적으로 통합 관리되는 데이터들의 모임이다.
데이터 베이스는 크게 관계형 데이터베이스 (RDB)와 NoSQL로 나뉜다.
열과 행을 가진 테이블로 구성되며, 이를 통해 구조적 데이터 관리를 할 수 있다.
SQL을 이용하여 데이터베이스를 조작할 수 있다.
NoSQL은 Not Only SQL의 약자로 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술을 의미한다.
관계형 데이터베이스의 한계를 극복하기 위한 새로운 형태로 수평적 확장성을 가지고 있다. 문서, 그래프, 키 값, 인 메모리, 검색을 포함해 다양한 데이터 모델을 사용한다.
RDB가 클라이언트 / 서버에 맞는 데이터 저장 기술이라면, NoSQL은 클라우드 환경에 맞는 저장 기술이다.
데이터베이스 관리 시스템이란 다수의 사용자들이 데이터베이스 내의 데이터를 접근할 수 있도록 해주는 소프트웨어를 의미한다.
데이터베이스 관리 시스템이 존재하기 이전에는 파일 시스템을 이용하여 데이터를 관리하였고, 이는 데이터 중복, 데이터 불일치의 문제가 있고 만약 독립된 두 공간에서 같은 파일 시스템을 사용해야한다면 서로 공유하기 힘든 문제가 생긴다.
따라서 이러한 문제를 해결하기위해 데이터베이스가 개발되었다.
데이터의 독립성
데이터의 무결성
데이터의 보안성
데이터의 일관성
데이터의 중복 최소화
SQL은 기능에 따라 세 분류로 나눌 수 있다.
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은 DB와 테이블을 제거하는 명령어이다.
DROP DATABASE [NAME];
DROP TABLE [NAME];
// ex) DROP TABLE test_tb;
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 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 FROM [TABLE] WHERE [CONDITION];
// ex) DELETE FROM test_table WHERE age = 20;
만약 모든 행에 대하여 삭제하고 싶다면 아래 기능을 사용할 수 있다.
DELETE로 하나씩 지우는 것 보다 훨씬 빠르다.
TRUNCATE TABLE 테이블명;
권한 부여
Grant 명령어는 사용자(User)에게 접속권한, 오브젝트 생성권한, DBA 권한 등을 부여할 수 있는 명령어다.
권환 회수
Revoke 명령어는 사용자(User)에게 부여한 권한을 다시 회수하는 명령어다
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을 포함하는 내용이 있다면 검색한다. (중간)
SELECT와 조합하여 행 개수를 구할 수 있다.
SELECT COUNT(*) FROM 테이블명 [WHERE 컬럼=조건];
또한 각각의 컬럼의 개수를 따로 셀 수도 있다.
SELECT COUNT(컬럼1), COUNT(컬럼2) FROM 테이블명;
//컬럼1과 컬럼2의 갯수를 별도로 센다.
//NULL은 집계함수가 세지 않는다.
SUM으로 합계를 구할 수 있다.
SELECT SUM(컬럼) FROM 테이블명;
//열의 합계를 구하여 출력한다.
//NULL 값은 무시한다.
//ex SELECT SUM(price) FROM Mart
// 마트 테이블의 price 컬럼의 총합을 구함
AVG로 평균을 구할 수 있다.
SELECT AVG(컬럼) FROM 테이블명;
//열의 평균을 구하여 출력한다.
//NULL 값은 무시한다.
//ex SELECT AVG(price) FROM Mart
// 마트 테이블의 price 컬럼의 평균을 구함
최대 최소 구하기
SELECT MIN(컬럼) FROM 테이블명;
SELECT MAX(컬럼) FROM 테이블명;
여러 테이블들을 합쳐서 필요한 정보를 찾아내는 방법이다.
: 왼쪽 데이터를 기준으로 붙이기(join)
SELECT *
FROM 기준테이블
LEFTJOIN 붙일테이블ON join_기준열
SELECT *
FROM 기준테이블
RIGHTJOIN 붙일테이블ON join_기준열
SELECT *
FROM 기준테이블
INNERJOIN 붙일테이블ON join_기준열
SELECT *
FROM 기준테이블
OUTERJOIN 붙일테이블ON join_기준열