Nest.js - MySQL Query

Temporary·2024년 8월 5일
0

Nods.js

목록 보기
25/39

MySQL에서 SQL 쿼리 요청하기

이제 데이터를 직접 채워 넣고 조회해 보자

실무에서는 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 을 사용한다.
  • 찾고 싶은 컬럼만 작성해 줄 수 있다.
    • ex ) select id, name from product;

컨트롤 + 엔터로 실행한다.

데이터 생성하기

이번에는 상품에 데이터를 한번 추가해보자

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 값이 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문을 저장하면 된다.

profile
Temporary Acoount

0개의 댓글