데이터베이스_9 sql_1
-고객 테이블에 존재하는 모든 속성을 검색
select 고객아이디, 고객이름, 나이 ,등급, 직업, 적립금 from 고객;
select * from 고객;
-제품 테이블에서 제조업체를 검색하되, all 키워드를 사용해보자.
select all 제조업체 from 제품;
all:중복 허용
-제품 테이블에서 제조업체 속성을 중복 없이 검색
select distint 제조업체 from 제품;
distinct : 중복 없이 검색
-제품 테이블에서 제품명과 단가를 검색하되, 단가를 가격이라는 새 이름으로 출력
select 제품명 , 단가 as 가격 from 제품;
[산술식을 이용한 검색]
-제품 테이블에서 제품명과 단가 속성을 검색하되, 단가에 500원을 더해 '조정 단가'라는 새이름으로 출력해보자
select 제품명, 단가 + 500 as '조정 단가' from 제품;
-제품 테이블에서 한빛제과가 제조한 제품의 제품명, 재고량, 단가를 검색해보자
select 제품명, 재고량, 단가 from 제품 where 제조업체='한빛제과';
-주문 테이블에서 apple고객이 15개 이상 주문한 주문제품, 수량, 주문일자를 검색
select 주문제품,수량,주문일자 from 주문 where 주문고객 ='apple' and 수량>=15;
[like를 이용한 검색]
-부분적으로 일치하는 데이터를 검색
-문자열을 이용하는 조건에만 like 키워드 사용 가능
% : 0개 이상의 문자(문자의 내용과 개수는 상관 없음)
_ : 1개의 문자(문자의 내용은 상관 없음)
like'data%' : 데이터로 시작하는 문자열(데이터로 시작하기만 하면 길이는 상관 없음)
like %데이터' : 데이터로 끝나는 문자열(데이터로 끝나기만 하면 길이는 상관 없음)
like '%data%' : 데이터가 포함된 문자열
like '데이터___' : 데이터로 시작하는 6자 길이의 문자열
like '__한%' : 세 번째 글자하 '한'인 문자열
-고객 테이블에서 성이 김 씨인 고객의 고객이름, 나이, 등급, 적립금을 검색
select 고객이름, 나이, 등급, 적립금 from 고객 where 고객이름 Like '김%';
-고객 테이블에서 고객아이디가 5자인 고객의 고객아이디, 고객이름, 등급을 검색
select 고객아이디, 고객이름, 등급 from 고객 where 고객아이디 like'_____';
[null을 이용한 검색]
- is.null 키워드를 이용해 특정 속성의 값이 널 값인지를 비교
-is not null 키워드를 통해 특정 속성의 값이 널 값이 아닌지를 비교
-검색 조건에서 널 값은 다른 값과 크기를 비교하면 결과가 모두 거짓이 된다.
-고객 테이블에서 나이가 아직 입려되지 않은 고객의 고객이름을 검색해보자
select 고객이름 from 고객 where 나이 is null;
-고객 테이블에서 나이가 이미 입려된 않은 고객의 고객이름을 검색해보자
select 고객이름 from 고객 where 나이 is not null;
[정렬 검색]
order by키워드를 이용해 결과 테이블 내용을 사용자가 원하는 순서로 출력
오름차순(기본) : asc / 내림차순 :desc
-널 값은 오름차순에서는 맨 마지막에 출력되고, 내림차순에서는 맨 먼저 출력됨
-고객 테이블에서 고객이름, 등급, 나이를 검색하되, 나이를 기준으로 내림차순 정렬하라
select 고객이름, 등급, 나이 from 고객 order by 나이 desc;
-주문 테이블에서 수량이 10개 이상인 주문의 주문고객, 주문제품, 수량, 주문일자를 검색해보자.
단, 주문제품을 기준으로 오름차순 정렬하고, 동일 제품은 수량을 기준으로 내림차순 정렬해라.
select 주문고, 주문제품, 수량, 주문일자 from 주문 where 수량 >=10 order by 주문제품 asc, 수량 desc;
[집계 함수를 이용한 검색]
-특정 속성 값을 통계적으로 계산한 결과를 검색하기 위해 집계 함수를 이용
-집계 함수 = 열 함수라고도 함
-개수, 합계 ,평균, 최댓값, 최솟값의 계산 기능 제공
-집계 함수는 널인 속성 값은 제외하고 계산함
-집계 함수는 where 절에서는 사용할 수 없고, select 절이나 having 절에서만 사용 가능
-제품 테이블에서 모든 제품의 단가 평균을 검색해보자
select avg(단가) from 제품;
-한빛제과에서 제조한 제품의 재고량 합계를 제품 테이블에서 검색
select sum(재고량) as '재고량 합계' from 제품 where 제조업체='한빛제과';
-고객 테이블에 고객이 몇 명 등록되어 있는지 검색
-> 고객아이디 속성을 이용해 계산하는 경우
select count(고객아이디) as 고객수 from 고객;
->나이 속성을 이용해 계산하는 경우
select count(나이) as 고객수 from 고객;
->*를 이용해 계산하는 경우
select count(*) as 고객수 from 고객;
-제품 테이블에서 제조업체의 수를 검색해보자
select count(distinct 제조업체) as '제조업체 수' from 제품;
[그룹별 검색]
-주문 테이블에서 주문제품별 수량의 합계를 검색해보자
select 주문제품, sum,(수량) as 총주문수량 from 주문 group by 주문제품;
-제품 테이블에서 제조업체별로 제조한 제품의 개수와 제품 중 가장 비싼 단가를 검색하되, 제품의 개수는 제품수라는 이름으로 출력하고 가장 비싼 단가는 최고가라는 이름으로 출력해보자
select 제조업체, count(*) as 제품수, max(단가) as 최고가 from 제품 group by 제조업체;
-제품 테이블에서 제품을 3개 이상 제조한 제조업체별로 제품의 개수와, 제품 중 가장 비싼 단가를 검색해보자.
select 제조업체 ,count(*) as 제품수 ,max(단가) as 최고가 from 제품 group by 제조업체 having count(*) >=3;
-고객 테이블에서 적립금 평균이 1000원 이상인 등급에 대해 등급별 고객수와 적립금 평균을 검색
select 등급, count(*) as 고객수, avg(적립금) as 평균적립금
from 고객
group by 등급 having avg(적립금)>=1000;
-집계 함수나 group by 절에 명시된 속성 외의 속성은 select 절에 작성 불가
??????
[여러 테이블에 대한 조인 검색]
조인 검색 : 여러 개의 테이블을 연결하여 데이터를 검색하는 것
조인 속성 : 조인 검색을 위해 테이블을 연결해주는 속성
-연결하려는 테이블 간에 조인 속성의 이름은 달라도 되지만 도메인은 같아야 함. 일반적으로 외래키를 조인 속성으로 이용함
..
.
-판매 데이터베이스에서 banana 고객이 주문한 제품의 이름을 검색
select 제품. 제품명
from 제품, 주문
where 주문. 주문고객= 'banana' and 제품. 제품번호 = 주문. 주문제품;
.
-판매 데이터베이스에서 나이가 30세 이상인 고객이 주문한 제품의 주문제품과 주문일자를 검색
select 주문, 주문.주문일자
from 고객, 주문
where 고객. 나이 >=30 and 고객.고객아이디 = 주문.주문고객;
-판매 데잍터베이스에서 고명석 고객이 주문한 제품의 제품명을 검색해보자
select 제품.제품명
from 고객, 제품, 주문
where 고객.고객이름='고명석' and 고객.고객아이디 = 주문.주문고객 and 제품.제품번호=주문.주문제품;
[부속 질의문을 이용한 검색]
-select문 안에 또 다른 select 문을 포함하는 질의
-상위 질의문(주 질의문) : 다른 select 문을 포함하는 select 문
-부속 질의문(서브 질의문) : 다른 select 문 안에 들어 있는 select 문
-> 괄호로 묶어서 작성, order by 절을 사용할 수 없음
->단일 행 부속 질의문 : 하나의 행을 결과로 반환
-> 다중 행 부속 질의문 : 하나 이상의 행을 결과로 반환
-부속 질의문을 먼저 수행하고 ,그 결과를 이용해 상위 질의문을 수행
-부속 질의문과 상의 질의문을 연결하는 연산자가 필요
->단일 행 부속 질의문은 비교 연산자 사용 가능
-> 다중 행 부속 질의문은 비교 연산자 사용 불가
예제 7-40
판매 데이터베이스에서 달콤비스킷을 생산한 제조업체가 만든 제품들으 ㅣ제품명과 단가를 검색해보자
select 제품명, 단가
from 제품
where 제조업체 = ( select 제조업체 from 제품 where 제품명='달콤비스킷');
---->
select 제품먕, 단가
from 제품
where 제조업체 = '한빛제과';
'달콤비스켓'의 제조업체는 '한빛제과'밖에 없기 때문에 단일 행 부속 질의문 (비교 연산자 = 를 이용)
-판매 데이터베이스에서 적립금이 가장 많은 고객의 고객이름과 적립금을 검색해보자
select 고객이름, 적립금
from 고객
where 적립금=(select max(적립금) from 고객);
------> select 고객이름 , 적립금
from 고객
where 적립금 = 5000;
최대 적립금은 단일 값이므로 단일 행 부속 질의문(비교 연산자 = 를 이용)
-판매 데이터베이스에서 banana 고객이 주문한 제품의 제품명과 제조업체를 검색
select 제품명, 제조업체 from 제품
where 제품번호 in (select 주문제품 from 주문 where 주문괙ㄱ = 'banana');
-----> select 제품명, 제조업체 from 제품 where 제품번호 in ('p01','p04','p06')
banana 고객이 주문한 제품은 여러 개이므로 다중 행 부속 질의문(in연산자를 이용)
--판매 데이터베이스에서 banana 고객이 주문하지 않은 제품의 제품명과 제조업체를 검색
select 제품명, 제조업체 from 제품 where 제품번호 not in (select 주문제 from 주문 where 주문고객 ='banana');
7-33 까지