이제 데이터를 직접 채워 넣고 조회해 보자
실무에서는 SQL Query문을 직접 작성하는 일은 드물다.
몽고DB 했을 때와 마찬가지로 API 를 만들어서 데이터를 입력, 조회, 삭제 하게된다.
10-01-mysql-relation
폴더가 실행중인 DBeaver를 열어준다.
SQL 버튼
을 누르면 스크립트를 작성할 수 있는 창이 뜬다.
열린 스크립트 창에 아래와 같이 SQL문을 적어준다.
만들어진 데이터베이스가 어떤 것들이 있는지 확인하려면
show databases;
세미콜론 ( ; )
을 붙여야 한다.실행하는 방법은 실행하고자하는 명령어를 한줄 드래그하고 컨트롤 키
와 엔터
를 동시클릭 한다.
실행했을때, 아래와 같은 결과물이 나온다.
이번에는 데이터를 생성, 조회, 삭제, 업데이트를 적용할 데이터베이스를 선택해보자
use myproject;
use
를 사용한다.컨트롤 + 엔터
로 실행하면
데이터베이스에 어떤 테이블들이 만들어져 있는지 확인해 보려면
show tables;
마찬가지로 컨트롤 + 엔터
로 실행한다.
테이블에 어떠한 컬럼들이 만들어져 있는지 전체 구조를 확인하려면
desc product;
product 테이블의 컬럼의 정보를 확인할 수 있다.
명령어를 드래그하여 컨트롤 + 엔터
로 실행한다.
Null : No
: 빈 데이터로는 생성되지 못한다는 의미tinyint
: boolen 타입은 tinyint로 나타난다.Key : UNI
: OneToOne에서 사용된 Foreign Key를 의미Key : Mul
: ManyToOne, ManyToMany에서 사용된 Foreign Key를 의미Product table 에 무엇이 있는지 확인해보자
select * from product;
select
을 사용한다.컨트롤 + 엔터
로 실행한다.
이번에는 상품에 데이터를 한번 추가해보자
insert into product(id, name, description, price)
values(uuid(), '마우스', '좋은 마우스', 15000);
insert into
문을 사용한다. 컨트롤 + 엔터
로 실행
데이터가 제대로 등록 되었는지 확인해 보자
product 테이블에 들어가셔서 새로고침을 해주시면 “ 마우스 “ 데이터가 들어와 있다면 성공이다.
마우스 외에도 노트북, 셔츠 등 데이터를 더 넣어본다.
삭제를 위해서는 delete from 테이블명
키워드를 사용한다.
where
조건을 주지 않으면 해당 테이블의 모든 데이터가 지워진다.
delete from product
where name = '셔츠'
;
이제 데이터를 수정해보자
“ 마우스 “ 의 이름을 키보드로 바꾸고싶어서 아래와 같이 작성한다면 큰일이다!!🚨
update product
set price = '키보드'
update ~ set ~
문을 사용한다왜냐하면 아래와 같이 name 전체가 같이 바뀌기 때문이다.
따라서 내가 바꾸고 싶은 컬럼에 대한 조건을 지정해주어야 한다.
예를 들어, name이 ‘마우스’인 상품의 가격을 18000원으로 변경하려면
update product
set price = 18000
where name = '마우스';
where
: 조건 지정 할 때 사용컨트롤 + 엔터
로 실행한다.
다시 조회해보면
이번에는 업데이트가 제대로 이루어졌다.
지금까지 상품과 상품거래위치에 한개씩 데이터를 넣어봤다. 이번에는 이 두개를 연결해보자
즉, 데이터를 업데이트해서 상품에 상품거래위치를 연결하는 것이다.
productSaleslocation 테이블에도 데이터를 한번 넣어보자
다시 SQL 편집기로 돌아온 후에
insert into product_saleslocation(id, address, addressDetail, lat, lng, meetingTime)
values(uuid(), '구로구', '구로디지털단지역', 37.281723, 127.192387, '2023-01-10');
컨트롤 + 엔터
로 실행하면
다시 조회해 보면 데이터가 저장된 것을 확인할 수 있다.
select * from product_saleslocation;
상품 데이터에 상품거래위치 아이디를 추가하도록 데이터를 업데이트 할 것인데, 아까와 동일하게 모든 상품이 바뀌면 안된다.
그래서 어떤 상품을 업데이트 하기를 원하는지 조건을 where
에 적어야 한다.
where 에 업데이트 되기를 원하는 상품 id 값을 넣어준다.
update product
set productSaleslocationId = 'b676a1ae-cb8c-11ec-95e6-6f6cd1d3adeb'
where name = '마우스'
;
컨트롤 + 엔터
로 실행함녀 아래와 같이 상품거래위치 id 가 상품 table 에 업데이트 된 것을 확인 할 수 있다.
지금까지는 상품 테이블 따로, 상품거래위치 테이블 따로 데이터를 저장하고 조회를 했다.
하지만 상품 테이블과 상품거래위치 테이블이 연결되어있기 때문에,
조회할 때는 따로 조회하는것이 아니라 두 테이블이 같이 조회가 되어야지만 정규화를 해도 비효율적이지 않는 조회가 되는 것이다.
따라서 이번에는 합쳐서 조회해보도록 하자
select product.id, name, price, address, addressDetail
from product, product_saleslocation
where product.productSaleslocationId = product_saleslocation.id
;
그래서 컨트롤 + 엔터
로 실행하면 아래와 같이 product 테이블에서 productSaleslocationId 값이 있는 데이터만 나타나게 된다.
위와 같이 두 테이블의 정보가 모두 보이면 성공적으로 끝마친 것이다.
# 추가 기능 1 (and)
update product
set isSoldout = true
where name = '노트북'
and price= 20000
;
# 추가 기능 2 (or)
update product
set isSoldout = true
where name = '노트북'
or price= 20000
;
# 추가 기능 3
# 주석 쉽게 다는 방법
# update와 delete에서는 가급적 사용하지 않는 것이 좋음
select *
from product
where 1 = 1
-- and name = '마우스'
and price = 5000
and isSoldout = false
;
지금까지 실습한 query문을 VScode내로 저장한다.
section10
폴더 내에 10-02-mysql-query
폴더를 만들고, 해당 폴더 내에 query.txt
파일을 만들어서 query문을 저장하면 된다.