Day57일때 휴가 냈음. 하루 수업 못들음..!
SQL : 구조화된 질의 언어. 오라클에 사용됨.
-->
일괄처리 INSERT, UPDATE,DELETE에서만 사용.
-->
단위 : Row 단위 (가로줄)
DML만 COMMIT/ROLLBACK가능. 나머지 안됨.
--> [ CRUD ]
단위 : column (세로줄)
-->
트랜잭션이란? P291
: 더 이상 분할할 수 없는 최소 수행 단위
세션이란? P298
:데이터베이스 접속 시작부터 접속이 종료되기까지의 전체 기간
읽기 일관성의 중요란? P299
: 현재 트랜잭션이 종료될 때까지 다른 세션에서는 데이터 조작 전 상태의 데이터만 조회할 수 있는 특성
DDL
데이터 사전이란? P327
: 데이터베이스 메모리.성능.사용자.권한.객체 등 오라클 데이터베이스 운영에 중요한 데이터가 보관되어있다.
인덱스란? P334
: 테이블 열에 사용하는 객체
뷰란? P338
: 가상의 테이블, 하나 이상의 테이블을 조회하는 SELECT문을 저장한 객체를 뜻합니다.
스퀀스란? P348
: 오라클 데이터베이스에서 특정 규칙에 맞는 연속 숫자를 생서어하는 객체입니다.
동의어란? P354
: 테이블, 뷰, 시퀀스 등 객체 이름 대신 사용할 수 있는 다른 이름을 부여하는 객체입니다.
: 제약 조건이란 데이터의 무결성을 지키기 위해 제한된 조건을 의미한다, 테이블의 특정 열을 지정한다.
쉽게 말해 테이블이나 속성에 부적절한 데이터가 들어오는 것을 사전에 차단하도록 정해 놓은 것이라 생각하면 된다.
영역 무결성 : 열에 지정되는 값의 적정 여부확인. 자료형, 적절한 형식의 데이터, NULL여부 같은 정해 놓은 범위를 만족하는 데이터임을 규정.
개체 무결성 : 테이블 데이터를 유일하게 식별할 수 있는 기본키는 반드시 값을 가지고 있어야 하며 NULL이 될 수 없고 중복될 수도 없음을 규정.
참조 무결성 : 참조 테이블의 외래키 값은 참조 테이블의 기본키로서 존재해야 하며 NULL이 가능.
:제약조건을 조회하는 방법에는 여러가지가 존재하는데, 다 알 필요는 없지만 보통 다음과 같다.
제약조건을 삭제하기 위해서는 제약조건명이 필요한데, 나중에 보면 알겠지만 컬럼 옆에 써주는 것보다 따로 추가해주는 방식을 선호한다. PK(기본키)나 FK(외래 키) 같은 경우에는 말이다.
ALTER TABLE [테이블명] DROP CONSTRAINT [제약조건명]
어떤 테이블이든 거의 무조건 하나는 들어간다 생각되는 기본키이다.
CREATE TABLE TABLE_PK(
LOGIN_ID VARCHAR2(20) PRIMARY KEY,
LOGIN_PWD VARCHAR2(20) NOT NULL,
TEL VARCHAR2(20)
);
DESC TABLE_PK;
:외래키 역시 PK와 마찬가지로 매우 중요한 제약조건이다.
참조되는 부모 테이블 행에 대한 DELETE를 허용한다.
즉, 참조되는 부모 테이블 값이 삭제되면 연쇄적으로 자식 테이블 값 역시 삭제된다는 의미이다.
참조되는 부모 테이블 행에 대한 DELETE를 허용한다.
이건 CASCADE와는 다른데, 부모 테이블의 값이 삭제되면 해당 참조하는 자식 테이블의 값들이 NULL로 설정되는 옵션이다.
일반적으로 ON DELETE CASCADE 옵션을 많이 사용한다.
해당 옵션을 사용하지 않으면 엮여있는 모든 자식 테이블의 값을 먼저 다 지워줘야 하기 때문이다.
사용자(USER): 데이터베이스에 접속하여 데이터를 관리하는 계정
스키마(SCHEMA): 데이터베이스의 접속한 사용자와 연결된 객체
※ 사용자와 스키마를 연동하여 사용하기도 함.
계정,사용자이름, 스키마, 계정, 케이블, 인덱스
(1)SYSTEM에서
CREATE USER MADANG
IDENTIFIED BY MADANG;
GRANT CONNECT, RESOURCE TO MADANG;
(2)MADANG에서
CREATE TABLE BOOKS(
BNAME VARCHAR2(40),
PUB VARCHAR2(40)
);
SQL>@demo_madang.sql; , 선생님이 주신 파일.
-- 처음 실행시는 아래 4문장의 오류는 무시한다. DROP TABLE Orders ; DROP TABLE Book ; DROP TABLE Customer ; DROP TABLE Imported_Book ; CREATE TABLE Book ( bookid NUMBER(2) PRIMARY KEY, bookname VARCHAR2(40), publisher VARCHAR2(40), price NUMBER(8) ); CREATE TABLE Customer ( custid NUMBER(2) PRIMARY KEY, name VARCHAR2(40), address VARCHAR2(50), phone VARCHAR2(20) ); CREATE TABLE Orders ( orderid NUMBER(2) PRIMARY KEY, custid NUMBER(2) REFERENCES Customer(custid), bookid NUMBER(2) REFERENCES Book(bookid), saleprice NUMBER(8) , orderdate DATE ); -- Book, Customer, Orders 데이터 생성 INSERT INTO Book VALUES(1, '축구의 역사', '굿스포츠', 7000); INSERT INTO Book VALUES(2, '축구아는 여자', '나무수', 13000); INSERT INTO Book VALUES(3, '축구의 이해', '대한미디어', 22000); INSERT INTO Book VALUES(4, '골프 바이블', '대한미디어', 35000); INSERT INTO Book VALUES(5, '피겨 교본', '굿스포츠', 8000); INSERT INTO Book VALUES(6, '역도 단계별기술', '굿스포츠', 6000); INSERT INTO Book VALUES(7, '야구의 추억', '이상미디어', 20000); INSERT INTO Book VALUES(8, '야구를 부탁해', '이상미디어', 13000); INSERT INTO Book VALUES(9, '올림픽 이야기', '삼성당', 7500); INSERT INTO Book VALUES(10, 'Olympic Champions', 'Pearson', 13000); INSERT INTO Customer VALUES (1, '박지성', '영국 맨체스타', '000-5000-0001'); INSERT INTO Customer VALUES (2, '김연아', '대한민국 서울', '000-6000-0001'); > INSERT INTO Customer VALUES (3, '장미란', '대한민국 강원도', '000-7000-0001'); INSERT INTO Customer VALUES (4, '추신수', '미국 클리블랜드', '000-8000-0001'); INSERT INTO Customer VALUES (5, '박세리', '대한민국 대전', NULL); -- 주문(Orders) 테이블의 책값은 할인 판매를 가정함 INSERT INTO Orders VALUES (1, 1, 1, 6000, TO_DATE('2014-07-01','yyyy-mm-dd')); INSERT INTO Orders VALUES (2, 1, 3, 21000, TO_DATE('2014-07-03','yyyy-mm-dd')); INSERT INTO Orders VALUES (3, 2, 5, 8000, TO_DATE('2014-07-03','yyyy-mm-dd')); INSERT INTO Orders VALUES (4, 3, 6, 6000, TO_DATE('2014-07-04','yyyy-mm-dd')); INSERT INTO Orders VALUES (5, 4, 7, 20000, TO_DATE('2014-07-05','yyyy-mm-dd')); INSERT INTO Orders VALUES (6, 1, 2, 12000, TO_DATE('2014-07-07','yyyy-mm-dd')); INSERT INTO Orders VALUES (7, 4, 8, 13000, TO_DATE( '2014-07-07','yyyy-mm-dd')); INSERT INTO Orders VALUES (8, 3, 10, 12000, TO_DATE('2014-07-08','yyyy-mm-dd')); INSERT INTO Orders VALUES (9, 2, 10, 7000, TO_DATE('2014-07-09','yyyy-mm-dd')); INSERT INTO Orders VALUES (10, 3, 8, 13000, TO_DATE('2014-07-10','yyyy-mm-dd')); -- 여기는 3장에서 사용되는 Imported_book 테이블 CREATE TABLE Imported_Book ( bookid NUMBER , bookname VARCHAR(40), publisher VARCHAR(40), price NUMBER(8) ); INSERT INTO Imported_Book VALUES(21, 'Zen Golf', 'Pearson', 12000); INSERT INTO Imported_Book VALUES(22, 'Soccer Skills', 'Human Kinetics', 15000); COMMIT;
SELECT BOOKNAME
FROM BOOK
WHERE BOOKID = 1;
SELECT * FROM BOOK
WHERE PRICE>=20000;
SELECT SUM(SALEPRICE)
FROM CUSTOMER C JOIN ORDERS O USING (CUSTID)
WHERE CUSTID = 1;
SELECT SUM(O.SALEPRICE)
FROM ORDERS O, CUSTOMER C
WHERE O.CUSTID = C.CUSTID AND C.NAME = '박지성';
SELECT*FROM CUSTOMER;
SELECT*FROM ORDERS;
SELECT *FROM BOOK;
SELECT SUM(SALEPRICE)
FROM ORDERS
WHERE CUSTID =1;
SELECT CUSTID
FROM CUSTOMER
WHERE NAME ='박지성';
SELECT COUNT(*)
FROM ORDERS O, CUSTOMER C
WHERE O.CUSTID = C.CUSTID
AND C.NAME = '박지성';
-- (1)번 방법
SELECT COUNT(PUBLISHER)
FROM BOOK B, ORDERS O
WHERE B.BOOKID = O.BOOKID
AND O.CUSTID = (SELECT CUSTID
FROM CUSTOMER
WHERE NAME = '박지성');
-- (2)번 방법
SELECT COUNT(*) AS CNT
FROM CUSTOMER C ,ORDERS O
WHERE C.CUSTID=O.CUSTID
AND C.NAME LIKE'%박지성%'
GROUP BY C.NAME;
--(3)번 방법
SELECT COUNT(DISTINCT PUBLISHER)
FROM BOOK B, ORDERS O, CUSTOMER C
WHERE B.BOOKID = O.BOOKID
AND O.CUSTID = C.CUSTID
AND C.NAME= '박지성';
-- (4)번 방법
SELECT UNIQUE PUBLISHER
FROM CUSTOMER JOIN ORDERS USING (CUSTID)
JOIN BOOK USING (BOOKID)
WHERE NAME = '박지성';
SELECT COUNT(BOOKID)FROM BOOK;
SELECT COUNT(DISTINCT PUBLISHER) FROM BOOK;
SELECT NAME, ADDRESS
FROM CUSTOMER;
--(1)번 방법
SELECT ORDERID
FROM ORDERS
WHERE ORDERDATE BETWEEN '2014/07/04' AND '2014/07/07';
--(2)번 방법
SELECT ORDERID, ORDERDATE
FROM ORDERS
WHERE ORDERDATE BETWEEN TO_DATE('2014/07/04') AND TO_DATE('2014/07/07');
--(3)번 방법
SELECT ORDERID
FROM ORDERS
WHERE ORDERDATE BETWEEN TO_DATE('2014-07-04', 'YYYY-MM-DD')
AND TO_DATE('2014-07-07', 'YYYY-MM-DD');
SELECT NAME,ADDRESS
FROM CUSTOMER
WHERE NAME LIKE ('김%');
개념적 데이터 모델링(conceptual modeling)
: 현실 세계의 중요 데이터를 추출하여 개념 세계로 옮기는 작업, 데이터베이스 설계의 핵심 과정
논리적 데이터 모델링(logical modeling)
: 개념 세계의 데이터를 데이터베이스에 저장하는 구조로 표현하는 작업
출처:
https://webstudynote.tistory.com/46
https://syj-computer.tistory.com/31