본문 바로가기
Kosta DevOps 과정 280기/Java

DB- 데이터 조회하기 -2

by 롯슈83 2024. 6. 11.

like 연산자

  • 설명 
    • 문자열의 어떠한 패턴을 만족하는 데이터를 조회할 때 사용한다.
  • 패턴의 종류
    • % : 임의의 0개 이상의 글자
    • _ : 임의의 1개의 글자

예시

  • 도서명에 '축구'를 포함하고 있는 모든 도서를 출력
select * from book where bookname like '%축구%'
  • 도서명이 '축구'로 시작하고 있는 모든 도서를 출력
select * from book where bookname like '축구%';
  • 도서명이 '축구'로 끝나는 모든 도서를 출력
select * from book where bookname like '%축구';
  • 성씨가 '김'씨인 모든 고객의 정보를 출력
select * from customer where name like '김%';
  • 성씨가 '김'씨이고 성을 포함하여 이름이 2글자인 고객의 정보 출력
select * from customer where name like '김_';
  • 성씨가 '김'씨이고 성을 포함하여 이름이 2글자인 고객의 정보를 출력
select * from customer where name like '김__';
  • 성씨가 '김'씨이고 서울에 거주하는 고객의 정보를 출력
select * from customer where name like '김%' and address like '%서울%';

 

레코드 조회 순서  정하기

  • 레코드를 추가하면 순서는 유지되지 않는다.
  • 단, 조회할 때 순서를 정해줄 수 있다.
select 컬럼이름(들) from 테이블 이름(들) [where 조건식] [order by 컬럼(들)]
  • 오름차순
order by 칼럼이름 [asc]
  • 내림차순
order by 칼럼이름 desc

 

예시

  • 모든 도서의 정보를 가격순으로 정렬하여 출력한다.(기본값은 항상 오름차순)
select * from book order by price;
//또는
select * from book order by price asc;
  • 축구 관련 도서의 도서명, 가격, 출판사명을 가격이 높은 순으로 출력
select bookname, price, publisher from book where bookname like '%축구%' order by price desc;

 

  • 도서명의 두번째 글짜가 '구'이고 가격이 5000원과 50000원 사이인 도서명, 가격, 출판사 명을 출력한다.
    단, 출판사 순으로 출력하고 출판사가 동일할 때는 가격순으로 출력한다.
select bookname, price, publisher from book where 
bookname like '_구%' and 
price between 5000 and 50000 
order by publisher, price;
  • '2024/06/01'과 '2024/06/10' 사이에 판매된 판매가격이 20000원 이상인 판매 내역을 출력한다. 단, 최근의 판매내역부터 출력한다. 판매일이 동일할 때는 판매 가격이 높은 순으로 출력한다.
 select * from orders 
 where orderdate between '2024/06/01' and '2024/06/10' 
 and saleprice >= 20000 
 order by orderdate,saleprice desc;

 

관계 있는 테이블 간의 정보 조회

테이블 간의 관계 정리

  • book, customer 테이블은 orders의 부모이다.
    • pk 인 bookid 가 공통으로 들어간다. 
    • pk인 custid가 공통으로 들어간다.

조인식

  • 주문번호가 10번(orders 테이블)인 고객의 이름(customer 테이블)을 알고싶으면 orders, customer 의 테이블 2개가 다 필요하다.
  • 이 경우 조인식을 쓸 수 있다. 단, 조인식을 쓰려면  하면 공통으로 들어가는 컬럼이 있어야한다.
  • 조회하고자 하는 컬럼이나 조건식이 2개 이상의 테이블에 있을 때 Join을 이용한다.
select 컬럼(들) from 테이블1, 테이블2 where 조인식;
  • 이 때 조인식에는 2개의 공통으로 들어가는 칼럼을 써주는 것이다.
select name 								//고객의 이름을 컬럼을 조회할 예정인데
from customer, orders						//테이블 customer, orders 중에서
where customer.custid = orders.custid and	//customer의 custid와 orders의 custid가 같고,
bookid = 10;								//bookid가 10번인 사람을 출력
//부모 자식간의 테이블 순서는 바꿔도 된다.

 

 

예제문제

  • 고객번호가 1번인 사람이 주문한 도서의 이름을 출력
select bookname from book, orders where book.bookid = orders.bookid and  custid = 1;

 

 

테이블에 별명 붙이기

  • 이 때, 테이블 명이 너무 길면 애칭을 줄 수 있다.
//앞에서 애칭 주고 뒤에 컨디션에서 써먹기
select bookname from book [as] b, orders o where b.bookid = o.bookid and custid = 1;
  • 이 때, 테이블 명이 너무 길면 애칭을 줄 수 있다.
  • 이 때, 공통적으로 가지고 있는 컬럼은 그냥 써도 되지만, 공통적으로 있는 칼럼은 어느 테이블의 컬럼을 조회할 지 명시해줘야한다.
  • 위에서 o.bookid 대신 b.bookid 도 된다.
  • 애칭을 지어주지 않았으면 테이블 풀 네임으로 작성해야 한다.

예제문제

  • 1번 고객이 주문한 도서번호, 도서명, 도서가격, 구매가격, 구매일, 출판사명을 출력하시오
select o.bookid, bookname, price, saleprice, orderdate, publisher from book b, orders o
where o.bookid = b.bookid and
custid = 1;
  • 장미란 고객의 고객번호, 주소, 전화, 도서번호, 도서명, 구매일, 구매가격을 출력한다.
    단, 최근의 구매일부터 출력한다.
select o.custid, address, phone, o.bookid, bookname, orderdate, price
from orders o, book b, customer c
where o.bookid = b.bookid and
c.custid = o.custid and
name = '장미란' 
order by orderdate desc;

 

  • '이상미디어'나 '대한미디어'의 '축구'나 '야구' 관련 도서중에 가격이 10000원이상인 도서를 구매한 고객의 고객번호, 고객이름, 도서번호, 도서명, 구매일을 출력하시오. 단, 최근의 구매일 순으로 출력하고 동일할 때에는 도서 번호 순으로 출력합니다.
select o.custid, name, o.bookid, bookname, orderdate 
from customer c, book b, orders o
where 
o.custid = c.custid and
o.bookid = b.bookid and
publisher in ('이상미디어', '대한미디어') and
(bookname like '%축구%' or bookname like '%야구%') and
price >= 10000
order by orderdate desc, o.bookid;
select c.custid, name, b.

 

CMD 폭을 늘리려면 맨 위 아래 두 줄을 추가한다.

ed ff;

//아래 내용 쓰고

@ff;
set linesize 100;
set pagesize 100;

column bookid format 9999;
column bookname format a20;
column price format 999,999;
column publisher format a20;

column custid format 9999;
column name format a20;
column address format a30;
column phone format a20;
  • linesize => 보여줄 열의 수
  • pagesize ==> 보여줄 줄의 수

'Kosta DevOps 과정 280기 > Java' 카테고리의 다른 글

집계함수  (0) 2024.06.11
DB 실습-1  (0) 2024.06.11
DB- 데이터 조회하기  (0) 2024.06.10
데이터베이스 관리 시스템 (DataBase Management System)  (2) 2024.06.10
데이터베이스 프로그램-3  (0) 2024.06.07