Oracle 보충 2일차
2021. 10. 22. 17:33ㆍOracle
// 오라클 보충 2일차
-- 정렬하고자 하는 컬럼이 몇개 일때 어떻게 할지.
-- 날짜 정렬, 글번호 정렬.
-- 날짜의 내림차순, 글번호의 오름차순.
select * from tbl_board order by replycnt desc, bno;
-- 1차 정렬은 order by 이후 첫번째 항목을 따르고,
-- 동일 값이 발생된다면, order by 이후 두번째 항목을 따라서 정렬.
-- 날짜의 경우 보이는 것은 yy/mm/dd 지만, 내부적으로 시분초 도 가지고 있으므로,
-- 동일값 비교에 문제가 됨. 임의로 replycnt 로 변경.
-- 단일행 함수 처리. select initcap('ORACLE') from dual;
-- 주어진 문자열의 첫글자만 대문자 처리.
select upper('OraCle') from dual;
-- 주어진 문자열을 모두 대문자 처리.
select lower('OraCle') from dual;
-- 주어진 문자열을 모두 소문자 처리.
select concat('oracle', ' sql') from dual;
-- 컬럼과 컬럼의 연결 표현은 || 이용햇지만
-- 문자열의 연결 처리는 concat 이용.
select length('oracle') from dual;
-- 문자열 길이 리턴. select substr('901225-1234567',8,1) from dual;
-- 문자열에서 특정 문자 추출. 자바의 substring() 비슷.
-- substr(문자열, 시작위치, 가져올 문자 갯수)
select substr('901225-1234567',8,3) from dual; select replace('jack and july','j','b') from dual;
-- 주어진 문자열의 특정 문자를 원하는 값으로 변경.
select replace('jack and july','ja','bl') from dual;
-- 변경하는 문자는 1개 이상도 처리 가능. select trim(' abc ') from dual;
-- trim 은 채우다의 의미. -- 위와 같은 모양은 좌우 띄어쓰기 공백 제거.
select trim('0' from '000012340000') from dual;
-- 좌우의 0 제거. select trim('0' from '00001200340000') from dual;
-- 중간의 특정 문자 제거는 trim으로는 되지 않음.
select round(456.789, 2) from dual;
-- round(숫자, 반올림 표현 자리수) select round(456.789, -2) from dual;
-- 정수부로 넘어가서 100의 자리로 반올림.
select mod(10,3), mod(10,0) from dual;
-- 나눈 나머지 추출.
-- 자바라면 0으로 나누는 처리는 산술적 예외가 발생할 수 있지만,
-- 오라클에서는 예외를 발생시키지 않고 처리.
select floor(10.6), floor(-10.6) from dual;
-- 댄스 플로워, 바닥. 정수값만 남기고 버림.
select sysdate from dual;
-- 디비 서버의 날짜와 시분초 출력.
select to_char(sysdate, 'YYYY/MM/DD, (AM) DY HH24:MI:SS') from dual;
-- sysdate 에는 년월일 시분초 요일 정보까지 포함 되어 있음.
select to_char(10000,'$999,999'), to_char(10000,'L999,999') from dual;
-- 그룹 함수
-- tbl_attach
글번호(숫자타입)의 합계를 구하시요.
select sum(bno) from tbl_attach; select bno from tbl_attach;
-- tbl_attach 글번호(숫자타입)의 평균을 구하시요.
select avg(bno) from tbl_attach; select max(bno), min(bno) from tbl_attach;
-- 최고값과 최저값 찾기.
select count(bno) from tbl_attach;
-- 게시판 테이블에서 날짜별 게시물 등록 갯수 찾기.
select regdate, count(regdate) from tbl_board group by regdate;
-- 쿼리문 만들 때,
-- 사용자 요구를 메모.
-- 우리말로 재정리.
-- 부분부분 쿼리화.
-- 쿼리문을 해석할 때,
-- 부분부분 우리말로,
-- 그럴듯한 전체 우리말로 변경.
-- 그룹에 조건 걸기
having select regdate, count(regdate) from tbl_board group by regdate having count(regdate) > 500;
-- join
-- 2개 이상의 테이블 이용.
-- 어떤 게시물에 어떤 덧글이 있는지 궁금해.
select title, reply from tbl_board b, tbl_reply r where b.bno=r.bno;
-- 조인을 하고 검색 조건을 추가.
select title, reply from tbl_board b, tbl_reply r where b.bno=r.bno and reply like '%epl%';
-- 조인 결과를 2개의 테이블로 보지 말고,
-- 하나의 새로운 테이블로 인식하면서,
-- 그 안에 검색 조건을 추가하는 느낌.
-- 셀프 조인
-- 자기가 자기 테이블 참조 라고 생각하면 어렵다.
-- 자기랑 똑같은 쌍둥이 테이블이 있는데, 두개 테이블을 합쳐서 새로운 테이블 만들기.
-- 그리고, 만들어진 테이블에서 결과 찾기.
select title, reply from tbl_board b, tbl_reply r where b.bno=r.bno;
-- 위 쿼리문을 표준 조인으로 변경.
select title, reply from tbl_board b natural join tbl_reply r where b.bno=r.bno;
'Oracle' 카테고리의 다른 글
Oracle 보충 1일차 (0) | 2021.10.22 |
---|---|
Oracle 예제4. (0) | 2021.09.14 |
Oracle 5일차. (0) | 2021.09.13 |
Oracle 4일차. (0) | 2021.09.10 |
Oracle 예제3. (0) | 2021.09.09 |