데이터 조회

데이터 조회

이 문서에서는 데이터를 조회하는 기본적인 방법에 대해서 살펴본다.

명령 형식

테이블 1개의 데이터를 조회하기 위한 구문의 기본 형식은 다음과 같다.

select 항목 from 테이블 [where 조건] [group 설정] [정렬 조건];

[ ]로 감싸진 부분은 생략이 가능하며, 이를 사용하여 기본적인 조회를 수행할 수 있다.

다음과 같은 테이블이 있다고 가정하고 데이터를 조회하는 구문을 작성해보도록 한니다.

상품 테이블(product)

번호 (no)

이름 (name)

종류 (type)

가격 (price)

제조일 (made)

유통기한 (expire)

1

스크류바

아이스크림

1200

2020-05-01

2020-10-01

2

마이쮸

사탕

900

2020-01-01

2021-01-01

3

초코파이

과자

3000

2020-02-01

2020-10-20

4

맛동산

과자

2200

2020-01-05

2020-04-05

5

참이슬

주류

1000

2020-01-01

2020-07-01

6

처음처럼

주류

1000

2020-03-15

2020-08-15

7

바나나킥

과자

1500

2020-05-03

2020-06-03

8

빠삐코

아이스크림

1000

2019-12-01

2020-06-01

9

멘토스

사탕

1200

2020-03-20

2020-12-31

10

오레오

과자

2100

2019-06-01

2020-06-01

생성 구문은 다음과 같다.

create table product(
no number primary key,
name varchar2(30) not null,
type varchar2(15) check(type in ('과자','아이스크림','주류','사탕')),
price number,
made date,
expire date
);

insert into product values(1, '스크류바', '아이스크림', 1200, '2020-05-01', '2020-10-01');
insert into product values(2, '마이쮸', '사탕', 900, '2020-01-01', '2021-01-01');
insert into product values(3, '초코파이', '과자', 3000, '2020-01-01', '2021-01-01');
insert into product values(4, '맛동산', '과자', 2200, '2020-02-01', '2020-10-20');
insert into product values(5, '참이슬', '주류', 1000, '2020-01-05', '2020-04-05');
insert into product values(6, '처음처럼', '주류', 1000, '2020-03-15', '2020-08-15');
insert into product values(7, '바나나킥', '과자', 1500, '2020-05-03', '2020-06-03');
insert into product values(8, '빠삐코', '아이스크림', 1000, '2019-12-01', '2020-06-01');
insert into product values(9, '멘토스', '사탕', 1200, '2020-03-20', '2020-12-31');
insert into product values(10, '오레오', '과자', 2100, '2019-06-01', '2020-06-01');

commit;

항목 관련

등록된 상품의 이름을 조회하는 SQL

select name from product;

등록된 상품의 이름과 가격을 조회하는 SQL

select name, price from product;

등록된 상품의 모든 정보를 조회하는 SQL(*는 모든 항목이라는 의미)

select no, name, type, price, made, expire from product;
--또는
select * from product;

조건 관련

조건은 where 조건식 형태로 추가하여 사용한다.

숫자 조건

가격이 2000원 이상인 상품만 조회하는 SQL

select * from product where price >= 2000;

가격이 2000원 이상 3000원 이하인 상품만 조회하는 SQL(between은 구간을 지정할 때 사용할 수 있다)

select * from product where price >= 2000 and price <= 3000;
-- 또는
select * from product where price between 2000 and 3000;

문자열 조건

이름이 스크류바인 상품 조회하는 SQL

select * from product where name='스크류바';

이름이 으로 시작하는 상품 조회하는 SQL(like를 이용하면 유사 검색을 수행할 수 있으나 속도가 느린 편이다)

-- %는 글자가 더 있을 수 있다는 표시이다.
select * from product where name like '참%';

이름에 가 포함된 상품을 조회하는 SQL

select * from product where name like '%이%';
-- 또는 
select * from product where instr(name, '이') > 0;

날짜 조건

제조년도가 2019년인 제품을 조회하는 SQL

  • 문자열을 날짜로 바꾸기 위해서는 to_date라는 명령이 필요

    • to_date(문자열, 바꿀형식) : 연도(YYYY), 월(MM), 일(DD), 시간(HH24), 분(MI), 초(SS)

  • extract는 날짜의 특정 부분을 추출할 수 있도록 하는 명령

    • extract(추출항목 from 데이터) : 연도(YEAR), 월(MONTH), 일(DAY), 시간(HOUR), 분(MINUTE), 초(SECOND)

select * from product where made between to_date('20190101000000', 'YYYYMMDDHH24MISS') and to_date('20191231235959', 'YYYYMMDDHH24MISS');
-- 또는
select * from product where extract(year from made) = 2019;

날짜는 문자열이 아니기 때문에 문자열처럼 사용하면 위험하다.

제조일로부터의 유통기한이 6개월 이내인 제품을 조회하는 SQL

  • 날짜간의 계산이 필요

  • 날짜에서 +1은 1일 후를 의미

select * from product where expire - made <= 180;

상반기에 제조한 상품 조회하는 SQL

select * from product where extract(month from made) between 1 and 6;

2020년 1월 1일부터 현재까지 제조한 상품 조회하는 SQL

select * from product where made between to_date('20200101000000', 'YYYYMMDDHH24MISS') and sysdate;

정렬 관련

정렬은 조건 등으로 추려진 데이터를 원하는 기준에 따라 나열하는 것을 말하며, 반드시 조건처럼 데이터 집합을 계산하는 명령보다 이후에 나와야 한다.

형식

select .... order by 항목 [asc]
-- 또는
select .... order by 항목 desc

예시

모든 상품을 가격순으로 정렬하는 SQL

select * from product order by price desc;

모든 상품을 제조일 최신순으로 정렬하는 SQL

select * from product order by made desc;

가격이 2000원 이상인 상품을 1차로 이름순, 2차로 제조일이 빠른 순으로 정렬하는 SQL

select * from product where price >= 2000 order by name asc, made asc;
-- 또는
select * from product where price >= 2000 order by name, made;

Last updated