SQL

[MySQL] 4. JOIN(INNER, LEFT, RIGHT)과 DML(SELECT, INSERT, UPDATE, DELETE)

찰리-누나 2022. 12. 24.

 


JOIN



JOIN은 테이블을 합쳐줄 때 사용하는 문법이다. 학창시절 DB수업을 들었을 때 가장 많이 본 이미지가 바로 이것이었다.

JOIN은 사실 진짜 이게 다임

 

 

 

 

테이블을 공통점을 중심으로 합쳐주는 조인(JOIN) 문법에는 INNER JOIN, LEFT JOIN, RIGHT JOIN이 있다.

실습을 하기 위해 데이터를 아래와 같이 수정하고, 외래키 연결을 해제해준다.

 

 

먼저 두 개의 테이블을 한번에 출력하는 법은 아래와 같다.


SELECT * FROM 테이블1, 테이블2

이 문법을 사용하면 가능한 모든 조합을 출력해준다.

가능한 모든 조합을 출력하려고 한다.

 

 

INNER JOIN 테이블 ON 조건 은 조건으로 주어진 테이블의 공통점을 필터링해 출력한다..


SELECT 컬럼명 FROM 테이블이름 INNER JOIN 테이블이름 ON 조건

 

모든 행의 조합을 출력해 보려면 CROSS JOIN을 사용한다.

 


SELECT 컬럼명 FROM 테이블이름 CROSS JOIN 테이블이름 ON 조건

 

 

LEFT JOIN, RIGHT JOIN은 테이블간의 접점이 없는 행을 출력하고 싶을 때 주로 사용한다. LEFT OUTER JOIN, RIGHT OUTER JOIN이라고 적어줄 수도 있는데 OUTER은 생략이 가능하다. 

 


SELECT 컬럼명 FROM 테이블이름 LEFT JOIN 테이블이름 ON 조건
SELECT 컬럼명 FROM 테이블이름 RIGHT JOIN 테이블이름 ON 조건


 

LEFT JOIN은 'INNER JOIN을 하는데, LEFT JOIN의 왼쪽에 적은 테이블의 내용은 모두 출력해달라' 는 뜻이다.

RIGHT JOIN은 'INNER JOIN을 하는데, RIGHT JOIN의 오른쪽에 적은 테이블의 내용은 모두 출력해달라' 는 뜻이다.

 

실습을 위해 user, aboutpet 테이블에 레코드를 추가해주었다.

각각 6번째 레코드를 추가해준다.

 

 

LEFT 조인을 사용한다. INNER JOIN을 하되, JOIN문의 왼쪽에 적은 user 테이블은 조건에 맞지 않더라도 모두 출력될 것이다.

where 조건문과 맞지 않는 user 테이블까지 모두 출력되었다.

 

RIGHT 조인을 사용한다. INNER JOIN을 하되, JOIN문의 오른쪽에 적은 aboutpet 테이블은 조건에 맞지 않더라도 모두 출력될 것이다.

 

이를 통해 원하는 데이터만 걸러낼 수 있는 WHERE문을 추가해줄 수 있다. havepet이 NULL인 user 데이터만 출력해보자. IS NULL을 사용한다.

 

 

 

 


DML


DML은 Data Manipulation Language 의 약어로, '데이터 조작 언어'를 뜻한다. 데이터베이스 내의 데이터를 조작(데이터 추출, 생성, 수정, 삭제) 하는 언어라는 의미다. 

  • SELECT 컬럼명 FROM 테이블명 : 데이터 조회
  • INSERT INTO 테이블 (컬럼명1, 컬럼명2, 컬럼명3...) VALUES (값1, 값2, 값3...) : 레코드 생성
  • UPDATE 테이블명 SET 컬럼명=수정할값 WHERE 조건 : 레코드 수정
  • DELETE FROM 테이블 WHERE 조건 : 레코드 삭제
  • COMMIT : 트랜잭션 처리
  • ROLLBACK : 트랜잭션 복구

 

INSERT

INSERT는 레코드를 추가할 때 사용한다. 즉, 테이블에 직접 데이터를 넣을 때 사용하는 문법이다.


INSERT INTO 테이블 (컬럼명1, 컬럼명2, 컬럼명3...) VALUES (값1, 값2, 값3...)

 

해당 테이블의 모든 컬럼에 값을 넣고자 할 때에는, '컬럼명'을 적는 부분을 생략해 줄 수 있다.

 

values의 값으로는 0, NULL, 숫자, 문자를 넣을 수 있으며 서브쿼리를 넣을 수 있다. 타 테이블의 데이터를 복사해 붙여넣기 할 때 서브쿼리를 이용해 INSERT문을 사용할 수 있다.

 


INSERT INTO 붙여넣기할 테이블명 SELECT * FROM 복사할 테이블명

 

newtable을 만들고, 컬럼을 복사해둔다. 실제 레코드는 아무것도 넣지 않았다.

테이블을 복사해보기 위해 newtable을 생성한다.
테이블 속 데이터의 내용이 복사되었다.

 

또는 CREATE문을 이용할 수 있다.

 


CREATE TABLE 생성할 테이블명 SELECT * FROM 복사할 테이블명

테이블의 내용이 복사되었다.

 

 

UPDATE

UPDATE문은 테이블 속 데이터, 즉 레코드의 일부 내용을 수정할 때 사용한다. 조건을 주어 레코드를 찾아, 내용을 수정하는 방식이다. 조회문과 달리 테이블에 존재하는 데이터가 직접 수정되므로, 각별히 주의하여 사용해야 한다.

UPDATE 테이블명 SET 컬럼명=수정할값 WHERE 조건

* 만일 where문을 작성하지 않으면 모든 레코드가 수정된다.

 

id가 123인 곳의 값을 수정해본다.
수정이 반영되었다.

DELETE

DELETE문은 실제 테이블에 존재하는 내용을 삭제할 때 사용한다. 조건을 만족하는 레코드를 삭제하는데, WHERE문을 적지 않으면 모든 데이터가 삭제되므로 주의를 요해야 한다.

 


DELETE FROM 테이블명 WHERE 조건

aboutpet에서 id가 6인 데이터를 삭제해보자.

id가 6인 데이터를 삭제하자, 실제로 삭제가 반영되었다.

 

 

 

UPDATE문과 DELETE문에는 '조인한 테이블'을 넣어줄 수도 있다. 수정, 삭제문이기 때문에 테이블에 내용이 직접 반영된다. UPDATE문을 통해 테이블을 조인하고, 조인한 테이블을 수정해본다. user와 aboutpet을 pet아이디를 기준으로 inner join 하고, user의 havepet이 1인 곳의 닉네임을 '조인한 테이블 변경'으로 수정해준다.

 

 

수정한 내용이 반영되었다.

 

 

 

마찬가지로 DELETE문에 JOIN을 사용해본다. 펫 아이디가 같은 데이터 중, user의 havepet이 3인 내용을 삭제해 줄 것이다. 이때 DELETE문 옆에 적은 테이블의 데이터만 삭제된다. 만일 조인한 두 개의 테이블 속 데이터를 삭제하고 싶다면, 테이블 두개의 이름을 콤마(,) 로 구분하여 DELETE 옆에 적어주면 된다.

 

 

 

 

삭제가 반영되었다.

댓글