데이터베이스구조_0407

allzeroyou·2022년 4월 7일
0

데이터베이스

목록 보기
11/25

Preview

group by의 having절을 부가해 조건을 단다.
이때 비교연산자를 사용할 때는 피연산자의 개수가 같아야 함.

시험범위
4장-뷰까지(241p)
오늘 배울 인덱스는 범위 x

원래 물리적인 테이블은 실존, 가상의 릴레이션(뷰)을 따로 만든다.
왜?
계산의 편리성을 위해.

하나 이상의 테이블을 조인(JOIN)해 만든 테이블

  • 장점
    -- 1. 반복적으로 조인을 하지 않아도 됨.
    -- 2. A 테이블에는 민감정보(개인정보들)가 있을 때, SQL 계정별로 권한을 설정할 수 있음.(테이블 접근 권한) 다른 정보들을 이용하기 위해 민감정보를 제외한 데이터들을 가상의 테이블로 제공

자주 사용하는 정보들을 쿼리를 일일이 사용하지 않고 view를 설정해놓고 가상의 테이블을 만들어 사용하면 매우 편리하다.

materialized view
http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=698

뷰의 생성

기본 문법

CREATE VIEW 뷰이름[(열이름 [,...n)]
AS SELECT 문
-- 뷰 생성
CREATE VIEW Voders
AS SELECT orderid, O.custid, name, O.bookid, bookname, saleprice, orderdate
FROM customer C, orders O, Book B -- 실제 테이블으로부터 가상의 테이블을 만듦
WHERE C.custid=O.custid and B.bookid=O.bookid;

SELECT * FROM Voders; 

-- 주소에 '대한민국'을 포함하는 고객들로 구성된 뷰를 만들고 조회하시오. 뷰의 이름은 vw_Customer로 설정
CREATE VIEW vw_Customer
AS SELECT *
FROM Customer
WHERE address LIKE '%대한민국%';

SELECT * FROM vw_Customer;


customer의 다른 컬럼들은 숨기고, custid와 name만 보여줌

CREATE VIEW vw_Orders (orderid, custid, name, bookid, bookname, saleprice, orderdate)
AS SELECT od.orderid, od.custid, cs.name,
	od.bookid, bk. bookname, od.saleprice, od.orderdate
FROM orders od, customer cs, book bk
WHERE od.custid=cs.custid AND od.bookid = bk.bookid;

SELECT orderid, bookname, saleprice
FROM vw_Orders
WHERE name='김연아';

뷰의 수정

기본 문법

CREATE OR REPLACE VIEW 뷰 이름[(열이름 [,...n])]
AS SELECT 문

뷰의 삭제

기본 문법

DROP VIEW 뷰이름 [,...n]

중간고사 관련

뷰까지 시험범위인 이유를 곰곰히 생각해보기.

필요한 정보들을 뷰로 만들어놓고 사용.
따라서 뷰의 생성, 대체를 꼭 알고있어야.

인덱스

데이터베이스의 물리적 저장

테이블의 정보는 실제로 보조기억장치에 저장됨(하드디스크, SSD, USB)

이미지(rgb 데이터들, 메타정보(어떤 사진기, 언제, 해상도, 압축 코덱?)
실제 데이터(데이터파일), 어떻게 생겼는지 말해주는 폼파일.

인덱스와 b-tree

일반적으로 pk가 인덱스임.
유일한 값(pk)

목적은 빠른 검색을 위함.

문자 -> 숫자로 변환해서 인덱스 설정 가능

  • 인덱스의 조건:
  1. WHERE 절에서 자주 사용되는 속성
  2. 조인에 자주 사용되는 속성
    ex. BOOK에서 축구가 들어간걸 찾아줘! 라는 걸 자주 사용한다면, bookname을 인덱스로 걸어줌.
    그러면 mysql에서 bookname으로 트리를 만들어서 찾아갈 것.
  3. 속성이 가공되는 경우 사용하지 않음
    데이터가 자주 변경되면, 트리를 계속 새로 만들어야 하는 단점이 있어 빈번한 변경이 있다면 인덱스를 안 걸어주는 것이 이득이다.
  4. 속성의 선택도가 낮을 때 유리(속성의 모든 값이 다른 경우)

    선택도란?

pk => sorting이 되어 있어 찾기 쉽다.

클러스터 인덱스

정렬되어있는 상태(전제조건)

4개의 클러스터로 나눈후 해당 클러스터의 시작하는 키를 key로 만들어 표로 빼둠

중간고사
1. 쿼리짜는 것
2. 개념 묻는 것: 무결성 같은거

전체코드

-- 0407
-- 뷰 생성
CREATE VIEW Voders
AS SELECT orderid, O.custid, name, O.bookid, bookname, saleprice, orderdate
FROM customer C, orders O, Book B -- 실제 테이블으로부터 가상의 테이블을 만듦
WHERE C.custid=O.custid and B.bookid=O.bookid;

SELECT * FROM Voders; 

CREATE VIEW vw_Customer
AS SELECT *
FROM Customer
WHERE address LIKE '%대한민국%';

SELECT * FROM vw_Customer;

CREATE VIEW vw_customer_2(custid, name)
as select custid, name from customer;

select * from vw_customer_2;

CREATE VIEW vw_Orders (orderid, custid, name, bookid, bookname, saleprice, orderdate)
AS SELECT od.orderid, od.custid, cs.name,
	od.bookid, bk. bookname, od.saleprice, od.orderdate
FROM orders od, customer cs, book bk
WHERE od.custid=cs.custid AND od.bookid = bk.bookid;

SELECT orderid, bookname, saleprice
FROM vw_Orders
WHERE name='김연아';

-- 4-24 Book 테이블의 bookname 열을 대상으로 비 클러스터 인덱스 ix_Book 생성하라
CREATE INDEX ix_Book ON Book(bookname);

-- 4-25 Book 테이블의 publisher, price 열을 대상으로 인덱스 ix_Book2를 생성하시오.
CREATE INDEX ix_Book2 ON Book(publisher, price);
profile
모든 건 zero 부터, 차근차근 헛둘헛둘

0개의 댓글