Notice
Recent Posts
Recent Comments
Link
관리 메뉴

데브마우스

[SQL] SQL 1차 요점 정리: DML, DCL, JOIN 본문

데이터베이스/SQL: 정리

[SQL] SQL 1차 요점 정리: DML, DCL, JOIN

데브마우스 2024. 1. 6. 12:48

SQL의 DML(Data Manipulation Language)

CRUD 해당 SQL문
CREATE INSERT
READ SELECT
UPDATE UPDATE
DELETE DELETE

 

INSERT

데이터를 삽입할 때 사용합니다.

-- 테이블을 생성합니다.
CREATE TABLE member1 (mem_id INT, mem_name CHAR(4), age INT);

-- INSERT를 사용하는 방법입니다.
INSERT INTO member1 VALUES(1, '우리', 25); -- 모든 컬럼에 INSERT하는 방법입니다.
INSERT INTO member1 (mem_id, mem_name) VALUES(2, '버디'); -- 특정 컬럼에만 INSERT하는 방법입니다. 
INSERT INTO member1 (mem_name, age, mem_id) VALUES('제시', 20, 3); -- 컬럼의 순서를 원하는대로 지정한 후 INSERT하는 방법입니다.

-- 한 줄에 여러 데이터를 입력하는 방법입니다.
INSERT INTO member1 VALUES (NULL, '토마스', 20), (NULL, '제임스', 23), (NULL, '고든', 25);

AUTO_INCREMENT

CREATE TABLE asterik_test(
	first INT AUTO_INCREMENT,
    second varchar(10)
);

AUTO_INCREMENT 선언 시 해당 컬럼은 PK가 됩니다.

LAST_INSERT_ID() 함수

SELECT LAST_INSERT_ID(); -- AUTO_INCREMENT로 입력된 마지막 값을 보여줍니다.

SELECT

데이터를 조회할 때 사용합니다.

기본 형식은 SELECT 컬럼_이름_1, 컬럼_이름_2 ... FROM 테이블_이름; 입니다.

-- SELECT의 구조
SELECT select_expr(열 이름)
	[FROM table_references(테이블 이름)]
    [WHERE where_condition(조건식)]
    [GROUP BY {col_name | expr | position}(열 이름)]
    [HAVING where_condition(조건식)]
    [ORDER BY {col_name | expr | position}(열 이름)]
    [LIMIT {[offset, ] row_count | row_count OFFSET offset}(숫자)]

UPDATE

데이터를 수정할 때 사용합니다.

이때 WHERE 절 해당하는 모든 데이터가 변경되므로 조심해서 사용해야합니다.

예시로, WHERE뒤에 컬럼이름만 있을 경우, 컬럼에 해당되는 모든 행 데이터가 SET으로 변경할 값으로 변경됩니다.

UPDATE 테이블_이름 SET 컬럼_이름 = 변경할_값 WHERE 컬럼_이름 = 변경전_원래_값;
UPDATE 테이블_이름 SET 컬럼_이름 = 변경할_값 WHERE 컬럼_이름; -- 이렇게 사용하면 안됩니다.

DELETE

데이터를 삭제할 때 사용합니다.

DELETE FROM 테이블_이름 WHERE 컬럼_이름 = 삭제할_데이터;

DML의 LIKE

WHERE 조건절 뒤에 LIKE를 사용하여 원하는 규칙의 데이터를 선택할 수 잇습니다.

아래의 테이블이 있다고 가정하겠습니다.

c name_column prod_name
NULL NULL asdf
NULL NULL asdf
NULL NULL asdf
NULL NULL as1
NULL NULL as2
NULL NULL bs1
NULL NULL bs2

DML의 LIKE의 퍼센트(%)

DML의 퍼센트(%)는 0개 이상의 모든 문자를 나타냅니다.

select * from new_c where prod_name LIKE "as%";

위 코드 실행 시 결과는 아래와 같습니다.

c name_column prod_name
NULL NULL asdf
NULL NULL asdf
NULL NULL asdf
NULL NULL as1
NULL NULL as2

DML의 LIKE의 언더바(_)

DML의 언더바(_)는 1개의 모든 문자를 나타냅니다.

select * from new_c where prod_name LIKE "as_";

위 코드 실행 시 결과는 아래와 같습니다.

c name_column prod_name
NULL NULL as1
NULL NULL as2

DLM의 별칭(alias)

별칭(alais)를 지정하면 원래 컬럼 이름 대신 지정한 별칭이 컬럼 칸에 출력됩니다.

SELECT age AS "나이" from member;

DML의 연산

DML의 관계 연산자를 활용한 WHERE 절

WHERE 뒤에 >, >=, <=, =를 이용하여 초과, 미만, 이상, 이하, 같음의 해당하는 값을 조건식으로 표현할 수 있습니다.

DML의 논리 연산자를 활용한 WHERE 절

