JOIN
JOIN은 테이블을 합쳐줄 때 사용하는 문법이다. 학창시절 DB수업을 들었을 때 가장 많이 본 이미지가 바로 이것이었다.
테이블을 공통점을 중심으로 합쳐주는 조인(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 테이블에 레코드를 추가해주었다.
LEFT 조인을 사용한다. INNER JOIN을 하되, JOIN문의 왼쪽에 적은 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을 만들고, 컬럼을 복사해둔다. 실제 레코드는 아무것도 넣지 않았다.
또는 CREATE문을 이용할 수 있다.
CREATE TABLE 생성할 테이블명 SELECT * FROM 복사할 테이블명 |
UPDATE
UPDATE문은 테이블 속 데이터, 즉 레코드의 일부 내용을 수정할 때 사용한다. 조건을 주어 레코드를 찾아, 내용을 수정하는 방식이다. 조회문과 달리 테이블에 존재하는 데이터가 직접 수정되므로, 각별히 주의하여 사용해야 한다.
UPDATE 테이블명 SET 컬럼명=수정할값 WHERE 조건 |
* 만일 where문을 작성하지 않으면 모든 레코드가 수정된다.
DELETE
DELETE문은 실제 테이블에 존재하는 내용을 삭제할 때 사용한다. 조건을 만족하는 레코드를 삭제하는데, WHERE문을 적지 않으면 모든 데이터가 삭제되므로 주의를 요해야 한다.
DELETE FROM 테이블명 WHERE 조건 |
aboutpet에서 id가 6인 데이터를 삭제해보자.
UPDATE문과 DELETE문에는 '조인한 테이블'을 넣어줄 수도 있다. 수정, 삭제문이기 때문에 테이블에 내용이 직접 반영된다. UPDATE문을 통해 테이블을 조인하고, 조인한 테이블을 수정해본다. user와 aboutpet을 pet아이디를 기준으로 inner join 하고, user의 havepet이 1인 곳의 닉네임을 '조인한 테이블 변경'으로 수정해준다.
마찬가지로 DELETE문에 JOIN을 사용해본다. 펫 아이디가 같은 데이터 중, user의 havepet이 3인 내용을 삭제해 줄 것이다. 이때 DELETE문 옆에 적은 테이블의 데이터만 삭제된다. 만일 조인한 두 개의 테이블 속 데이터를 삭제하고 싶다면, 테이블 두개의 이름을 콤마(,) 로 구분하여 DELETE 옆에 적어주면 된다.
'SQL' 카테고리의 다른 글
[MySQL] 6. 프로시저(stored procedure)와 추억 (0) | 2022.12.26 |
---|---|
[MySQL] 5. UNION과 VIEW (1) | 2022.12.24 |
[MySQL] 3. 테이블 정규화와 외래키 (2) | 2022.12.24 |
[MySQL] 2. 테이블 생성 및 수정 - DDL (CREATE, ALTER, DROP, TRUNCATE) (3) | 2022.12.23 |
[MySQL] 1-4. 데이터 조회 - CASE문과 IF문 (0) | 2022.12.23 |