sec04. MySQL 설치 및 ERD 설계 - 2

sngmin·2024년 1월 26일

04 CRUD 쿼리

Create
Read
Update
Delete

Create

INSERT INTO User (id, age, name, email, phoneNumber)
VALUES (1, 20, 'John', 'john@gmail.com', "01012345678");

// 일부만 넣고 싶을 때 (not NULL로 설정되어있으면 오류남)
INSERT INTO User (name, email, phoneNumber)
VALUES ('John', 'john@gmail.com', "01012345678");

만들어둔 테이블에 SQL 문법 적용해보기


SQL 스크립트 실행하면 데이터 저장됨

Update

UPDATE User
SET age = 21
WHERE name = 'John';

UPDATE User
SET age = 21
WHERE id = 1;

UPDATE 테이블 이름
SET 무엇을 바꿀지
WHERE 조건 (조건 여러 곳에 해당되면 모두 업데이트 됨)

DELETE

// User로부터 id가 1인 것 삭제
DELETE FROM User WHERE id = 1;

GET

GET - 기본

// User에서 모든 걸 불러옴
SELECT *
FROM User;

// User 중 id가 1인 것만 Id, age, name 불러옴
SELECT id, age, name
FROM User
WHERE id = 1;

GET - count

// User에서 해당 핸드폰 번호인 유저 몇 명인지 세어줌
SELECT count(*)
FROM User
WHERE phoneNumber = "01012345678";

Get - orderBy

SELECT *
FROM User
ORDER BY age ASC;

SELECT *
FROM User
ORDER BY age DESC;

ASC: ascend, 오름차순 정렬
DESC: descend, 내림차순

Get - 페이징

SELECT *
FROM User
ORDER BY age ASC LIMIT 1;

SELECT *
FROM User
ORDER BY age DESC
LIMIT 2 OFFSET 1;

SELECT *
FROM User
ORDERS age ASC LIMIT 1; // ORDER BY 대신 ORDERS

LIMIT: 얼마나 가져올지
OFFSET: 어디서부터 가져올지

05. 관계형 쿼리


User의 id와 Post의 userId에 관계를 부여
이 때 이런 id들을 'Key' 라고 함

KEY

PK(Primary Key)

  • 데이터를 구분하는 키
  • 중복을 허용하지 않음
  • Null 값을 허용하지 않음
  • 테이블 당 하나만 존재함
  • API 통신할 때 사용하게 될 것
  • ex. id

Unique Key

  • 중복을 허용하지 않음
  • Null 값을 허용함
  • 여러 개 적용 가능

FK(Foreign Key)

  • 다른 테이블의 PK 참조
  • 외래키(다른 테이블의 키 가져다 쓰기 때문에)
  • 관계를 표시할 때 상대방 테이블에 있는 아이디 가져다 쓰는 것


Constraints > Create New Constraint

User와 Post의 id를 Primary Key로 설정

Foreign Key > Create foreign key

INSERT INTO Post (id, title, content, userid)
VALUES ("id1", "title1", "content1", "id3")


Post 테이블에 데이터 생성됨

Join

Inner Join

일정 부분(ex. User의 id와 Post의 userId)이 일치하는 것만 뽑아오는 것

SELECT u.id, u.name
p.id as postId, p.title
FROM User AS u
JOIN Post AS p
ON u.id = p.userId;

AS는 별칭 부여하는 것
ON이라는 키워드 뒤에 어디에 대해 교집합을 만들지에 대한 조건 붙음
User에 있는 id와 Post에 있는 userId Join 하겠다는 의미

📌


일 때

SELECT u.id, u.name, p.id as postId, p.title
FROM User as u
JOIN Post as p
ON u.id = p.userId;

Left Join

Left Join 하는 대상의 왼쪽에 있는 것들만 다 불러옴

SELECT u.id, u.name, p.id as postId, p.title
FROM User as u
LEFT JOIN Post as p
ON u.id = p.userId;


Post에 없는 것들도 불러와짐
LEFT를 한 것을 기준으로 왼쪽!

Right Join
LEFT와 똑같음, 여기서는 Post쪽

SELECT u.id, u.name, p.id as postId, p.title
FROM User as u
RIGHT JOIN Post as p
ON u.id = p.userId;

🗣️ LEFT RIGTH는 거의 사용하지 않는다. 주로 INNER JOIN을 사용함!

0개의 댓글