[Mysql] CREATE TABLE, INSERT INTO, JOIN

^_^·2022년 9월 29일
0

MYSQL

목록 보기
1/1
post-thumbnail

CREATE TABLE

데이터 베이스는 미리 생성했다고 가정한다.
CREATE TABLE 명령어로 테이블을 생성해준다.

CREATE TABLE 테이블명(
    필드이름1 필드타입1 ... ,
    필드이름2 필드타입2 ... ,
)

users 테이블

mysql> create table users(
    -> id int not null auto_increment primary key,
    -> email varchar(100) not null unique,
    -> nickname varchar(50),
    -> password varchar(300) not null,
    -> profile_image varchar(3000),
    -> created_at datetime default current_timestamp
    -> );

포스팅 테이블

mysql> create table postings(
    -> id int auto_increment primary key,
    -> user_id int not null,
    -> contents varchar(2000),
    -> created_at datetime default current_timestamp,
    -> foreign key(user_id) references users(id) on delete cascade
    -> );

포스팅 이미지 테이블

 mysql> create table posting_images(
    -> id int auto_increment primary key,
    -> posting_id int not null,
    -> image_url varchar(3000),
    -> created_at datetime default current_timestamp,
    -> foreign key(posting_id) references postings(id) on delete cascade
    -> );

댓글 테이블

 mysql> create table comments(
    -> id int auto_increment primary key,
    -> comment varchar(2000),
    -> posting_id int not null,
    -> user_id int not null,
    -> created_at datetime default current_timestamp,
    -> foreign key(posting_id) references postings(id) on delete cascade,
    -> foreign key(user_id) references users(id) on delete cascade
    -> );

INSERT INTO

이제 생성한 테이블에 각 필드에 맞는 데이터를 입력해 준다.
INSERT INTO명령어로 데이터 입력을 한다.

mysql> INSERT INTO postings (user_id, content) VALUES
    -> (1,"작은 성공이 주는 성취감으로 하루를 마무리 할 수 있기를 ❣️"),
    -> (1,"오늘은 코딩하기 좋은날 🌷"),
    -> (2,"db 모델링이 정말 재밌어요 ㅎㅎ"),
    -> (2,"어려워도 우린 결국 해낼겁니다.");

SELECT * FROM (테이블명);으로 해당 테이블의 모든 데이터를 읽어 확인할 수 있다.

users table.

postings table.

posting_images table.

comments table.

JOIN

users테이블과 postings테이블을 외래키인 유저 아이디를 이용해서 inner join 한 결과에서 유저닉네임, 프로필이미지, 포스팅내용을 보는 sql문.

SELECT users.nickname, users.profile_image, postings.contents
FROM users
JOIN postings ON postings.user_id = users.id

users테이블과 postings테이블, 댓글 테이블에서 포스팅을 유저 아이디로 join하고 포스팅 아이디를 가진 댓글 데이터를 join하는 sql문.

SELECT users.name, users.profile_image, postings.contents, comments.comment
FROM users
JOIN postings ON postings.user_id = users.id
JOIN comments ON comments.posting_id = postings.id

1번 users의 이름과, 1번 users의 profile_image, 1번 user가 남긴 posting, 해당 posting에 포함된 댓글, 그리고 포함된 posting_images까지 불러오고자 한다면 어떤 SQL를 작성해야할까?

mysql> SELECT users.nickname, users.profile_image, postings.content, comments.comment, posting_images.image_url
FROM users 
JOIN postings ON postings.user_id=users.id 
JOIN comments ON comments.posting_id = postings.id 
JOIN posting_images ON posting_images.posting_id = postings.id;

0개의 댓글