카테고리 없음

2024. 7. 25. (목) 슈퍼코딩 부트캠프 Day 46 / 주특기 5주차

태영9922 2024. 7. 25. 19:54

 

0. SQL 실행 순서

  • FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY

 

1. 관계형 데이터 베이스의 관계 두가지 특성

  • 관계의 선택성 : 두 테이블간의 관계 설정 시 페어링 필수 여부, 관계의 중요성과 비슷한 의미
  • 꼭 가져야 하는지? 안 가질 수 도 있는지?

 

  • 관계의 기수성 : 두 테이블간의 관계 설정 시 참여 멤버수 표현, 관계의 다중성과 비슷한 의미
  • 하나를 가질 수 있는지? 여러개를 가질 수 있는지?

 

1-1. 관계의 선택성(Optionality)

  • Optional = O 표시
  • Mandatory = | 표시

 

1-2. 관계의 기수성(Caridnality)

  • One : 0 or 1 -> O 표시 / 정확히 1 : |
  • Many : 0이상 -> O< 갈래표시 / 1이상 -> |< 갈래표시

 

2. 테이블 관계와 키

2-1. Primary Key (기본키)

  • NOT NULL : 빈칸이 될 수 없음
  • UNIQUE : 다른 Row와 중복될 수 없음. 단일 값

 

2-2. Foreign Key (외래키)

  • 다른 테이블의 PK, UNIQUE 필드와 대응, 참조 관계를 표현하는 속성

 

3. 테이블 대표 관계

  • 1대1 관계
CREATE TABLE users (
	id INT AUTO_INCREMENT PRIMARY KEY,
    user_name VARCHAR(25),
    enabled BOOLEAN
);

CREATE TABLE addresses (
	addr_id INT AUTO_INCREMENT PRIMARY KEY,
	user_id INT NOT NULL UNIQUE, -- PRIMARY가 아니면 UNIQUE 사용.
    street VARCHAR(30),
    city VARCHAR(30),
    state VARCHAR(30),
    FOREIGN KEY(user_id) REFERENCES users (id) -- 외래키 선언
);
 
  • 1대N 관계
CREATE TABLE book (
	id INT AUTO_INCREMENT PRIMARY KEY,
    book_name VARCHAR(25),
    author VARCHAR(20),
    content LONGTEXT
);

CREATE TABLE reviews (
	reviews_id INT PRIMARY KEY,
    book_id INT NOT NULL,
    user_name VARCHAR(20),
    content MEDIUMTEXT,
    FOREIGN KEY(book_id) REFERENCES book (id)
);
 
  • N대M 관계
CREATE TABLE users_book_purchase (
	id INT AUTO_INCREMENT PRIMARY KEY,
    book_id INT NOT NULL,
    user_id INT NOT NULL,
    purchase_date DATETIME,
    price INT NOT NULL,
	FOREIGN KEY(book_id) REFERENCES book (id),
    FOREIGN KEY(user_id) REFERENCES users (id)
);
 
  • 참조 무결성 : 데이터간 항상 일관된 값/관계가 유지되어야 한다.

1)FK가 참조하는 테이블 순서 안맞는 생성/삭제 실패

DROP TABLE book; //삭제 실패 -> 다른 테이블에서 참조하고 있기때문에
 

2) FK가 참조하는 값 없으면 INSERT 실패

INSERT INTO book(book_name, author, content)
VALUES ('백설공주', '그림형제','잘 살았습니다~~');

INSERT INTO users(user_name, enabled)
VALUES ('아이유', true);

-- 정상 실행 --
INSERT INTO users_book_purchase(book_id, user_id, purchase_date, price)
VALUES (1,1,'2023-07-07', 1000);

-- 실행되지 않음 --
INSERT INTO users_book_purchase(book_id, user_id, purchase_date, price)
VALUES (1,2,'2023-07-07', 1000); //user 테이블에 user_id가 1밖에 없음
 

1. MySQL JOIN

  • 여러 테이블을 합쳐 하나의 테이블로 생성
  • JOIN의 종류

2. Inner JOIN, Outer JOIN

  • Inner JOIN : 두 테이블의 겹치는 부분을 리턴
SELECT *
FROM group_singer
INNER JOIN buy_history
ON group_singer.mem_id = buy_history.mem_id;
// 두 테이블의 모든 칼럼 출력
 
SELECT group_singer.mem_id, group_singer.mem_name, 
	   buy_history.prod_name, buy_history.price
FROM group_singer
INNER JOIN buy_history
ON group_singer.mem_id = buy_history.mem_id;
// 조인 후 특정 몇개 칼럼만 출력
 
  • Outer JOIN
SELECT * from group_singer g
left join buy_history b
on g.mem_id =b.mem_id ;
//buy_history에 없는 값은 null로 표시되어 출력
 

3. Other JOIN

  • Self JOIN
SELECT E1.employee_id AS '사번', E1.employee_name AS '이름', E1.duty AS '직급',
	   E2.employee_name AS '상사 이름', E2.duty AS '상사 직급' 
FROM employee E1
	LEFT JOIN employee E2
	ON E1.manager_id = E2.employee_id;
 
  • CROSS JOIN
SELECT *
FROM group_singer G 
	CROSS JOIN buy_history;

SELECT COUNT(*)
FROM group_singer G 
	CROSS JOIN buy_history;
 

1. MySQL 제약조건 개요

  • 제약조건이 필요한 이유 : 데이터의 무결성을 지키기 위해(중복값, null값 등 방지)

 

2. MySQL 대표, 기타 제약 조건

  • 제약조건 선언 방식 : 인라인 제약조건, 외부 제약 조건, ALTER문 사용 제약 조건 선언
  • NOT NULL : 해당 필드는 NULL이 될 수 없음
  • UNIQUE : 해당 필드는 고유의 값을 가져야함. NULL은 가능
사진 삭제

사진 설명을 입력하세요.

  • PRIMARY KEY : 해당 필드는 UNIQUE & NOT NULL, 테이블에 하나만 가능
  • FOREIGN KEY :

 

  • CHECK : 해당 필드는 CHECK 조건문 통과 필수
  • DEFAULT : 해당 필드가 NULL이면 기본값 입력되도록 자동 지정

 

3. MySQL 외래키 더 알아보기

 

 

 

 

 

#슈퍼코딩, #1:1관리형부트캠프, #백엔드, #backend, #백엔드공부, #개발공부, #백엔드개발자 #취준일기, #취준기록, #취뽀, #빡공, #HTML/CSS, #javascript, #react , #java, #spring