[Day 17] 국비 0419 - 내용 정리
🌞서점 관리를 위하여 필요한 테이블 만들기
- 도서 테이블(도서번호, 도서이름, 출판사, 가격)
- 고객 테이블(고객번호, 고객이름, 주소, 전화)
- 주문 테이블(주문번호, 고객번호, 도서번호, 구매가격, 구매일)
🌈도서 테이블
create table book (
bookid number primary key,
bookname varchar2(50),
publicsher varchar2(50),
price number
);
🌈고객 테이블
create table customer (
custid number primary key,
name varchar2(50),
address varchar2(50),
phone varchar2(50)
);
🌈주문 테이블
create table orders (
orderid number primary key,
custid number references customer(custid),
bookid number references book(bookid),
saleprice number,
orderdate date
);
🌞references
custid number references customer(custid);
- customer 테이블에 있는 custid를 참조해야 한다. (그냥 하면 새로운 아이디가 만들어지기 때문에 반드시 그 테이블에 있는 아이디를 참조해야 한다는 뜻)
🌞desc
desc book;
- book 테이블의 칼럼을 확인하는 명령어
🌞자료 추가하기
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 Chapions', 'Pearson', 13000);
- book 테이블에 자료를 추가해주었다.
🌞커밋
- 데이터를 추가하고 그것을 데이터베이스에 반영하기 위하여 commit 한다.
🌞테이블 지우기
drop table 테이블명;
- 참조하는 키가 있으면 자식테이블을 먼저 지워준다.
🌞like 연산자
- 문자열의 패턴을 검색하고자 할 때에 사용하는 연산자
% 아무글자
_ 모르는 한 글자
예시) 도서이름에 '축구'가 포함된 출판사를 검색
select publicsher from book where bookname like '%축구%';
예시) 도서이름의 왼쪽 두 번째 위치에 '구'라는 문자열을 갖는 도서를 검색
select * from book where bookname like '_구%';
🌞복합 연산자
- and
- or
예시) [and] 축구에 관한 도서 중 가격이 20,000원 이상인 도서를 검색
select * from book where bookname like '%축구%' and price >= 20000;
예시) [or] 출판사가 '굿스포츠' 혹은 '대한미디어'인 도서를 검색
select * from book where publicsher = '굿스포츠' or publicsher = '대한미디어';
🌞order by
- 특정 컬럼을 기준으로 자료를 정렬하여 검색하고자 할 때 사용
order by 컬럼명 [asc, desc];
- asc: 오름차순(기본, 생략가능)
- desc: 내림차순
예시) 도서를 이름순으로 검색
select * from book order by bookname;
예시) 모든 도서의 정보를 가격이 높은순으로 정렬하여 출력. 단 가격이 동일할 때는 도서명 순으로 정렬
select * from book order by price desc, bookname;
예시) '굿스포츠'나 '대한미디어'나 '이상미디어'에서 출판하는 도서 중에 가격이 7000원 이상인 도서의 정보를 출력하시오. 단, 가격이 높은순으로 출력하되 가격이 동일할 때는 도서명 순으로 출력
select * from book
where publicsher in ('굿스포츠', '대한미디어', '이상미디어') and price >= 7000
order by price desc, bookname;
🌞집계 함수
- 칼럼별로 총합, 평균, 최대값, 최소값, 개수를 파악하기 위한 함수들을 말한다.
- 총합: sum
- 평균: avg
- 최대값: max
- 최소값: min
- 개수: count
예시) 고객이 주문한 도서의 총 판매액을 구하시오.
select SUM(saleprice) from orders;
select SUM(saleprice) AS 총매출 from orders; //as 키워드는 생략해도 된다.
예시) 이상미디어에서 출간하는 도서의 수를 출력
select count(bookname) from book where publicsher = '이상미디어';
예시) 고객이 주문한 도서의 총 판매액, 평균값, 최저가, 최고가 출력
select sum(saleprice) Total,
avg(saleprice) Average,
min(saleprice) Minimum,
max(saleprice) Maximum from orders;
🌞count 함수
- 개수를 파악하는 함수
- count(컬럼명) <=== 그 컬럼의 값이 null이 아닌 개수를 알려주는 함수
- count( * ) <=== 모든 레코드의 수를 알려주는 함수
예시) 마당서점의 도서 판매 건수를 구하시오.
select count(*) from orders; //모든 도서의 판매 건수
예시) 총 주문건수와 총 주문금액을 출력
select count(*), sum(saleprice) from orders;
select custid, count(*), sum(saleprice) from orders; // 집계함수의 결과는 한 건이기 때문에 다른 컬럼을 함께 출력할 수 없다!
예시) 고객 아이디별로 총 주문건수와 총 주문금액을 출력 ==> 한 건이 아니라 고객 아이디의 수 만큼 출력, 집계함수와 함께 group by 절을 사용
select custid, count(*), sum(saleprice) from orders group by custid;
--> 집계함수를 사용할 때에 group by 절에 나타난 컬럼만이 select절에 올 수 있다.
🌞having
- group by 절에 나타난 결과에 대하여 조건식을 표현하고자 할 때 사용
예시) 구매 가격이 8000원 이상 구매가격에 대하여 구매한 정보에 대하여 고객 아이디별로 총 구매 건수를 출력하세요. 단, 총 구매건수가 2건 이상인 것만 출력
select custid, count(*) from orders
where saleprice >= 8000
group by custid having count(*) >= 2;
🌞데이터베이스 연동 프로그램 만들기
🌈VO(Value Object)
- 데이터베이스 테이블을 객체로 표현하기 위한 클래스
🌈DAO(Database Access Object)
- 데이터베이스에 접근하여 검색, 추가, 수정, 삭제의 명령을 수행하는 클래스
🌞연습문제
👑연습문제1👑
- 마당서점의 고객이 요구하는 다음 질문에 대해 sql문을 작성하세요.
(1) 도서번호가 1인 도서의 이름
(2) 가격이 20,000원 이상인 도서의 이름
(3) 박지성의 총 구매액(박지성의 고객번호는 1번)
(4) 박지성이 구매한 도서의 수(박지성 고객번호 1)
(1) select bookname from book where bookid = 1;
(2) select bookname from book where price >= 20000;
(3) select sum(saleprice) from orders where custid = 1;
(4) select count(*) from orders where custid = 1;
👑연습문제2👑
- 마당서점의 운영자와 경영자가 요구하는 다음질문에 대해 sql문을 작성하세요.
(1) 마당서점 도서의 총 개수
(2) 마당서점에 도서를 출고하는 출판사의 총 개수
(3) 모든 고객의 이름, 주소
(4) 2022년 4월 4일~4월 7일 사이에 주문받은 도서의 주문번호
(5) 2022년 4월 4일~4월 7일 사이에 주문받은 도서를 제외한 도서의 주문번호
(6) 성이 '김' 씨인 고객의 이름과 주소
(7) 성이 '김' 씨이고 이름이 '아'로 끝나는 고객의 이름과 주소
(1) select count(*) from book;
(2) select count(distinct publicsher) from book;
(3) select name, address from customer;
(4) select orderid from orders where orderdate between '2022/04/04' and '2022/04/07';
select orderid from orders where orderdate >= '2022/04/04' and orderdate <= '2022/04/07';
(5) select orderid from orders where orderdate not between '2022/04/04' and '2022/04/07';
select orderid from orders where orderdate < '2022/04/04' or orderdate > '2022/04/07';
(6) select name, address from customer where name like '김%';
(7) select name, address from customer where name like '김_아';
Author And Source
이 문제에 관하여([Day 17] 국비 0419 - 내용 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rlaehdus0417/Day-17-국비-0419-내용-정리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)