[DB] SQL문 문법 정리 - DML

SQL

 데이터베이스 시스템에서 자료를 처리하는 용도로 사용되는 언어. 목적에 따라서 DDL(데이터 정의어 - 테이블이나 관계 생성), DML(데이터 조작어 - 테이블의 데이터 CRUD), DCL(데이터 제어어 - 데이터의 사용 권한 관리)로 구분된다. 

 

 

DML (데이터 조작어)

 테이블에 데이터를 검색/삽입/수정/삭제하는데 사용되며, select, insert, delete, update문 등이 있다. 

 

 

- SELECT

: 테이블에 데이터를 검색하여 출력하는 목적으로 사용되는 쿼리문.

 

1. ALL | DISTINCT : ALL은 중복허용을 의미하고 (default값), DISTINCT는 중복을 제거하고 집계하는 것을 의미한다.

ex) select distinct * from Book;

 

2. WHERE 절에는 여러가지 조건문을 사용할 수 있는데, 예를 들면 비교, 범위(BETWEEN 10 AND 20), 집합(IN (10,20,30)), 패턴(LIKE '한국'), 널여부(IS NULL, IS NOT NULL), 복합조건(AND, OR, NOT)등의 조건을 달 수 있다.

2-1 범위(BETWEEN 10 AND 20): 10<=x<=20인 x를 추출한다.

2-2 집합(name IN ('서울', '부산')): 집합 내의 name만을 추출한다.

2-3 패턴(name LIKE '%한국%'): name이 한국을 포함하는 원소를 추출한다.

2-4 존재(name EXISTS (select * from ...)): 부속질의문의 조건이 만족하는지를 확인한다.

 

3. ORDER BY : 정렬방식을 의미하며, ASC(오름차순, default), DESC(내림차순)이 존재한다

ex) select * from Book order by name DESC, price ASC;

 

4. GROUP BY : 해당 속성을 기준으로 묶어 정리한다.

단, select속성에는 group by의 조건과 집계 함수만 존재해야 한다.

ex) select id, count(*), sum(*) from orders group by id;

 

4-1. HAVING : where절과 비슷하게 조건을 나타내는 구문.

하지만 반드시 GROUP BY와 같이 사용해야하고, WHERE절보다 뒤에 나와야 하며, HAVING의 검색 조건에는 집계함수만 올 수 있다.

ex) select id, count(*) from orders where price>=800 group by id having count(*)>=2;

> 가격이 800 이상인 튜플들을 order테이블에서 가져와서 id로 그룹짓고 개수를 카운트해서 나타낸다. 단, 개수>=2여야 함

 

5. 조인

select * from customers, orders where customer.custid = orders.custid;

> customers과 orders테이블을 동등조인한 것

select name, price from customers, orders where customers.custid = orders.custid;

> 고객의 이름과 고객이 주문한 도서의 판매가격

select sum(price) from customers, orders where customers.custid = orders.custid group by curstomers.name order by customers.name;

> 고객(이름)별로 주문한 금액의 합을 고객별로 정렬

 

6. 부속질의 : sql문 내에 또다른 sql문이 들어감

 모든 부속질의문은 join을 통해서 표현할 수 있다. 하지만 보여주고자 하는 속성이 한 테이블에만 존재하는 경우 join보다 부속질의를 사용하는 것이 편리성이 존재한다.

ex) 'A출판사'에서 출판한 도서를 구매한 고객의 이름을 보이시오.

> select name from customers where custid in (select custid from orders where bookid in (select bookid from book where publisher='A출판사'));

 

* join은 보여주려는 속성이 여러 테이블에 포함된 경우, 부속질의는 한 테이블에만 존재할 경우 사용.

 

7. 합집합, 차집합, 교집합

합집합은 union을 사용하면 되지만, 차집합과 교집합의 경우 NOT IN/IN연산자를 사용하여 나타낸다.

 

 

 

 

- INSERT

: 테이블에 데이터를 삽입하는 목적으로 사용되는 쿼리문

 

 

- UPDATE

: 테이블에 있는 데이터를 갱신하려는 목적으로 사용되는 쿼리문. 속성(열)의 값을 변경하는데, 조건(where)문이 없는 경우 열에 해당되는 모든 데이터를 변경하게 된다.

 

 

- DELETE

: 테이블의 데이터를 삭제하는 목적으로 사용하는 쿼리문. update와 동일하게 검색조건을 통해서 속성이 일치하는 데이터를 삭제한다.

 

 

'[ CS기초 ] > 데이터베이스' 카테고리의 다른 글

[DB] 정규화  (0) 2023.02.17
[DB] 트랜잭션, 동시성 제어, 락  (0) 2023.02.08
[DB] 관계 데이터 모델 기초  (0) 2022.09.17
[DB] 데이터베이스 개념  (1) 2022.09.10
[DB] 트랜잭션 격리 수준  (0) 2022.07.18