[데이터베이스] 데이터 조작어(DML) - INSERT, UPDATE, DELETE, SELECT

01_데이터 조작어(DML: data manipulation language) - 삽입, 수정, 삭제


☾ 데이터 조작어

테이블에 데이터를 검색, 삽입, 수정, 삭제하는 데 사용

SELECT, INSERT, DELETE UPDATE문 등

 

 

 

 INSERT

테이블에 새로운 튜플 삽입

INSERT INTO 테이블이름[(속성리스트)] VALUES (값리스트);
INSERT INTO Constructors(constructor, engine, country, races_entered, height, width)
VALUES('McLaren', 'Mercedes', 'British', 884, 95, 180);

 

속성의 이름을 생략할 때는 데이터의 입력 순서와 속성의 순서가 일치해야 한다.

INSERT INTO Constructors VALUES('McLaren', 'British', 'Mercedes', 884, 95, 180);

 

INSERT 문은 SELECT 문을 사용하여 작성할 수도 있다.

INSERT INTO Constructors(constructor, engine, country, races_entered)
			 SELECT constructor, engine, country, races_entered
			 FROM Imported_Constructors;

 

 

 

 UPDATE

특정 속성값 수정

UPDATE 테이블이름
SET 속성이름1 = 값1[, 속성이름2 = 값2, ...]
[WHERE 검색조건];
UPDATE Customer
SET address='대한민국 서울'
WHERE custid=5;

 

Safe Updates 옵션 미 해제 시 아래와 같이 작성해야 한다.

SET SQL_SAFE_UPDATES=0;

 

 

 

 DELETE

테이블에 있는 기존 튜플 삭제

<검색조건>에 해당되는 튜플을 삭제하고, <검색조건>이 없으면 모든 튜플을 삭제한다.

다른 테이블에서 외래키로 참조하고 있다면 명령이 실행되지 않는다.

DELETE FROM 테이블이름 [WHERE 검색조건];
DELETE FROM Book WHERE bookid = 11;

 

 

 

 

02_데이터 조작어(DML: data manipulation language) - 검색


 SELECT

데이터를 검색하는 기본 문장으로, 검색한 결과를 테이블 형태로 출력

SELECT 문은 특별히 질의어(query)라고 함

SELECT 절에서 열 순서는 결과 테이블의 열 순서를 결정

SELECT [ALL | DISTINCT] 속성이름
FROM 테이블이름
[WHERE 검색조건]
[GROUP BY 속성이름]
[HAVING 검색조건]
[ORDER BY 속성이름 [ASC | DES]]
  1. FROM 절에 있는 테이블을 가져옴
  2. WHERE 절 조건에 의하여 튜플 선택
  3. SELECT 절에 있는 속성들을 결과로 출력

 

e.g., Customer 테이블에 있는 김연아라는 이름을 가진 사람의 phone을 가져오시오.

SELECT phone
FROM Customer
WHERE name='김연아';

 

 

  • ‘*’(asterisk) : 모든 열을 나타냄
SELECT * FROM Customer;

 

  • DISTINCT : 데이터의 중복을 제거하고 싶을 때 사용
SELECT DISTINCT name FROM Customer;

 

 

 

 WHERE

  • 비교
SELECT *
FROM Book
WHERE price < 20000;

 

  • 범위 BETWEEN : 값의 범위 지정
SELECT *
FROM Book
WHERE price BETWEEN 10000 AND 20000;

 

  • 집합 : 두개 이상의 값 비교
    • IN: 집합의 원소인지 판단하는 연산자
    • NOT IN: 집합의 원소가 아닌지 판단하는 연산자
-- 출판사가 '굿스포츠' 또는 '대한미디어'인 도서를 검색하시오.

SELECT *
FROM Book
WHERE publisher IN ('굿스포츠', '대한미디어');

-- 출판사가 '굿스포츠' 또는 '대한미디어'가 아닌 도서를 검색하시오.

