[Day 17] 국비 0419 - 내용 정리

20939 단어 국비dbJavaJava

🌞서점 관리를 위하여 필요한 테이블 만들기

- 도서 테이블(도서번호, 도서이름, 출판사, 가격)
- 고객 테이블(고객번호, 고객이름, 주소, 전화)
- 주문 테이블(주문번호, 고객번호, 도서번호, 구매가격, 구매일)

🌈도서 테이블

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👑

  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👑

  1. 마당서점의 운영자와 경영자가 요구하는 다음질문에 대해 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 '김_아';

좋은 웹페이지 즐겨찾기