국민대학교에서 "오라클로 배우는 데이터베이스 개론과 실습(2판)" 을 이용한
신인수 교수님의 강의 교안을 이용하여 수업 내용을 정리하였습니다
1. SQL 개요
SQL 기능에 따른 분류
- 데이터 정의어 (DDL)
- 테이블이나 관계의 구조를 생성하는 데 사용
- CREATE, ALTER, DROP 문 등이 있음
- 테이블이나 관계의 구조를 생성하는 데 사용
- 데이터 조작어 (DML)
- 테이블에 데이터를 검색, 삽입, 수정, 삭제하는데 사용
- SELECT, INSERT, DELETE, UPDATE 문 등이 있음
- SELECT 문은 특별히 질의어(query)라고 함
- 테이블에 데이터를 검색, 삽입, 수정, 삭제하는데 사용
- 데이터 제어어 (DCL)
- 데이터의 사용 권한을 관리하는 데 사용
- GRANT, REVOKE 문 등이 있음
- 데이터의 사용 권한을 관리하는 데 사용
2. 데이터 조작어 - 검색
SELECT 문
이것저것 많아서 어려워보이지만 결국
SELECT 속성 이름
FROM 테이블 이름
WHERE 검색 조건
이런식으로 키워드 뒤에 형식에 맞춰 속성, 테이블, 조건 등을 집어 넣으면 됨!
SELECT/FROM
Book이라는 테이블에서 모든 출판사를 검색하고 싶으면
SELECT publisher
FROM Book;
다음과 같이 코드를 작성하면 된다
SELECT DISTINCT publisher
FROM Book;
만약 중복을 제거하고 싶으면 DISTINCT라는 키워드를 사용한다!
WHERE 조건
나머지는 보면 바로 이해할 수 있을 것이고 패턴 부분을 살펴보면
만약 도서이름에 '축구'가 포함된 출판사를 검색하고 싶다면
SELECT bookname, publisher
FROM Book
WHERE bookname LIKE '%축구%';
이런식으로 와일드 문자를 사용해서 LIKE를 적용시키면 됨
만약 도서이름의 왼쪽 두 번째 위치에 '구'라는 문자열을 갖는 도서를 검색하고 싶다면
SELECT *
FROM Book
WHERE bookname LIKE '_구%';
와일드 문자를 사용하여 다음과 같이 작성할 수 있다
ORDER BY
ORDER BY는 정렬에 관한 키워드로 예시 하나를 보면 바로 이해가 될텐데
도서를 가격의 내림차순으로 검색할건데 만약 가격이 같다면 출판사의 오름차순으로 검색하고 싶다면
SELECT *
FROM Book
ORDER BY price DESC, publisher ASC;
다음과 같이 사용하면 된다
(ORDER BY의 기본값은 ASC(오름차순)으로 되어있음!)
집계 함수와 GROUP BY
집계 함수(Aggregate Function)
고객이 주문한 도서의 총 판매액을 구하려면
SELECT SUM(saleprice)
FROM Orders;
위의 코드처럼 작성하면 된다
SELECT SUM(saleprice) AS 총매출
FROM Orders;
=> 의미 있는 열 이름을 출력하고 싶으면 속성이름의 별칭을 지칭하는 AS 키워드를 사용하여 열 이름을 부여한다
GROUP BY 절
고객별로 주문한 도서의 총 수량과 총 판매액을 구하려면
SELECT custid, COUNT(*) AS 도서수량, SUM(saleprice) AS 총액
FROM Orders
GROUP BY custid;
다음과 같이 작성한다
- HAVING 절 (WHERE절과 함께 사용되는 경우 순서 조심!)
두 개 이상 테이블에서 SQL 질의
조인(Join)
Customer 테이블을 Orders 테이블과 조건 없이 연결
=> 고객이 다섯 명이고 주문이 열 개이면 5 x 10 해서 전체 투플의 개수는 50개가 된다
부속질의(Subquery) : SQL문 내에 또 다른 SQL문
상관 부속질의(correlated subquery)는 상위 부속질의의 투플을 이용하여 하위 부속질의를 계산함
=> 즉, 상위 부속질의와 하위 부속질의가 독립적이지 않고 서로 관련을 맺고 있음
집합연산(Set Operation)
합집합 UNION, 차집합 EXCEPT, 교집합 INTERSECT
=> Oracle은 차집합을 MINUS로 하지만, SQL 표준에서는 EXCEPT를 사용!
도서를 주문하지 않은 고객의 이름을 보이려면
{도서를 주문하지 않은 고객} = {모든 고객} - {도서를 주문한 고객}
SELECT name
FROM Customer
MINUS
SELECT name
FROM Customer
WHERE custid IN (SELECT custid
FROM Orders);
다음과 같이 작성하면 된다
EXISTS
원래 단어에서 의미하는 것과 같이 조건에 맞는 튜플이 존재하면 결과에 포함시킨다
=> 즉, 부속질의문의 어떤 행이 조건에 만족하면 참임
NOT EXISTS
부속질의문의 모든 행이 조건에 만족하지 않을 때만 참임
3. 데이터 정의어
CREATE 문
테이블을 구성하고, 속성과 속성에관한 제약을 정의하며, 기본키 및 외래키를 정의하는 명령
PRIMARY KEY는 기본키를 정할 때 사용하고,
FOREIGN KEY는 외래키를 지정할 때 사용하며,
ON UPDATE와 ON DELETE는 외래키 속성의 수정과 투플 삭제 시 동작을 나타낸다
외래키 제약조건을 명시할 때 반드시 참조되는 테이블(부모 릴레이션)이 존재해야 하며 참조되는 테이블의 기본키여야 함!
=> 외래키 지정 시 ON DELETE 또는 ON UPDATE 옵션은 참조되는 테이블의 투플이 삭제되거나 수정될 때 취할 수 있는 동작을 지정함 (NO ACTION은 어떠한 동작도 취하지 않음)
ALTER 문
ALTER문은 생성된 테이블의 속성과 속성에 관한 제약을 변경하며, 기본키 및 외래키를 변경한다
ADD, DROP은 속성을 추가하거나 제거할 때 사용
MODIFY는 속성의 기본값을 설정하거나 삭제할 때 사용
=> ADD <제약이름>, DROP <제약이름>은 제약사항을 추가하거나 삭제할 때 사용
DROP 문
DROP문은 테이블을 삭제하는 명령이다
=> 테이블의 구조와 데이터를 모두 삭제하므로 데이터만 삭제하려면 DELETE문을 사용해야한다
기본 문법은
DROP TABLE 테이블이름
이다!
4. 데이터 조작어 - 삽입, 수정, 삭제
INSERT 문
INSERT문은 테이블에 새로운 투플을 삽입하는 명령이다
INSERT INTO Book(bookid, bookname, publisher)
VALUES(14, '스포츠 의학', '한솥의학서적');
과 같이 가격을 적지않으면 NULL로 채워짐!
UPDATE 문
UPDATE문은 특정 속성 값을 수정하는 명령이다
DELETE 문
DELETE문은 테이블에 있는 기존 투플을 삭제하는 명령이다
'Database > 데이터베이스' 카테고리의 다른 글
Chapter 06. 데이터 모델링 (0) | 2024.05.15 |
---|---|
Chapter 05. 데이터베이스 프로그래밍 (1) | 2024.04.16 |
Chapter 04. SQL 고급 (1) | 2024.04.15 |
Chapter 02. 관계 데이터 모델 (1) | 2024.04.12 |
Chapter 01. 데이터베이스 시스템 (2) | 2024.04.10 |