SELECT *
FROM Book
WHERE publisher NOT IN ('굿스포츠', '대한미디어');

 

  • 패턴 LIKE : 문자열 패턴 비교
-- '축구의 역사'를 출간한 출판사를 검색하시오.

SELECT bookname, publisher
FROM Book
WHERE bookname LIKE '축구의 역사';

 

와일드 문자를 사용하여 검색할 수 있다.

와일드 문자 의미 사용 예
% 0개 이상의 문자열과 일치 '%야구%' : 야구라는 단어를 포함하는 문자열
[ ] 1개의 문자와 일치 '[0-5]%' : 0-5 사이의 숫자로 시작하는 문자열
[^] 1개의 문자와 불일치 '[^0-5]%' : 0-5 사이의 숫자로 시작하지 않는 문자열
_ 특정 위치에 있는 1개의 문자와 일치 '_구%' : 두 번째 위치에 '구'가 들어가는 문자열
-- 도서 이름의 왼쪽 두 번째 위치에 '구'라는 문자열을 갖는 도서 이름을 검색하시오.

SELECT bookname
FROM Book
WHERE bookname LIKE '_구%';

 

  • 복합조건 AND, OR, NOT
-- 축구에 관한 도서 중 가격이 20000원 이상인 도서 이름을 검색하시오.

SELECT bookname
FROM Book
WHERE bookname LIKE '%축구%' AND price >= 20000;

 

 

 

 ORDER BY

실행 결과를 특정 순서대로 출력하고 싶을 때

기본은 오름차순으로 정렬

문자의 경우 숫자, 영문자, 한글 순으로 정렬된다.

-- 도서를 가격 순으로 검색하고, 가격이 같으면 이름 순으로 검색하시오.

SELECT *
FROM Book
ORDER BY price, bookname;

 

내림차순으로 정렬하려면 열 이름 다음에 DESC키워드 사용

-- 도서를 가격의 내림차순으로 검색하고, 가격이 같으면 이름을 오름차순으로 검색하시오.

SELECT *
FROM Book
ORDER BY price DESC, bookname ASC;

 

 

 

 GROUP BY

속성값이 같은 값끼리 그룹을 만든다.

-- 고객별로 주문한 도서의 총수량과 총판매액을 구하시오.

SELECT custid, COUNT(*) AS 도서수량, SUM(saleprice) AS 총액
FROM Orders
GROUP BY custid;

 

 

 

 HAVING

GROUP BY 절의 결과에서 나타나는 그룹 제한

반드시 GROUP BY 절과 함께 작성해야 한다.

WHERE 절보다 뒤에 나와야 한다.

검색조건에는 집계함수가 와야 한다.

-- 가격이 8000원 이상인 도서를 구매한 고객에 대하여 고객별 주문 도서의 총수량을 구하시오.
-- 단, 2권 이사아 구매한 고객에 대해서만 구하시오.

SELECT custid, COUNT(*) AS 도서수량
FROM Orders
WHERE saleprice <= 8000
GROUP BY custid
HAVING COUNT(*) >= 2;

 

 

 

 집계 함수

테이블의 각 열에 대해 계산하는 함수

집계 함수 설명
SUM 속성의 총 합 계산
AVG 속성의 평균 계산
COUNT 속성의 개수 계산
MAX 속성의 최댓값 반환
MIN 속성의 최솟값 반환

 

AS : 열 이름을 부여할 때 사용

-- 고객이 주문한 도서의 총판매액, 평균값, 최저가, 최고가를 구하시오.

SELECT SUM(saleprice) AS Total,
			 AVG(saleprice) AS Average,
			 MIN(saleprice) AS Minimum,
			 MAX(saleprice) AS Maximum
FROM Orders;

 

  • COUNT : 해당 속성의 튜플(행) 개수를 센다.
-- 도서 판매 건수를 구하시오.

SELECT COUNT(*) FROM Orders;