- sql 데이터 조작어는 데이터의 검색,삽입,수정,삭제에 이용된다.
- select 키워드와 함께 검색하고 싶은 속성의 이름을, from 키워드와 함께 검색하고 싶은 속성이 있는 테이블의 이름을 나열한다.
- all 옵션은 디폴트로 결과 테이블이 투플의 중복을 허용하도록 지정하며, distinct는 결과 테이블이 투플의 중복을 허용하지 않는다(위 자료 잘못됨)
- 위처럼 특정 속성을 검색하는 select 문을 사용할 수 있다
- 테이블에 존재하는 모든 속성을 검색하려면 굳이 모든 속성을 나열하지 않아도 * 을 사용하여 검색할 수 있다.
- 위처럼 테이블에서 제조업체를 검색할 경우 결과 테이블에서 중복된 제조업체가 나타난다.(all의 경우)
- 만약 중복을 피하려면 distinct를 사용하면 된다.
- as 키워드를 활용해 결과 테이블에서 속성의 이름을 바꾸어 출력 가능하다.
- select 키워드와 함께 산술식을 이용해 검색할 수 있다. 실제 값이 바뀌는 것이 아닌 결과 테이블에서만 계산된 값이 출력된다.
- as를 통해 조정단가라는 새 이름으로 출력하고, 산술식을 이용해 단가에 500을 더한 값을 출력할 수 있다.
- where을 통해 조건 검색을 사용할 수 있다. 비교연산자와 논리 연산자를 이용한 검색 조건을 제시한다.
- 조건에서 문자나 날짜 값은 작은따옴표로 묶어 표현한다.
- 비교 연산자 중 "다르다"(<>)는 기존 아는 연산자와 다르므로 유의하자.
- 제품 테이블에서 제조업체가 한빛제과인 제품의 속성을 검색한다. where을 이용해 비교 연산자로 검색한다.
- 역시 where을 통해 논리 연산자를 활용하여 검색할 수 있다.
- like 키워드를 이용해 부분적으로 일치하는 데이터를 검색 가능하다.
- 문자열을 이용하는 조건에만 사용할 수 있음을 유의하자.
- *는 길이에 무관한 문자, ?은 한 개의 문자를 나타낸다.
- like '데이터'라 하면 데이터로 시작하는, '데이터'는 데이터로 끝나는, '데이터'는 데이터가 포함된 문자열을 검색한다.
- like '데이터???'면 데이터로 시작하는 6개 길이의 문자열, like '??한*'면 세 번째 글자가 '한'인 문자열을 검색한다.
- 성이 김씨인 고객의 속성을 검색하려면 where 고객이름 like '김*'을 사용한다.
- 고객아이디가 5자인 고객의 속성을 검색하려면 where 고객아이디 like '?????'를 사용한다.
- is null, is not null 을 이용해 특정 속성의 값이 널 값인지를 비교할 수 있다.
- 나이가 입력되지 않은 고객을 검색하려면 where 나이 is null 을 사용한다.
- 나이가 이미 입력된 고객은 where 나이 is not null을 사용한다.
- order by를 통해 데이터를 정렬할 수 있다
- asc(디폴트)는 오름차순, desc는 내림차순으로 정렬한다.
- 나이를 기준으로 내림차순 정렬하려면 order by 나이 desc를 사용한다.
- 먼저 주문제품을 기준으로 오름차순으로, 동일 제품은 수량 기준으로 내림차순으로 정렬을 두 번 한다.
- order by 주문제춤 asc, 수량 desc로 정렬한다.
- 집계 함수를 이용해 검색할 수도 있다.
- 특정 속성 값을 통계적으로 계산한 결과를 검색하기 위해 이용한다.
- 집계함수는 널인 속성 값은 제외하고 계산한다.
- 집계함수는 where 절에서는 사용할 수 없고, select절이나 having절에서만 사용 가능하다.
- 집계 함수는 다음과 같으며, sum,avg는 숫자 데이터만 사용 가능하고, 나머지는 모든 데이터에서 사용 가능하다.
- 모든 제품의 단가 평균 검색이므로 where절 없이 select 절에서 avg(단가)를 사용한다.
- count 함수는 널 값을 제외하고 계산하므로 나이를 count 했을 때 6이라는 수가 나온다.
- 정확한 개수 계산을 위해 기본키 속성이나 *을 주로 이용한다.
- distinct 키워들르 이용해 중복을 없애고 서로 다른 제조업체의 개수만 계산한다.
- group by 속성을 활용해 특정 속성값이 같은 투플을 모아 그룹을 만들고 having을 활용해 그룹에 대한 조건을 작성한다.
- 주문제품별 수량의 합계를 검색하므로 group by 주문제품으로 주문제품별 그룹을 만든다
- 제조업체별로 제조한 제품이므로 group by 제조업체로 묶는다.
- 제품을 3개 이상 제조한 제조업체이므로 group by 제조업체로 묶고 having을 활용해 3개 이상 제조한 업체를 찾는다. 집계함수 조건은 where절에서는 불가능하며 having 절에서 작성한다.
- 역시 group by 등급으로 묶고 having을 이용해 적립금 평균 조건을 걸 수 있다.
- 집계 함수나 group by 절에 명시된 속성이 아닌 속성은 select 절에 사용할 수 없다.
- 조인 검색은 여러개의 테이블을 연결하여 데이터를 검색하는 것이다. 조인 속성이 조인 검색을 위해 테이블을 연결해주는 속성이다. 일반적으로 외래키가 조인속성으로 이용된다.
- where 주문.주문고객='banana' and 주문.주문제품=제품.제품번호로 조인한다.
- 역시 where을 활용해 조인 속성으로 연결한다.
- inner join..on 문법을 활용해 여러 테이블에 대한 조인 검색을 수행한다.
- 부속 질의문은 select문 안에 또 다른 select문을 포함하는 정의다.
- 단일 행 부속 질의문은 하나의 행을, 다중 행 부속 질의문은 하나 이상의 행을 결과로 반환한다.
- 부속질의문을 먼저 수행하고 그 결과로 상위 질의문을 수행한다.
- 단일 행 부속 질의문은 비교연산자를 사용 가능하지만, 다중 행 부속 질의문은 사용 불가하다.
- 다중 행 부속 질의문에 사용 가능한 연산자는 다음과 같다. 부속 질의문의 결과값과 비교한 값을 반환한다. all 이나 any 또는 some은 비교 연산자와 함께 사용한다.
- 달콤비스켓을 제조한 제조업체를 알아야 한다. 제조업체는 하나인 단일 행 부속 질의문으로 where 제조업체=(select 제조업체 from 판매 where 제품명="달콤비스킷")을 사용한다. 따라서 제조업체="한빛제과" 가 되어 상위 쿼리문을 실행한다.
- 적림금이 가장 많은 고객을 검색하야 하므로, where 적립금 = (select max(적립금) from 고객)으로 사용한다.
- banana 고객이 주문한 제품은 총 3가지이다(다중행 부속 질의문). 따라서 in 연산자를 이용해 주 질의문과 다중행 부속 질의문을 연결한다.
- 주문하지 않은 제품은 not in 연산자를 사용한다.
- 모든 경우의 수보다 제품 가격이 커야 하므로 all을 사용한다.
- insert 문을 활용해 데이터를 직접 삽입할 수 있다.
- into 키워드와 함께 투플을 삽입할 테이블의 이름과 속성의 이름을 나열한다.
- values 키워드와 함께 삽입할 속성 값들을 나열한다.
- into절과 value 절의 속성 값은 순서대로 일대일 대응되어야 한다.
- insert into와 values를 이용해 내용을 삽입하고 select를 이용해 삽입한 내용을 확인한다.
- 테이블의 모든 속성에 데이터를 삽입할 때는 테이블 이름만 적어주어도 된다.
- 역시 into의 속성과 values가 일대일 대응되게 데이터를 삽입하는데, 직업 속성을 입력하지 않았으므로 직업은 null 값으로 추가되어 데이터가 삽입된다.
- into 키워드에 테이블 이름만 명시하고 null 값이 포함된 데이터를 삽입할 때는 해당 속성의 위치에 null 값을 넣어준다.
- insert 문 역시 부속 질의문을 활용해 select문으로 도출된 값을 이용해 데이터를 삽입 가능하다. select로 도출된 값이 into와 일대일 대응되어야 한다.
- 특정 속성의 값을 수정할 때는 update문을 사용한다.
- set 키워드 다음에 속성 값을 어떻게 수정할 것인지 지정한다.
- where절에 제시된 조건을 만족하는 투플에 대해서만 속성 값을 수정하며, where절이 없으면 테이블의 모든 투플을 대상으로 수정을 한다.
- update~set~where을 이용해 속성값을 수정한다.
- set을 이용해 단가에 1.1을 곱해 속성값을 수정한다.
- where절의 조건에 일치하는 제품의 수량을 set을 통해 5로 수정한다.
- delete 문을 사용하면 테이블에 저장된 데이터를 삭제한다. where절에 제시하는 조건을 만족하는 투플을 삭제한다. where절이 없으면 모든 테이블의 데이터가 삭제된다. 그러나 테이블 자체는 삭제되지 않는다.
- where절을 두지 않아 모든 투플이 삭제되고 빈 테이블이 된다. 그러나 테이블 자체는 남아있으므로 테이블 자체르 지우는 drop table과는 다르다.
- 부속 질의문을 이용한 delete 문이다. select문을 이용해 고객이름과 일치하는 고객아이디를 도출하고, 그 아이디가 있는 주문고객 투플을 지운다.