[Database] 데이터 조작어(DML)
- 데이터를 검색, 삽입,수정, 삭제 하는데 사용하며 SELECT,INSERT,DELETE,UPDATE 문이 있다.
- SELECT문은 질의어라고도 한다.
데이터 조작어 - 검색
별칭
- SELECT SUM(saleprice) AS 총매출 처럼 SUM(saleprice)를 총매출 로 부여
SELECT 문
SELECT / FROM
- SELECT - 속성명
- SELECT * 하면 모든 속성 작성하기
- 중복을 제거하고 싶으면 SELECT DISTINCT pulisher
- FROM - 테이블이름
- Where - 조건(비교, between, in, like, isnull, and 등)
- 비교 ≥ ≤ 등으로 비교
- between ~이상 ~ 이하
- IN( ) IN 안에있는 것들 OR
- LIKE ’text‘ text와 같은 것
- LIKE’%text%’ %는 0개이상의 문자가 올 수 있다.
- LIKE’_구%’ _는 1개의 문자 %는 0개이상 문자
- 이외에도 + % [] [^] _
- ORDER BY
- 기본값 - 오름차순 ORDERBY ASC (생략가능),ORDER BY DESC - 내림차순
- ORDER BY PRICE, BOOKNAME PRICE순으로 정렬 후 같으면 BOOKNAME정렬
- 집계 함수
- SUM , MIN, MAX, AVG , COUNT(*) - 모든 튜플 개수 구하기.
- GROUP BY - 튜플을 동일 속성끼리 그룹화
- SELECT custid, COUNT(*) AS 도서수량, SUM(saleprice) AS 총액 FROM Orders GROUP BY custid; custid 로 그룹화 하려면 select문엔 무조건 있어야함. 집계함수가 없다면 group화 한 의미가 없다. SELECT문에는 GROUPBY 속성과 집계함수만 나올 수 있따.
- HAVING - GROPU BY 다음 (선택사항)
- 반드시 GROUP BY 절과 같이 작성해야하며, WHERE절 뒤에나와야하고, SELECT 검색 조건에는 집계함수 필요
두개 이상 테이블에서 SQL 질의
SELECT *
FROM Customer, Orders;
5 * 10 50개 TABLE나옴.
아무 조건없는 조인 = 카티전프로덕트
조인
SELECT *
FROM Customer, Orders
WHERE Customer.custid =Orders.custid;
공동조인과 결과가 같다.
SELECT Customer.name, Book.bookname
FROM Customer, Orders, Book
WHERE Customer.custid =Orders.custid
AND Orders.bookid =Book.bookid;
6
3개 TABLE 합칠때 틀
외부조인
SELECT Customer.name, saleprice
FROM Customer LEFT OUTER JOIN Orders
ON Customer.custid = Orders.custid
Customer가 left Orders가 right
ON 옵션은 조인 조건을 의미한다.
ON 옵션이 맞는 튜플 중에 Customer에 맞는것
부속질의
- SQL문 내에 또 다른 SQL 작성
SELECT bookname
FROM Book
WHERE price = ( SELECT MAX(price)
FROM Book);
- JOIN을 써서 추출해도 되고 지금처럼 부속질의로도가능
상관 부속질의 는 상위 부속질의의 투플을 이용하여 하위 부속질의를 계산함
→ 상위 부속질의와 하위 부속질의가 독립적이지 않고 서로 관련을 맺음
SELECT b1.bookname
FROM Book b1
WHERE b1.price > (SELECT avg(b2.price)
FROM Book b2
WHERE b2.publisher=b1.publisher);
b1 테이블의 투플 에 해당하는 출판사를 b2테이블로 가져가서 평균을 구하기때문
집합연산
- 합집합 UNION
SELECT name
FROM Customer
WHERE address LIKE '대한민국%'
UNION
SELECT name
FROM Customer
WHERE custid IN (SELECT custid FROM Orders);
- 차집합 MINUSㅡ
SELECT name
FROM Customer
WHERE address LIKE '대한민국%' AND
name NOT IN (SELECT name
FROM Customer
WHERE custid IN (SELECT custid FROM Orders))
- 교집합 INTERSECT
SELECT name
FROM Customer
WHERE address LIKE '대한민국%' AND
name IN (SELECT name
FROM Customer
WHERE custid IN (SELECT custid FROM Orders));
EXISTS
- 조건에 맞는 튜플이 존재하면 결과에 포함시킨다.
- 부속질의문의 어떤 행이 조건에 만족하면 참임
- 상위 TUPLE 이 하위 TUPLE에 존재하냐 .. 상관부속질의
SELECT name, address
FROM Customer cs
WHERE EXISTS (SELECT *
FROM Orders od
WHERE cs.custid =od.custid);
숭실대학교 Database 강의를 수강 후 정리하였습니다.
'Database' 카테고리의 다른 글
[Database] SQL DCL 데이터 조작어 (0) | 2023.02.04 |
---|---|
[Database] SQL DDL 데이터 정의어 (0) | 2023.02.04 |
[Database] 조인 연산 (0) | 2023.02.03 |
[Database] 관계 대수 (0) | 2023.02.03 |
[Database] 무결성 제약 조건 (0) | 2023.02.03 |