Database

[Database] SQL DML 데이터 조작어

Ocean_ 2023. 2. 3. 13:42

[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 강의를 수강 후 정리하였습니다.