<Mysql 04. DQL& JOIN>

강민수·2021년 12월 19일
0

백엔드

목록 보기
16/21

자~ 이제 마이sql의 마지막 시간. DQL과 조인의 시간이 돌아왔다.

DQL = Data Query Language의 약자로, 쿼리하는 데 사용되는 SQL문을 뜻한다.

사실 앞서 배운 내용에서는 기본적으로 조작하는 쿼리문의 기초적인 부분이었다면, 이번에는 빈번하게 사용되는 쿼리문을 살펴보겠다. 단도직입적으로, 실제 SELECT문 자체가 DQL의 대표적인 쿼리문이다. 사실 그 이유는, 엄청나게 중요하다기 보다는 중요한 기능을 하는 것이 셀렉트라서 그렇다. 우리가 db상에 넣어놓은 데이터들을 꺼내오는 핵심 쿼리문이 DQL이다. 또한, 이를 통해 JOIN문을 이해하는 발판이 될 것이다.

1. SELECT

자 이제 필자가 만든 실제 테이블 들을 살펴보면서 셀렉트에 대해 본격적으로 이해해 보자.

테이블의 데이터를 확인할 때는 select*from문으로 확인한다.

아래는 user들이 회원가입을 한 user 테이블이다.

하지만, 너무 길고 커서 보기 좀 힘들지 않은가? 그리고 본인이 필요한 특정 데이터만 보고 싶을 때는 어떻게 하는 것일까?

그때 역시 셀렉트 프롬을 날려주면 되지만, 가운데가 조금 바뀐다.

select users.email from users;

이번에는 유저 명과 메일을 함께 띄워보자.
select email, username from users;

이런 식으로 해당 데이터의 컬럼 명만 셀렉트와 프롬 사이에 넣어주면 그에 맞게 데이터를 읽어올 수 있다.

이제 조금 더 조건을 걸어서 다양한 쿼리문을 실습해 보자~

02.where 문

where문은 우리가 많이 보던 if문과 동일한 역할이다. 즉, 조건의 필터를 걸어서 해당 데이터만 불러올 수 있다.

만약 필자가 만든 유저 테이블에서 유저명의 이메일이 궁금하다면, 어떻게 할까?

SELECT email FROM users WHERE username = '종현짱';

이처럼 select 컬럼명 from 테이블명 where 조건 컬럼= 컬럼의 벨류; 이런식으로 하면 해당 테이블에 필요한 데이터만 바로 뽑아올 수 있다.

03.### WHERE + LIKE 조건문

그런데 여기서 한 발 더 나아가서 우리가 보통 검색 엔진에서 부분 검색만 하고 결과를 얻는 것은 어떻게 하는 것인가?
즉, 이런 db 테이블 상에서 일부만으로도 데이터를 끌어올 수 있는가?

가능하다. 바로 like를 통해서~
바로 쿼리문을 보자.

SELECT username, address FROM users WHERE email like 'kuk%';
# 위에서의 WHERE문은 = 연산자를 사용해서 정확한 값으로 비교를 했지만
# LIKE 문을 사용하면 이 처럼 kuk으로 시작하면 쿼리문에 의해 데이터가 조회된다.  

2. Join

분명 이런 의문이 있을 것이다. 하나의 테이블 데이터 뿐만아니라, 다른 테이블들도 함께 볼 수는 없을까? 그래서 이런 여러 개의 테이블을 결합시키는 데 필요한 쿼리문이 JOIN이다.

JOIN은, 결국 위의 벤다이어그램처럼, 교집합이 되는 부분을 통해 연결시키는 것이다. 즉, 연결성이 있는 부분(칼럼)으로 테이블 간의 연결이 가능하다. 이번에도 직접 테이블을 통해 알아보자.

위의 테이블을 보면, 교집합으로 어떤 것이 보이는가? 그렇다. 지금 categories의 id와 category_id가 비슷해 보이지 않는가?

맞다. 두 키 간의 교집합이 바로 저 부분이다. 즉, 프로덕트의 foreign key가 저 category_id다. 그래서 저 콜럼은 이름대로 categories테이블의 id를 참조한다. 그래서 이 두가지를 연결 시킬 조건은 성립한다.

그러면 이제 테이블을 연결시키는 조인 쿼리문을 작성해 보겠다.

SELECT products.id, korean_name, english_name, categories.name # 필요한 칼럼을 나열 한다.
FROM products # products 테이블에
JOIN categories# categories 테이블을 결합시킨다.
ON categories.id = products.category_id; # ON 뒤에는 교집합, 즉 연결성이 있는 부분(칼럼)을 적어준다.

*추가 JOIN + WHERE + LIKE 조건문

우리가 그동안 배운 모든 쿼리 문을 조합해서 만들 수도 있다.

SELECT products.id, korean_name, english_name, categories.name  
FROM products  
JOIN categories 
ON categories.id = products.category_id
where categories.name like '%brewd%' or categories.name like '%coffee%';
# 카테고리 명에서 brewd혹은 coffee가 들어간 데이터만 조회한다. 

여기까지 간단한 쿼리문들에 대해 알아봤다. 물론 이외에도 다양한 쿼리문이 존재한다. 이에 대해서는 추후 추가학습을 통해 쿼리문의 다양한 조건들에 대해 익히고 또 학습한다면 다시 추가 포스팅 하겠다.

===================to be continued====================

profile
개발도 예능처럼 재미지게~

0개의 댓글