[DB] 정리!

JUNHO YEOM·2022년 12월 20일
0

DB, SQL

목록 보기
17/21

Database란 무엇인가요?
데이터의 집합을 말해요.
하지만 그냥 무작정 모아놓은것이 아니라 서로 관련성이 있는 대용량의 데이터를 체계적으로 뫃아놓은 것을 말합니다.
-> 이걸 사용하려면 여러개의 프로그램들이 있어야 해요
그것이 바로 DBMS(DataBase Management System)에요!

MySQL다운하기

  • MySQL 홈페이지
  • Download
  • Community Version Download
  • 설치

workbentch
connector-j

workbench로 접속했어요 -> 127.0.0.1 (root back)

MySQLWorkbench 설정 변경하기!
windows -> edit -> preference
mac -> 상단툴바 -> mySQLworkbenches -> Workbench Preferences -> SQLEditor -> Safe Updates 체크 해제

brew list
-> brew uninstall mysql
-> brew cleanup
-> sudo rm -r /usr/local/var/mysql

mysql 환경변수

vim ~/.zshrc
# mysql PATH
export PATH="$PATH:/usr/local/mysql-8.0.29-macos12-arm64/bin"

환경변수의 경로와 버전이 맞는지 확인해요!

source ~/.zshrc

명령어

DOS 창에서 사용하는 폴더 => Working Directory

Working Directory에서 SQL실행하기

mysql -u root -p

SQL파일을 실행시켜라

source "파일명"
source employees.sql

DB 보여줘

show databases;

workbench에서 확인하기

Schemas 에서 우측 클릭 -> refresh all


용어

Table : Data를 표현하는 표 형태의 자료구조
Database: Table이 저장되는 고유의 Repository
DBMS(DataBase Management System): 데이터베이스를 관리하기 위한 프로그램들
Column: 열
Column name: 열 이름
Rows(Record): 행
Schema: 데이터베이스와 같은 의미로 사용합니다.
Data Type: DB에 들어갈 Data의 타입을 의미합니다.
Foreign Key(외래키): 테이블의 특정 Column이 다른 테이블의 Primary key를 가르키고 있는 Key를 말합니다.
두개의 테이블을 논리적으로 연결시키는 역할을 합니다.
Index: 검색 속도를 빠르게 하기 위한 색인을 말합니다.
Primary Key로 설정되어 만들어진 Index: Clustered Index(사전식)
Column에 사용자가 Index를 지정한 Index: Secondary Index(BTree 자료구조)
Primary Key(기본키): Column에 있는 값을 이용해서 Row를 유일하게 식별할 수 있게 해주는 Key

Primary Key를 설정하게 되면

Not null 속성, Unique 속성이 정해지고, Index(Clustered Index)가 생성됩니다.

  • Not null: 빈 값이 올 수 없습니다.
  • Unique: 중복된 값이 올 수 없게 합니다.
  • Index: 검색속도를 빠르게 하기 위한 색인
  • View

실습

  1. Database 생성: schema 이름 shopDB
CREATE SCHEMA `스키마 이름`;

2. Table 생성 numberTBL
컬럼명Data type길이Null
아이디member_ID문자(Char)8글자X
이름member_Name문자(Char)4글자X
주소member_Address문자(Char)20글자O

아이디: Primary Key, 기본적으로 Not Null(없으면 안됨), Unique(중복값 없음)

CREATE TABLE `shopDB`.`mumberTBL` (
  `member_ID` CHAR(8) NOT NULL COMMENT '회원 아이디에요',
  `member_Name` CHAR(4) NOT NULL COMMENT '회원 이름이에요',
  `member_Address` VARCHAR(20) NULL COMMENT '회원 주소입니다',
  PRIMARY KEY (`member_ID`),
  UNIQUE INDEX `member_ID_UNIQUE` (`member_ID` ASC) VISIBLE);


DB의 Data Type

CHAR와 VARCHAR

VAR(가변의)
어떤 차이가 있나요?

// 20글자를 입력할 수 있는 데이터 타입을 선언합니다.
CHAR(20) // 빈공간이 있어도 20글자의 용량을 사용합니다.
VARCHAR(20) // 4글자가 들어오면 4글자 만큼만 공간을 사용합니다.

VRACHAR가 공간을 적게 사용해서 좋아 보이는데요?

무조건 그렇지는 않아요 연산(문자열의 비교, 문자열 합치기)등을 수행할 때는 CHAR가 더 빨라요!
사용 환경에 맞는 Data 타입을 골라서 잘 사용해야해요


SQL

Structured Query Language
해당 커럼의 테이블에서 모든 데이터 가져오세요!

SELECT '컬럼명들' FROM '테이블이름';
// 조건이 없어서 모든 데이터를 불러옵니다. 

인덱스!

기본적으로 Column에 설정합니다.
1. 기본적으로 Primary key를 설정하면 해당 Column을 index가 자동으로 설정합니다.
2. 따로 특정 Column에 index를 설정하는 것도 가능합니다
index를 생성하면 내부 자료구조가 생성됩니다.
인덱스를 남발하게 되면 자료구조를 유지하는데 비용이 많이 소요됩니다.
(필요한 곳에만 사용해야 해요!)

인텍스는 데이터 검색 속도를 높이기 위해 사용 되는데요, 오히려 인덱스가 성능을 떨어트릴 수 있다는 사실을 아시나요?

데이터가 많지 않을 때 인덱스가 필요 없음, 데이터의 양이 많아질 수록 인덱스 없는 데이터와 속도차이가 많이 나요!!!


⭐️ JOIN!!!!

두개 이상의 Table을 서로 연결해서 하나의 결과 집합을 만들어 내는 연산입니다.
기본적으로 DataBase의 Table은 서로 나뉘어 있어요

연결되어 있는 Data를 알아내기 위해서는 테이블로 연결(Join) 해야해요

INNER JOIN

이너 조인 공부하기!
Join은 정보를 가지고 있는 두개의 테이블을 합쳐요!
조인 연산은 연산 코스트가 높습니다. 가능한 최소화 하는것이 좋아요.
조건에 맞는 것만 결합해서 출력!

단계 1

SELECT *
FROM (usertbl 
	  INNER JOIN buytbl);

단계 2

SELECT *
FROM usertbl -- 기준테이블
	  INNER JOIN buytbl -- 붙는 테이블 
      ON usertbl.userID = buytbl.userid; -- 조건

단계 3

SELECT userID, name
FROM usertbl -- 기준테이블
	  INNER JOIN buytbl -- 붙는 테이블 
      ON usertbl.userID = buytbl.userid; -- 조건

Cross Join

조건이 없어요! 그러니까 의미가 없는것 까지 조인해요
아니 그럼 언제 쓰죠?
의미없는 데이터지만, 데이터량을 일부러 늘릴 때 사용해요
정말 특별한 케이스일지도 모르겠지만, 세상을 살다보면 이런일도 필요하답니다.
없는것 보다 좋으니까요.


SubQuery(서브쿼리)

0개의 댓글