본문 바로가기

Database

[DB]SQL 기초

SQL 개요

SQL 기능에 따른 분류

  • 데이터 정의어(DDL): 테이블을 생성하는 데 사용하며 CREATE, ALTER, DROP문 등이 있습니다.
  • 데이터 조작어(DML): 테이블에 대해 데이터 검색, 삽입, 수정, 삭제 시 사용하며 INSERT, SELECT, DELETE, UPDATE문 등이 있습니다. 여기서 SELECT 문은 특별히 query문(질의어)라고 합니다.
  • 데이터 제어어(DCL): 데이터 사용 권한을 관리할 때 사용합니다. GRANT, REVOKE문 등이 있습니다. 

SQL의 실행 순서는 다음과 같습니다. FROMWHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT 


데이터 정의어 - DDL

CREATE 문

  • 테이블생성하고, 속성속성에 관한 제약정의하며, 기본키 및 외래키를 정의하는 명령입니다.
  • PRIMARY KEY는 기본키, FOREIGN KEY는 외래키를 지정할 때 사용하며, ON UPDATE와 ON DELETE는 외래키 속성의 수정과 튜플 삭제 시 동작을 나타냅니다.
CREATE TABLE NewBook (
	bookname VARCHAR(20) NOT NULL,
    	publisher VARCHAR(20) UNIQUE,
    	price NUMBER DEFAULT 10000 CHECK(price > 1000),
    	PRIMARY KEY(bookname, publisher)
);

 

 

ALTER 문

  • ALTER문은 생성된 테이블의 속성 속성에 관한 제약변경하며, 기본키 및 외래키변경합니다.
  • ADD, DROP은 속성을 추가하거나 제거할 때 사용합니다. (ALTER ADD ~, ALTER DROP ~)
  • MODIFY는 속성의 데이터 타입을 변경할 때 사용합니다. (ALTER MODIFY ~)
# 속성 추가
ALTER TABLE NewBook ADD isbn VARCHAR(13);

# 데이터 타입 변경
ALTER TABLE NewBook MODIFY isbn NUMBER;

# 속성 삭제
ALTER TABLE NewBook DROP COLUMN isbn;

# NOT NULL 제약 조건 적용
ALTER TABLE NewBook MODIFY bookid NUMBER NOT NULL;

# 속성을 기본키로 변경
ALTER TABLE NewBook ADD PRIMARY KEY(bookid);

 

 

DROP 문

  • 테이블을 삭제하는 명령입니다.
  • 테이블의 구조와 데이터를 모두 삭제하므로 사용에 주의해야 합니다. (데이터만 삭제 → DELETE)
DROP TABLE NewBook;

데이터 조작어 - DML

SELECT문 

  • 테이블에 존재하는 데이터를 조회할 때 사용합니다.
  • SELECT bookname, publisher (속성 이름)
  • FROM Book (테이블 이름)
  • WHERE price >= 10000; (검색 조건)
# 가격이 10,000원 이상 20,000 이하인 도서를 검색하시오
SELECT * FROM Book WHERE price BETWEEN 10000 AND 20000;

SELECT * FROM Book WHERE price >= 10000 AND price <= 20000;

 

WHERE 조건으로 사용할 수 있는 술어

 

연산의 예시

# '축구'라는 문자열이 포함된 책 이름과 출판사 검색하기
SELECT bookname, publisher FROM Book WHERE bookname LIKE '%축구%';

# 도서 이름의 2번째 위치에 '구'라는 문자열을 가진 도서를 검색, _: 1글자를 의미, %: 어떤 문자열이던 상관없다.
SELECT * FROM Book WHERE bookname LIKE '_구%';

# 도서를 가격을 기준으로 내림차순으로 검색. 만약 가격이 같다면 출판사의 오름차 순으로 검색한다.
SELECT * FROM Book ORDER BY price DESC, publisher ASC;

# custid가 2인 고객이 주문한 도서의 총 판매액 구하기
SELECT SUM(saleprice) AS 총매출 FROM Orders WHERE custid = 2;

# 마당 서점의 도서 판매 건수 구하기
SELECT COUNT(*) FROM Orders;

# 고객 별 주문한 도서의 총 수량과 총 판매액 구하기
SELECT custid, COUNT(*) AS 도서수량, SUM(saleprice) AS 총액
FROM Orders
GROUP BY custid;

집계 함수의 종류

 

조인 연산

