데이터 조회

데이터 조회

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

명령 형식

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

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

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

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

상품 테이블(product)

생성 구문은 다음과 같다.

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, TO_DATE('2022-05-01 10:23:45', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2022-10-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (2, '마이쮸', '사탕', 900, TO_DATE('2022-01-01 08:15:30', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2023-01-01 09:30:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (3, '초코파이', '과자', 3000, TO_DATE('2022-01-01 14:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2023-01-01 16:45:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (4, '맛동산', '과자', 2200, TO_DATE('2022-02-01 09:30:15', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2022-10-20 10:45:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (5, '참이슬', '주류', 1000, TO_DATE('2022-01-05 11:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2022-04-05 13:30:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (6, '처음처럼', '주류', 1000, TO_DATE('2022-03-15 10:15:45', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2022-08-15 12:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (7, '바나나킥', '과자', 1500, TO_DATE('2022-05-03 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2022-06-03 09:45:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (8, '빠삐코', '아이스크림', 1000, TO_DATE('2023-12-01 10:23:45', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2024-06-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (9, '멘토스', '사탕', 1200, TO_DATE('2023-03-20 08:15:30', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2024-12-31 09:30:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (10, '오레오', '과자', 2100, TO_DATE('2023-06-01 14:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2024-06-01 16:45:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (11, '포카칩', '과자', 1500, TO_DATE('2022-05-05 09:30:15', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2023-05-05 10:45:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (12, '칸쵸', '과자', 1000, TO_DATE('2022-06-10 11:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2023-06-10 13:30:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (13, '허니버터칩', '과자', 1700, TO_DATE('2022-07-01 10:15:45', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2023-07-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (14, '새우깡', '과자', 1200, TO_DATE('2022-08-01 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2023-08-01 09:45:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (15, '칙촉', '과자', 2500, TO_DATE('2022-09-01 10:23:45', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2023-09-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (16, '가나초콜릿', '초콜릿', 2000, TO_DATE('2022-10-01 08:15:30', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2023-10-01 09:30:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (17, '빼빼로', '과자', 1500, TO_DATE('2022-11-11 14:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2023-11-11 16:45:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (18, '파이리', '사탕', 1000, TO_DATE('2022-12-31 09:30:15', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2023-12-01 10:45:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (19, '초코송이', '과자', 1200, TO_DATE('2023-01-01 11:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2024-01-01 13:30:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (20, '빈츠', '과자', 1300, TO_DATE('2023-02-01 10:15:45', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2024-02-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (21, '죠리퐁', '과자', 1400, TO_DATE('2023-03-01 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2024-03-01 09:45:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (22, '오징어집', '과자', 1500, TO_DATE('2023-04-01 10:23:45', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2024-04-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (23, '누네띠네', '과자', 1200, TO_DATE('2023-05-01 08:15:30', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2024-05-01 09:30:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (24, '포테토칩', '과자', 1600, TO_DATE('2023-06-01 14:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2024-06-01 16:45:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (25, '새콤달콤', '사탕', 1000, TO_DATE('2023-07-01 09:30:15', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2024-07-01 10:45:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (26, '카라멜콘', '과자', 1100, TO_DATE('2023-08-01 11:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2024-08-01 13:30:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO product VALUES (27, '오징어땅콩', '과자', 1500, TO_DATE('2023-09-01 10:15:45', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2024-09-01 12:00:00',


commit;

항목 관련

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

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

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

조건 관련

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

숫자 조건

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

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

문자열 조건

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

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

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

날짜 조건

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

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

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

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

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

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

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

  • 날짜간의 계산이 필요

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

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

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

정렬 관련

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

형식

예시

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

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

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

Last updated