WHERE 뒤에 AND를 이용하여 AND 연산을 수행할 수 있습니다.

WHERE 뒤에 OR를 이용하여 OR 연산을 수행할 수 있습니다.

DML의 BETWEEN ~ AND를 활용한 WHERE 절

BETWEEN A AND BA 이상 B이하를 더 쉽게 표현할 수 있습니다.

SELECT mem_name, height FROM member WHERE age >= 20 AND height <=25;
SELECT mem_name, height FROM member WHERE age BETWEEN 20 AND 25;

DML의 IN()

조인(Join)

조인(Join)이란 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 의미합니다.

 

내부 조인

SELECT <열 목록>
FROM <첫 번째 테이블>
	[INNER] JOIN <두 번째 테이블> --INNER JOIN 대신 JOIN만 작성해도 INNER JOIN으로 인식합니다.
    ON <조인될 조건>
[WHERE 검색 조건]

외부 조인

외부 조인(Outer Join)은 내부조인과 달리 한 쪽에만 데이터가 있어도 조인을 할 수 있습니다.
외부 조인의 코드 형식은 아래와 같습니다.

SELECT <열 목록>
FROM <첫 번째 테이블 (LEFT 테이블)>
<LEFT | RIGHT | FULL> OUTER JOIN < 두 번째 테이블(RIGHT 테이블) >
ON <조인될 조건>
[WHERE 검색 조건];

LEFT OUTER JOIN문의 의미는, '왼쪽 테이블의 내용은 모두 출력되어야 한다'로 해석하시면 됩니다.

RIGHT OUTER JOIN에서 LEFT OUTER JOIN과 동일한 결과를 출력 하기 위해서, 첫 번째 테이블과 두 번째 테이블의 위치를 변경하시면 됩니다.

FULL OUTER JOIN은 LEFT OUTER JOIN과 RIGHT OUTER JOIN이 합쳐진 것입니다.

상호 조인

상호 조인(Cross Join)은 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능을 말합니다.

그렇게 하면 데이터가 늘어나게 되며 테스트 용도로 대용량의 데이터를 생성할 때 사용합니다.

SELECT *
	FROM <첫 번째 테이블>
    CROSS JOIn <두 번째 테이블>;

자체 조인

자체 조인이란 테이블을 자기 자신과 조인 하는 것을 의미합니다.

SELECT <열 목록>
FROM <테이블_이름> 별칭A
	INNER JOIN <테이블> 별칭B
    ON <조인될 조건>
[WHERE 검색 조건]

SQL의 DDL(Date Definition Language)

DCL문 설명
CREATE 데이터베이스, 테이블, 뷰, 인덱스, 프로시저를 생성합니다.
ALTER 데이터베이스, 테이블, 뷰, 인덱스, 프로시저를 수정합니다.
TRUNCATE 테이블을 비웁니다.
DROP 데이터베이스, 테이블을 삭제합니다.

CREATE

데이터베이스, 테이블, 뷰, 인덱스, 프로시저를 생성합니다.

CREATE - DATABASE

-- 데이터베이스 생성 코드
-- COLLATE는 데이터베이스의 정렬을 지정합니다.
CREATE DATABASE 데이터베이스_이름 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

CREATE - TABLE

CREATE TABLE 테이블_이름(
	컬럼_이름_1 데이터_형식 PRIMARY KEY,
    컬럼_이름_2 데이터_형식,
    FOREIGN KEY (컬럼_이름) REFERENCES 테이블_이름(컬럼_이름)
);

ALTER

데이터베이스, 테이블, 뷰, 인덱스, 프로시저를 수정합니다.

ALTER - RENAME

테이블의 이름을 변경합니다.

ALTER TABLE 테이블_이름 RENAME TO 바꿀_테이블_이름;

 

테이블의 컬럼의 이름을 변경합니다.

ALTER TABLE 테이블_이름 RENAME COLUMN 원래_컬럼_이름 TO 변경할_컬럼_이름;

ALTER - ADD

테이블에 컬럼을 추가합니다.

ALTER TABLE 테이블_이름 ADD 컬럼_이름 데이터_타입;

ALTER - MODIFY

테이블의 컬럼의 데이터 타입을 수정합니다.

ALTER TABLE 테이블_이름 MODIFY 컬럼_이름 데이터타입;

ALTER - DROP

테이블의 컬럼을 삭제합니다.

ALTER TABLE 테이블_이름 DROP 컬럼_이름;

ALTER - COLUMN

컬럼의 제약조건을 수정합니다.

ALTER TABLE 테이블_이름 ALTER COLUMN 컬럼_이름 SET DEFAULT 기본값;

TRUNACTE

테이블의 데이터를 삭제합니다 하지만 테이블은 남아있습니다.

TRUNCATE TABLE 테이블_이름;

DROP

테이블을 삭제합니다. 테이블과 데이터 모두 남지 않습니다.

DROP TABLE 테이블_이름;