DB (DataBase)
데이터들의 집합
DBMS
데이터베이스를 관리하고 운영하는 SW
ex. SQLite, MySQL, Oracle, mongoDB, redis
SQL (Structured Query Language)
구조가 있는 질문용 언어
MySQL, SQLite, Oracle 등이 SQL 구문을 사용
1. SELECT
2. INSERT
3. UPDATE
4. DELETE
관계형 SQL (RDBMS)
키와 값의 관계를 테이블화 시킨 원칙을 토대로 DB를 구성
DB를 구성하기 전에 스키마라 불리는 DB의 구조, 관계, 제약 사항에 대한 정의가 필요
장점 | 단점 |
구조가 명확하게 되어 있어 예외가 없음 | 구조 변경이 매우 어려움 |
신뢰성이 높음 | 새로운 키가 추가되면 전체 스키마의 변경이 필요하므로 빅데이터-유동성 데이터- 에 사용이 어려움 |
데이터 입출력 속도가 매우 빠름 |
비관계형 NoSQL
SQL을 사용하지 않는 모든 DB 통칭
문서형 / 그래프형 / 키밸류형 / 와이드 컬럼형 등이 있다.
특정 목적에 맞는 DB가 존재한다.
장점 | 단점 |
대용량 데이터 처리에 효율적 | 데이터 자체가 크면 속도가 저하되는 문제 발생(데이터 일부를 읽어서 처리해야 하므로) |
DB 구조 변경이 용이, 확장성이 뛰어남 | |
복잡한 데이터 구조의 표현 가능 |
SQL - 1. SELECT
DB에서 원하는 데이터 가져오기
갖춰진 DB에서 데이터를 뽑아올 때 사용하는 구문
// 테이블 전체의 값을 읽어올 때
SELECT * FROM 테이블명;
// 원하는 컬럼의 값만 읽어올 때
SELECT 컬럼명 FROM 테이블명;
// 필요한 값을 임의로 추가하여 가져오고 싶을 때
SELECT 컬럼명, 원하는 데이터 FROM 테이블명;
// 원하는 조건을 충족하는 행만 가져올 때
SELECT * FROM 테이블명 WHERE 조건;
// 행을 정렬하여 가져올 때
SELECT * FROM 테이블명 ORDER BY 컬럼명; // 기본값 ASC(오름차순) - 생략가능
SELECT * FROM 테이블명 ORDER BY 컬럼명 DESC; // DESC(내림차순)
// 행의 개수를 지정하고자 할 때
SELECT * FROM 테이블명 LIMIT 자르는개수;
SELECT * FROM 테이블명 LIMIT 원하는행순번,자르는개수;
// 컬럼명을 변경하여 가지고 오고 싶다면
SELECT 원래컬럼명 AS 바꿀컬럼명 FROM 테이블명;
-> 가상 테이블 내에서 바뀐 칼럼명으로만 보이는 것이라 원래 컬럼명은 바뀌지 않는다.
JOIN
여러 테이블의 값을 하나로 합치고자 한다면
SELECT * FROM 테이블명1 JOIN 테이블명2 ON 조건;
SELECT * FROM 테이블명1 약칭1 JOIN 테이블명2 약칭2 ON 조건;
두 개의 테이블을 엮어서 원하는 데이터를 추출할 수 있다.
두 테이블의 조인을 위해선 기본키(Primary Key, PK)와 외래키(Foreign Key, FK) 관계로 맺어져야 하고 이를 일대다 관계라고 한다.
Inner Join
두 테이블을 조인할 때 두 테이블에 모두 지정한 열의 데이터가 있어야 한다.
그냥 조인이라고 부르면 내부 조인을 의미한다.
SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블>
ON <조인될 조건>
[WHERE 검색 조건]
Outer Join
두 테이블을 조인할 때 1개의 테이블에만 데이터가 있어도 결과가 나온다.
SELECT <열 목록>
FROM <첫 번째 테이블(LEFT 테이블)>
<LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
ON <조인될 조건>
[WHERE 검색 조건]
그밖에 Cross Join, Self Join 등이 존재.
Mysql
brew install mysql 로 설치 후 mysql -V 로 버전 확인
mysql -u root 으로 접속 (비밀번호가 있다면 mysql -u root -p)
-> show databases; 로 현재 데이터베이스 확인 가능
use 데이터베이스명; 으로 접근 가능
show tables; 를 사용하여 접근한 데이터베이스를 확인 가능하다.
https://velog.io/@kms9887/mysql-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C-workbench
터미널(CLI)에서 테이블을 만들고 값을 넣는 것은 어렵기 때문에 Workbench(GUI) 로 실행
https://downloads.mysql.com/archives/workbench/
Workbench
schema 탭에 들어가서 만들어진 DB를 확인할 수 있다.
Schema
각각의 DB에 있는 테이블과 데이터 확인 가능
정규화
DB 설계에 있어서 중복을 최소화 하기위해 데이터를 구조화하는 과정
크고 조직화 되지 않은 테이블 -> 작고 잘 조직된 테이블로 작성해야만,
데이터 추가 및 삭제 시에 이상(Abnormal) 현상을 예방할 수 있다.
제1정규형 (1NF)
하나의 컬럼은 반드시 하나의 속성(데이터)만을 가져야하는 법칙
제2정규형 (2NF)
모든 컬럼에 대한 부분 종속이 없어야 한다 -> 현 테이블의 주제와 필요없으면 제거한다.
제3정규형 (3NF)
이행 종속성이 없어야 한다. 일반 컬럼에만 종속된 컬럼은 다른 테이블로 빼주기
이행 종속성이란, A = B, B = C 여서 A = C 인 경우를 의미
외래키 Foreign Key
정규화를 하게 되면 테이블은 최소한의 단위로 쪼개진다.
그러므로 데이터를 불러 들일 때 한꺼번에 많은 값을 가지는 테이블을 JOIN 하여 가져와야 하는 경우가 많기 때문에,
기준이 되는 값을 통해서 테이블을 합쳐주게 된다.
이때, 기준이 되는 값(서로 공유되는 값) 을 외래키라고 한다.
테이블 이름 짓기 규칙 (필수X 지향O)
- 대문자 사용하기
- 단어와 단어 사이는 _ (언더바)로 구분
- 기본키(PK) 역할을 하는 단어가 최우선으로 오게
- 기본키 컬럼은 뒤에 _PK를 추가해주기
- 외래키 컬럼은 뒤에 _FK 를 추가해주기
테이블 생성 시 제약 넣기
1. AUTO_INCREMENT : 새 행 생성 시마다 자동으로 1씩 증가
2. PRIMARY KEY : 중복 입력 불가/ NULL 불가
3. UNIQUE : 중복 입력 불가
4. NOT NULL : NULL 불가
5. UNSIGNED : 양수만 가능하게
6. DEFAULT : 값 입력이 없을 시 기본값 지정
기본적으로 mysql은 cmd + enter 로 쿼리문을 실행해준다.
오늘은 mysql에 오류가 자꾸 떠서 수업을 얼마 못했다..ㅜㅜ 하,,, 문제 많은 프로그램은 힘들다
'학원에서 배운 것 > DBMS MySQL' 카테고리의 다른 글
KDT 5th 웹개발자 입문 수업 29일차 (0) | 2023.03.16 |
---|---|
KDT 5th 웹개발자 입문 수업 28일차 - 1 (0) | 2023.03.15 |
MySQL 기초 리마인드 정리 (0) | 2023.03.15 |