본문 바로가기

학원/SQL

07_데이터베이스(기타)

728x90
반응형

시퀀스

   · create sequence 시퀀스이름 [옵션]; create sequence student_seq;
   · max value 표기 가능한 최대 수
   · increment_by 증가하는 숫자
   · cycle_flag   max 넘어갈 시 1로 돌아갈지(디폴트 no)
   · last_number 캐시사이즈

      - create sequence item_seq no cache;  캐시사이즈 사용 x
      - create sequence item_seq cache 100; 캐시사이즈 100
   · 사용

시퀀스이름.nextval values(student_seq.nextval, ?);

   · 삭제

drop sequence 시퀀스이름;

   · 조회

SELECT board_seq.currval AS seq_num(표시할이름) FROM dual;  --쓰인 번호 조회

단일행 함수

   · 결과집합의 행마다 연산하는 함수

SELECT member_id, upper(member_id) 대문자 FROM MEMBER;
SELECT member_id, lower(member_id) 소문자 FROM MEMBER;
SELECT * FROM MEMBER WHERE instr(member_id, 'kh')>0;

집계 함수

   · 데이터를 종합해서 하나의 결과를 만드는 함수(합계, 평균, 개수, 최대, 최소)

SELECT AVG(price) 평균 FROM subject;
SELECT max(price) 최대 FROM subject;
SELECT min(price) 최소 FROM subject;
SELECT count(price) 개수 FROM SUBJECT; --가격이 몇 개 있는가?(null 제외)
SELECT count(*) 개수 FROM product; --데이터가 몇 개 있는가(NULL 포함)
SELECT sum(price) 합계, AVG(price) 평균 FROM SUBJECT;

서브쿼리(sub query)

SELECT name FROM product WHERE price = (SELECT max(price) FROM product);

rownum

SELECT tmp.*, rownum FROM (SELECT * FROM MEMBER ORDER BY member_join asc) tmp 
WHERE rownum BETWEEN 1 AND 10;

Top n query

SELECT * FROM (
SELECT tmp.*, rownum rn FROM (
SELECT * FROM MEMBER ORDER BY member_join ASC
) tmp
) WHERE rn BETWEEN 2 AND 10;

그룹

SELECT TYPE FROM product GROUP BY TYPE;
SELECT TYPE, avg(price) FROM product GROUP BY TYPE;
SELECT TYPE, count(*) FROM product GROUP BY TYPE;
SELECT TYPE, sum(price) 합계 FROM product 
	GROUP BY TYPE ORDER BY 합계 DESC;
SELECT to_char(made, 'yyyy'), count(*) FROM product 
	GROUP BY to_char(made, 'yyyy'); 	--연도별 개수 출력
SELECT extract(YEAR FROM made) 연도, count(*) FROM product 
	GROUP BY extract(YEAR FROM made); 	--연도별 개수 출력
SELECT TYPE, count(*) FROM product 
	GROUP BY TYPE HAVING count(*)>=3; 	--having으로 그룹 조건 활용
select count(*) from board_like 
	group by board_like_no having board_like_no=20
SELECT extract(YEAR FROM made), TYPE, count(*) FROM product 
	GROUP BY extract(YEAR FROM made), TYPE; --그룹이 여러항목

중복제거(항목만 뽑기)

SELECT DISTINCT TYPE FROM product;

   · 권한부여  GRANT CREATE VIEW TO kh11;
   · 생성  

CREATE VIEW pocketmon_stat as 
	SELECT TYPE, count(*) cnt FROM pocketmon 
	GROUP BY TYPE ORDER BY cnt DESC, TYPE asc;

   · 조회 

SELECT * FROM pocketmon_stat;

   · 덮어쓰기 

CREATE OR REPLACE VIEW subject_stat AS 
	SELECT TYPE, count(*) cnt, avg(price) avg 
    FROM subject GROUP BY TYPE;

dual

   · 한번만 찍고 싶을 때 쓰는 정해지지 않는 임시 테이블

select sysdate, systimestamp, board_seq.nextval from dual;

집합

   · union all - 합집합(중복제거 x)
   · union distinct - 합집합(중복제거)
   · intersect - 교집합
   · minus - 차집합

SELECT *  FROM board_notice UNION ALL SELECT * FROM board_ohter;

테이블 조인(Table Join)

  · 내부조인(Inner Join) : 매칭되는(연결된) 데이터만 조인(매칭되는거 없으면 빠져버림)

select 항목 from A테이블 inner join B테이블 on 연결조건
SELECT A.*, R.room_no, R.room_name, R.room_size FROM academy A 
		INNER JOIN room R ON A.academy_no = R.academy_no;

  · 외부조인(Outer Join) : 특정 테이블은 전부 조회(기준(방향)이 필요)
      - A ← B 면 A left outer join B
      - A → B 면 A right outer join B
      - A ↔ B면 A full outer join B

SELECT A.academy_name, count(R.room_no) FROM academy A 
	LEFT OUTER JOIN room R ON A.academy_no=R.academy_no 
	GROUP BY A.academy_name;
728x90
반응형

'학원 > SQL' 카테고리의 다른 글

08_데이터베이스(관리자)  (0) 2023.02.19
06_데이터베이스(CRUD)  (0) 2023.02.19