MySQL : 기본 쿼리문과 JOIN문

i_sy_code·2022년 3월 24일
0
post-thumbnail

1. MySQL이란?

화면과 만나던 프론트단을 지나 드디어 서버와 데이터베이스를 다루는 백엔드단에 접어들게 되었다.
그 중 DB를 만들고, 데이터를 조회, 수정, 삭제 등을 할 수 있는 mysql 툴에 대해 알아보고자 한다.

mysql은 아주 널리 쓰이고 있는 RDBMS(관계형 DB 관리 시스템)으로, 오라클이 관리 및 지원하고 있는 오픈소스이다. 프로그래밍 언어 중 하나인 sql을 사용한다.




2. SQL 기본 쿼리문

2-1. DDL문 (Data Define Language )

Database의 형태(Schema)를 정의할 수 있는 쿼리문을 의미한다.
DB나 테이블, 컬럼을 추가, 수정, 삭제할 수 있다.

DB 목록 : SHOW databases;
DB 생성 : CREATE DATABASE 데이터베이스명;
DB 삭제 : DROP DATABASE 데이터베이스명;
DB 사용 : USE 데이터베이스명;

테이블 목록 : SHOW tables;
테이블 생성 : CREATE table (컬럼명 자료형 길이 제약조건);
테이블 삭제 : DROP TABLE 테이블명;
테이블 상세 : DESC테이블명;

컬럼 삽입 : ALTER TABLE 테이블명 ADD (컬럼명 자료형 길이 제약조건);
컬럼 수정 : ALTER TABLE 테이블명 MODIFY (컬럼명 자료형 길이 제약조건);
컬럼 삭제 : ALTER TABLE 테이블명 DROP COLUMN 컬럼명;



2-2. DML문 (Data Manipulation Language)

데이터를 조작하는 쿼리문이다. 데이터를 삽입, 수정, 삭제할 수 있다.

데이터 목록 : SELECT 컬럼명 FROM 테이블명;
데이터 탐색 : SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 = "찾을값";
데이터 제한 : SELECT 컬럼명 FROM 테이블명 LIMIT 숫자;

데이터 삽입 : INSERT INTO 테이블명 (컬럼명) VALUES (데이터)
데이터 수정 : UPDATE 테이블명 SET 컬럼명 = "수정값" WHERE 조건
데이터 삭제 : DELETE FROM 테이블명 WHERE 조건




3. DQL문 & JOIN문

DQL문이란, Data Query Language의 약자로 데이터를 쿼리하는데 사용되는 sql 문법이다.


쿼리? 그럼 Query는 무엇일까?
"질의하다"의 의미를 갖는 단어로써 바로 데이터를 조회하기 위해 질문하는 걸 말하는 것이다.
프론트-백엔드 소통을 위한 API 구현시,
쿼리를 통해 DB 정보를 조회하고 그것을 응답으로 보내주기에 많이 사용될 수 밖에 없다.


쿼리문 중에 가장 사용 빈도가 높은 JOIN문은 서로 연관성 있는 테이블을 결합시킬 때 쓰이며 Inner Join과 Outer Join으로 나뉜다.
여기서 연관성이란, 두 테이블간 겹쳐지는 컬럼을 말하며 이것은 곧 Primary Key와 Foreign Key를 가리킨다.


Inner Join과 Outer Join은 Null 값을 포함하느냐 아니냐의 차이다.
두 테이블의 연관된 컬럼에 데이터가 있는 경우만 보여줄 때는 Inner Join을, 연관된 컬럼에 데이터가 비어있지만 그조차 보여주려 할 때는 Outer Join을 쓰면 된다.


Outer Join은 다시 Left Join과 Right Join, Full Outer Join으로 나눠지는데 각각 Join의 기준이 되는 대상의 데이터를 모두 포함해야 함을 명심해야 한다.
따라서 Join 당하는 쪽의 데이터가 비었어도 자동으로 Null 값으로 채워지게 된다.


3-1. Inner Join

만화 캐릭터가 있는 테이블과 색상이 있는 테이블이 있다고 할 때,
컬러 테이블의 id를 참조하여 캐릭터 테이블에 FK를 생성함으로써 좋아하는 색상 컬럼을 만든다 가정하자.

이 때 두 테이블 간의 Inner join의 결과는 다음과 같다.

SELECT characters.name FROM characters JOIN colors ON colors.id = characters.colors_id;

즉, 캐릭터 테이블에서 colors_id가 null값인 코난은 Inner join 결과 테이블에 나타나지 않게 된다.



3-2. Outer Join

이번엔 두 테이블을 Left (Outer) Join 한 결과를 살펴 보자.

SELECT characters.name FROM characters LEFT JOIN colors ON colors.id = characters.colors_id;

colors_id가 null값이었던 코난이 이번 left join으로 인해 테이블에 포함된 것을 알 수 있다.
한 편 right join의 경우는 join 당하는 테이블에 null값이 있는 경우 그 데이터를 포함해주는 것이다.

따라서 직감적으로 알 수 있겠지만, Left Join을 더 많이 사용하게 될 것 같다.
보통 참조하게 되는 테이블 컬럼은 그 테이블의 pk고, pk는 Not Null이기 때문이다.

profile
삶은 끊임없이 나의 한계와 맞서는 일이다.

0개의 댓글