# 고객의 이름과 고객이 주문한 도서의 판매가격 검색하기
SELECT name, saleprice FROM Customer, Orders WHERE Customer.custid = Orders.custid;

# 고객별로 주문한 모든 도서의 총 판매액을 구하고 고객 별로 정리하기
SELECT name, SUM(saleprice)
FROM Customer, Orders
WHERE Customer.custid = Orders.custid
GROUP BY Customer.name
ORDER BY Customer.name;

 

부속질의(Subquery)

  • 상관 부속질의는 상위 부속 질의의 튜플을 이용하여 하위 부속 질의를 계산합니다.
  • 상위 부속질의와 하위 부속질의가 독립적이지 않고 서로 관련을 맺고 있습니다.
# 도서를 구매한 적이 있는 고객의 이름을 검색하세요
SELECT name FROM Customer WHERE custid IN (SELECT custid FROM Orders);

# 대한미디어에서 출판한 도서를 구매한 고객의 이름을 보이세요.
SELECT name
FROM Customer
WHERE custid IN (SELECT custid FROM Orders WHERE bookid 
		IN (SELECT bookid FROM Book WHERE publisher = '대한미디어'));

 

EXIST

  • EXIST는 원래 단어에서 의미하는 것과 같이 조건에 맞는 튜플이 존재하면 결과에 포함시킵니다.
  • 즉, 부속 질의문의 어떤 조건에 만족하면 참이 됩니다.
  • 반면, NOT EXIST는 부속 질의문의 모든 행이 조건에 만족하지 않을 때만 참입니다.
# 주문이 있는 고객의 이름과 주소를 보이세요.
SELECT name, address FROM Customer cs WHERE EXISTS (SELECT * FROM Orders od WHERE cs.custid = od.custid);

 

 

 

INSERT 문

  • 테이블에 새로운 튜플을 삽입하는 명령입니다.
  • 대량 삽입(Bulk Insert)이란 한번에 여러 개의 튜플을 삽입하는 방법입니다.
# Book 테이블에 새로운 도서 '스포츠 의학' 삽입하기
INSERT INTO Book(bookid, bookname, publisher) VALUES (14, '스포츠 의학', '한솔의학서적');

# Imported_book(수입 도서 목록)을 Book 테이블에 삽입하기
INSERT INTO Book(bookid, bookname, price, publisher) 
SELECT bookid, bookname, price, publisher 
FROM Imported_book;

 

 

UPDATE 문

  • 특정 속성의 값을 수정하는 명령어 입니다.
# 고객번호가 5인 고객의 주소를 '대한민국 부산'으로 변경하기
UPDATE Customer SET address = '대한민국 부산' WHERE cusid = 5;

# Customer 테이블에서 박세리 고객의 주소를 김연아 고객의 주소로 변경하기
UPDATE Customer SET address = (SELECT address FROM Customer WHERE name = '김연아') WHERE name LIKE '박세리';

 

 

DELETE 문

  • 테이블에 있는 기존 튜플을 삭제하는 명령
# Customer 테이블에서 고객번호가 5인 고객 삭제하기
DELETE FROM Customer WHERE custid = 5;

# 모든 고객 삭제
DELETE FROM Customer

오라클로 배우는 데이터베이스 개론과 실습

 

1장. [DB]데이터베이스 시스템

2장. [DB]관계 데이터 모델

3장. [DB]SQL 기초

4장. [DB]SQL 고급

5장. [DB]데이터베이스 프로그래밍

6장. [DB]데이터 모델링

7장. [DB]정규화(Normalization)

8장. [DB]트랜잭션, 동시성 제어, 회복

참고

https://mangkyu.tistory.com/24

 

[Database] 3. SQL 기초

[ 본 사진은 쉽게 배우는 오라클로 배우는 데이터베이스 개론과 실습 ppt에서 캡처했습니다. ] 1. SQL학습을 위한 준비[ SQL과 일반 프로그래밍 언어 ] 2. SQL 개요[ SQL기능에 따른 분류 ]데이터 정의어

mangkyu.tistory.com

 

'Database' 카테고리의 다른 글

[DB]SQL 고급  (1) 2024.09.11
[DB]내장 함수  (0) 2024.09.11
[DB]관계 데이터 모델  (0) 2024.09.03
[DB]데이터베이스 시스템  (0) 2024.09.03
[DB]REDO와 UNDO로 데이터 복구하기  (0) 2024.08.30