본문 바로가기

SQL

231129 Oracle

기존 학습 내용 복습

데이터 모델링

현재 사용하고 있는 것들을 DBMS에 맞게 옮겨오는 것

 

데이터 모델링의 3단계

개념적 데이터 모델링, 논리적 데이터 모델링, 물리적 데이터 모델링

 

데이터 모델링 도형의 의미

사각형 : 개체 (Entity)

마름모 : 행동, 관계 (Relationship)

원형 : 속성 (Attribute)

 

개체 (Entity) 란?

현실 세계의 다양한 요소들을 의미

저장할 만한 가치가 있으며 조직을 운영하는데 꼭 필요한 구별되는 모든 것

다른 개체와 구별되는 이름을 가지고 있고, 개체만의 고유한 특성이나 상태 (속성) 를 가지고 있음

 

속성 (Attribute) 이란?

개체를 구성하는 필수 요소

사람의 속성에는 이름, 생년월일, 주민등록번호 등 개인을 나타낼 수 있는 필수적인 속성이 있음

 

다중 값 속성

값을 여러 개 가질 수 있는 속성

ex) 회사의 부서에는 소속된 여러 명의 사원 값을 가질 수 있음

  - 책 개체의 저자 (공동 저자)

 

복합 속성

속성에서 더 의미를 나눌 수 있는 것

ex) 사람의 생년월일에서 날짜를 년, 월, 일로 나눌 수 있음

  - 건물의 주소에서 시, 군, 구 등으로 나눌 수 있음

 

유도 속성

기존의 다른 속성에서 값이 유도되는 것

ex) 상품의 할인 가격은 정상 가격과 할인율이 합쳐져 할인 가격이라는 속성으로 변환

 

기본키 (Primary key) : 해당 개체를 식별하는데 사용하는 값, 유일한 값이면서 NULL 이 허용되지 않음

외래키 (Foreign key) : 관계를 맺은 다른 테이블의 기본키를 참조하여 사용하는 값, NULL 을 허용할 수 있음

 

차수 (Degree)

데이터모델링과 DBMS에서 열(column)과 같은 의미로 사용, 속성의 개수

 

카디널리티 (Cardinality)

데이터모델링과 DBMS에서 행(tuple)과 같은 의미로 사용, 개체의 개수

 

매핑 카디널리티

관계를 맺는 두 개체 집합에서, 각 개체 인스턴스가 연관성을 맺고 있는 상대 개체 집합의 인스턴스 개수

 

일대일 ( 1 : 1 )

상대 개체인스턴스와 나의 개체인스턴스가 한번에 하나씩 관계를 맺는 것

ex) 남여의 결혼 - 남여가 서로 하나의 관계만을 맺을 수 있음

 

일대다 ( 1 : n )

상대 개체인스턴스 여러개와 나의 개체인스턴스 하나가 관계를 맺는 것

ex) 회사 부서와 부서에 소속된 직원 - 부서 개체는 여러 직원 개체와 관계를 맺을 수 있음

 

다대다 ( n : m )

상대 개체인스턴스 하나와 나의 개체인스턴스 여러개, 상대 개체인스턴스 여러개와 나의 개체인스턴스 하나가 관계를 맺는 것

ex) 학생과 수강 강의의 관계 - 학생 하나는 여러 강의를 수강할 수 있고, 한 강의는 여러 학생을 가질 수 있음

 

스키마 (Schema)

데이터베이스의 논리적 구조를 스키마라고 부름

 

무결성 제약조건

데이터의 무결성을 보장하고 일관된 상태로 유지하기 위한 규칙

무결성 : 데이터를 결함이 없는 상태, 즉 정확하고 유효하게 유지하는 것

 

무결성의 종류

개체 무결성

각 행마다 유일한 값을 유지하며 NULL 값을 가질 수 없다 = 기본 키

 

참조 무결성

참조를 하기 위해 참조하려는 키가 존재해야 함, 참조할 수 없는 값을 가질 수 없는 규칙 = 외래 키

 

도메인 무결성

column에 데이터 타입에 맞는 데이터가 들어가야 함

 

Oracle 명령어 복습

 

책 출판사의 목록 확인하기, 중복 제거

SELECT DISTINCT(PUBLISHER)
FROM BOOK;

 

출판사의 출간된 책 갯수 확인하기

SELECT PUBLISHER, COUNT(*)
FROM BOOK
GROUP BY PUBLISHER;

 

'축구'가 포함된 책 제목과 출판사 출력

SELECT BOOKNAME, PUBLISHER
FROM BOOK
WHERE BOOKNAME LIKE '%축구%';

 

박지성이 구매한 책의 권 수 구하기

SELECT C.NAME, COUNT(*)
FROM CUSTOMER C JOIN ORDERS O USING (CUSTID)
WHERE C.NAME = '박지성'
GROUP BY C.NAME;

 

박지성이 구매한 책의 가격 합계 구하기

SELECT C.NAME, SUM(O.SALEPRICE)
FROM CUSTOMER C JOIN ORDERS O USING (CUSTID)
WHERE C.NAME = '박지성'
GROUP BY C.NAME;

 

박지성이 구매한 책의 이름과 출판사 출력하기

SELECT B.BOOKNAME, B.PUBLISHER
FROM CUSTOMER C JOIN ORDERS O USING (CUSTID)
                JOIN BOOK B USING (BOOKID)
WHERE C.NAME = '박지성';

 

14/07/04 ~ 14/07/07 사이에 주문한 BOOKID 구하기

SELECT BOOKID, ORDERDATE
FROM ORDERS
WHERE ORDERDATE BETWEEN TO_DATE('14/07/04') AND TO_DATE('14/07/07');

 

14/07/04 ~ 14/07/07 사이에 주문한 책 이름 구하기

SELECT B.BOOKNAME, O.ORDERDATE
FROM BOOK B JOIN ORDERS O USING (BOOKID)
WHERE ORDERDATE BETWEEN TO_DATE('14/07/04') AND TO_DATE('14/07/07');

'SQL' 카테고리의 다른 글

240429 MongoDB 해보기  (0) 2024.04.29
240202 리눅스 서버 만들어보기  (0) 2024.02.02
231128 Oracle  (0) 2023.11.28
231127 Oracle  (0) 2023.11.27
국비지원학원 3, 4일 차 정리 / ORACLE  (0) 2023.11.26