본문 바로가기

DataBase(SQL)

(22)
DB 이론2 _ 정규화 1. DB anomaly ** 갱신 이상(Modification Anomaly): 반복된 데이터 중에 일부를 갱신 할 시 데이터의 불일치가 발생하는 상태 ** 삽입 이상(Insertion Anomaly): 불필요한 정보를 함께 저장하지 않고서는 어떤 정보를 저장하는 것이 불가능한 상태 ** 삭제 이상(Deletion Anomaly): 필요한 정보를 함께 삭제하지 않고서는 어떤 정보를 삭제하는 것이 불가능한 상태 ** Modification Anomaly: 만약에 A. Bruchs의 부서가 CIS에서 Marketing으로 바뀌었다고 가정해보자. 테이블의 4, 5번째 행의 CIS를 둘 다 바꾸지 않고 하나만 바꾼다면 A.Bruchs의 부서는 어느 부서에 속해있는지 알 수 없게 된다. ** Insertion ..
DB 이론 1. 정의 : 특정 조직의 여러 사용자가 공유하여 사용할 수 있도록 통합해서 저장한 운영 데이터의 집합 **공유 데이터: 특정 조직의 여러 사용자가 함께 소유하고 이용할 수 있는 공용 데이터 **통합 데이터: 최소의 중복과 통제 가능한 중복만 허용하는 데이터 **저장 데이터: 컴퓨터가 접근할 수 있는 매체에 저장된 데이터 **운영 데이터: 조직의 주요 기능을 수행하기 위해 지속적으로 꼭 필요한 데이터 2. 특징 **실시간 접근: 사용자의 데이터 요구에 실시간으로 응답 **계속 변화: 데이터의 계속적인 삽입, 삭제, 수정을 통해 현재의 정확한 데이터를 유지 **동시 공유: 서로 다른 데이터의 동시 사용뿐만 아니라 같은 데이터의 동시사용도지원 **내용 기반 참조: 데이터가 저장된 주소나 위치가 아닌 내용으로..
View CREATE VIEW mytable AS SELECT c.NAME , b.BOOKNAME , b.PUBLISHER , o.* FROM ORDERS o INNER JOIN CUSTOMER c ON c.CUSTID = o.CUSTID INNER JOIN BOOK b ON b.BOOKID = o.BOOKID ; SELECT * FROM qwer; --> 얘도 한번 생성되면 지우기전까지 유지되는구낭. SELECT * FROM mytable; 1. 가상 테이블: 뷰는 실제 데이터를 저장하지 않고, 쿼리 실행 시에만 데이터를 생성하여 보여주는 가상 테이블입니다. 데이터 추출과 필터링: 뷰를 사용하여 원하는 테이블에서 데이터를 추출하고, 필요한 열을 선택하거나 행을 필터링하여 특정 조건을 충족하는 데이터만 표시할 수..
DDL -- DDL(데이터 정의어) : Create, Drop, Alter --> 스키마를 정의한다. --> 데이터베이스 관리자 또는 데이터베이스 설계자의 역할에 해당! --> DDL 명령문은 데이터베이스 객체를 생성, 수정, 삭제하거나 데이터베이스의 구조를 정의하는 데 사용됨 1. CREATE: 데이터베이스 객체를 생성하는 데 사용됩니다. 예를 들어, 테이블, 뷰, 시퀀스, 인덱스 등을 생성할 때 CREATE 문을 사용합니다. 2. ALTER: 데이터베이스 객체를 수정하는 데 사용됩니다. 테이블에 새 열을 추가하거나 기존 열의 데이터 유형을 변경하는 등의 작업을 수행할 수 있습니다. 3. DROP: 데이터베이스 객체를 삭제하는 데 사용됩니다. 예를 들어, 테이블을 삭제하거나 인덱스를 삭제할 때 DROP 문을 ..
DML -- DML(CRUD) : Insert, Select, Update, Delete ** Sequence DROP SEQUENCE Student_seq; CREATE SEQUENCE Student_seq; --> 일반적으로 table과 함께 생성되며, table name과 같은 명을 가짐. --> 일련 번호를 생성하는 데 사용. --> 일련 번호는 주로 고유한 식별자를 생성하거나 데이터베이스 내에서 순차적으로 증가하는 값을 생성하는 데 유용. * 각 구문 요소의 역할 : sequence_name: 생성하려는 시퀀스의 이름을 지정합니다. START WITH : 시퀀스가 시작할 값입니다. 기본적으로 1로 설정됩니다. INCREMENT BY : 시퀀스의 증가값을 지정합니다. 기본적으로 1로 설정됩니다. MINV..
Where 연산자 ** WHERE 연산자 종류 : = ,(NOT)IN, ALL, ANY(SOME), EXISTS SELECT * FROM CUSTOMER c WHERE c.CUSTID IN (3,3,4) -- '이 중 한 개라도 같으면' => 'or' ; -- ANY : 연산자와 조합 SELECT * FROM CUSTOMER c WHERE c.CUSTID >= ANY (3,3,4) -- any앞에 연산자 필요. '이 중에서 하나라도 작거나 같으면' --> if custid is bigger then 3 or 3 or 4 WHERE c.CUSTID = ANY (3,3,4); -- 완벽하게 IN -- all SELECT * FROM CUSTOMER c WHERE c.CUSTID > all (3, 3, 4); -..
Sub Query3 -- 1. 인라인 뷰 (from 부속질의)-따로 for문 -- 괄호안을 테이블로 인식시킴 SELECT t1.*, c.* FROM ( SELECT o.CUSTID AS a, AVG(o.SALEPRICE) AS b FROM ORDERS o GROUP BY o.CUSTID ) t1 -- 별칭 INNER JOIN CUSTOMER c ON c.CUSTID = t1.a WHERE t1.b > 10000 -- for문 끝나고 이후에 필터링 ; -- 별칭을 잘 지어줘야함(필수). 이 상태로도 실행됨 SELECT o.CUSTID, AVG(o.SALEPRICE) AS avg FROM ORDERS o GROUP BY o.CUSTID --HAVING AVG(o.SALEPRICE) > 10000 ; -- ex1. 고객번호가 2..
NVL ☆ NVL : null값 반환. 은근히 쓰임 정확하게 알아두기 -- 고객 별 총 구매액 -- count 가능하지만 깨짐. null이 아니라 1로 출력됨. null때문에 sum도 불가능 -- NVL(SUM(saleprice),0) '안쪽에 null값이 있으면 0으로 변환하여 출력해라' SELECT c.NAME, NVL(SUM(saleprice),0) FROM CUSTOMER c LEFT OUTER JOIN ORDERS o ON c.CUSTID = o.CUSTID GROUP BY c.NAME; -- NULL : 문자가 아닌 키워드, 값 -- '='이 안됨 is로 표현 SELECT * FROM CUSTOMER WHERE PHONE = null; -- 출력안됨 SELECT * FROM CUSTOMER WHERE..