안잡아모찌 2018. 11. 15. 00:12

**DML(Data manipulation Language) : instance에 관련된 조작을 하는 언어.  app 개발자나 interactive users에 의해 이용된다.


  • insert : 한개 이상의 튜플을 릴레이션에 추가 (튜플 단위)
  • delete : 릴레이션에서 튜플을 삭제 (튜플 단위)
  • update : 한개이상의 튜플의 속성을 바꾸는 것 ( 튜플의 특정 속성 )



<Insert command>




Not null인 속성들을 몇 개의 속성만 추가할 때 사용



여러개의 튜플을 추가하려고 할때는 임시테이블을 만들어서 추가하기도 한다.

이때, 만약 원래의 테이블의 인스턴스가 바뀌면 임시테이블의 정보에는 반영이 되지 않는다.

반영을 하기위해서는 view를 만들어야한다.



<Delete command>


where절을 이용해 특정 조건의 튜플을 삭제할 수 있다.



**Drop table은 data가 있더라도 schema까지 지워짐


where절을 사용하지 않으면, 모든 튜플이 삭제된다.

스키마는 남아있고 모든 인스턴스가 지워진다.

:reject , cascade



본사에 속한 사원들.

tuple들의 조건. 검색결과 -> table (set of tuple)

where절안에 select,from,where --> instead of values


참조무결성조건은 지켜져야 하고, 한번에 하나의 튜플들만 삭제한다.



<Update command>


어떤 속성이 어떻게 바뀌는 지에 대한 명령어.



select 구절은 결과 테이블을 구성하는 조건들을 만족하는 구문이다.

SQL은 기본적으로 중복을 허용한다. 만약 중복검사를 하려면 실행시간이 매우 늘어나게 되므로 중복확인을 하지 않는다.

하지만, distinct 명령어를 사용하면 중복을 제거할 수 있다.


select : 결과 테이블을 구성하는 속성 리스트

from : 입력 테이블의 이름

where : 조건을 만족하는 tuple들중에서



where은 tuple들만 골라낸다.

속성이 Null인경우는 ISNULL로 비교해서 true/false를 반환해준다.



<쿼리>


프로젝트 번호와 같은 값을 갖는 부서번호인 부서 AND 매니저 번호와 동일한 번호를 갖는 사원 => 관계를 나타냄

애매한 속성의 이름인 경우 Employee.Name과 같이 표기할 수 있다.


Aliasing은 인풋 테이블에 관해서 별명을 지어주는 것이다. as는 생략가능하다.

반드시 사용해야 하는 경우는 , 두개의 테이블이 같은 이름(Recursive relationship)인 경우 반드시 alising해야한다.



 - 만약 where절을 쓰지 않으면 Cross product를 한다. (cartesian) --> 모든 가능한 조합을 나타낸다. (MxN개의 튜플이 생긴다)

 - asterisk(*)을 사용하면 모든 속성의 값을 선택한다.



SQL은 자동적으로 중복을 지우지 않는다. 중복을 없애기 위해서는 DISTINCT명령어를 사용해 주어야한다.



<Like comparison operator>


 - 문자 패턴 매칭을 위해 사용한다.

 - Lname = 'Smith'

 - Lname like 'S%' --> S뒤에 1개 이상의 문자가 있어야한다.

 - Lname = 'S____' -->언더바의 정확한 개수만큼의 문자가 있어야 한다.

 - +,-,*,% --> select절에 사용가능하다. update명령어의 set절. where에  attribute의 value를 이용할 때.


Between a AND B --> A<=x<=B





<쿼리의 Ordering>




<More Complex SQL retrieval queries>


1.Set Operations ( 기본적으로 중복을 제거한다. default )

 - 합집합, 여집합, 교집합

 - UNION ALL, EXCEPT ALL, INTERSECT ALL (all은 중복을 허용한다)


스미스가 관리하는 프로젝트 번호

스미스가 일하는 프로젝트 번호


2.Nested queries (중포)

 - Comparison operator IN ( check the membership )

 - 의미는 element small V in inter 쿼리 (set)

 - 아웃 쿼리 where절 안에 select(inner query)가 포함되어 있는지.  Inner 질의부터 해석해야 한다.


inner와 outer는 완벽히 독립이며 각각 한번씩만 실행한다.

where절의 만족조건 여부만 check한다.


alising * E.각각의 tuple들을 대표하는 value --> tuple valuable.

alising을 이용하는 경우!!

correlated nested query --> 각각의 아웃 쿼리의 각각의 튜플마다 인터 쿼리를 실행한다.




사원에서 사수들의 이름을 출력.

사원에서 말단직원들의 이름을 출력.

인터 쿼리들은 set을 이룬다.

공집합의 O/X를 따지는 명령어 EXISTS


EXISTS function : correlated nested query가 empty인지 아닌지 결과를 체크하는 함수.

UniQue(Q) function : 한개만 있는지 아닌지 확인하는 함수. 하나만 존재한다면 true를 반환한다.


Project 1,2,3에 참여하는 직원들이 이름. 상수집합으로 표현



<Join tables and outer joins>


 - 조인테이블은 사용자들이 from쿼리에서 특정 테이블들을 조인할 수 있도록 해준다.


사용자들에 의해 확장.

input table이 2개 에서 1개로 됨.

사원과 부서를 카디젼곱으로 한 후 ON조건을 만족하는 테이블.

From : 테이블 수 -1개의 join절이 존재해야함 아니면 카디젼 곱의 결과가 나오게 된다.



Inner join

 - 조인테이블에 있는 조이 타입의 디폴트

 - 만약 매칭 튜플이 다른 릴레이션에 존재할 때만 튜플은 결과에 포함된다.


Left outer join

 - 모든 왼쪽 테이블의 튜플은 모두 결과에 포함시킨다. 만약 매칭되지 않으면 널로 채운후 포함시킨다.


Right outer join

Full outer join



<Aggregate functions>

 - 여러개의 멀티플 튜플을 하나의 집단으로 만드는 것.

 - 그룹핑은 요약하기 전에 튜플의 서브그룹을 만든다.

 - 내부 함수들 COUNT, SUM, MAX, MIN , AVG



널값을 완전히 무시해준다.



*을 사용했을 때는 all attribute. null인 것도 포함해서 count해준다.

전체 테이블에 대한 결과테이블 1개만 나오게 된다.




사원들을 소속그룹별로 partition하고 수가 6개 이상인 부서들.



group by에 있는 grouping attribute는 반드시 select절에 포함되어 있어야 한다.!! (....당 ....)

from절에 2개 이상의 테이블이 있을 때, where절에 조건이 없다면 오류이다.


요구사항을 SQL의 검색질의로 작성할 수 있어야 한다.!