DML_Select

Date:     Updated:

카테고리:

태그:

oracle.png

오라클 명령어 : select 문(검색)

  • 가장 사용빈도수가 높은 명령

[1] scott 사용자가 관리하고 있는 테이블 목록

select * from tab;
select * from tabs;

[2] 특정 테이블의 구조 조회(필드 리스트/데이터 형식)

[3] 테이블의 제약사항 조회

SELECT 의 사용법

  • SELECT : select 와 from 사이에 조회하고자 하는 필드명들을 , 로 구분하여 나열한다
  • select booknum, subject, rentprice from booklist;
  • 모든 필드를 한번에 지목하려면 을 써준다 –selectfrom…
  • from 뒤에는 대상 테이블 명을 써준다
  • where 절을 붙여서 조건에 맞는 행만 골라내기도 한다
  • select 필드명들 또는 * from 테이블명 where 검색조건

판년도가 2020년 이후인 도서의 제목과 출판년도를 조회

select subject, makeyear from booklist where makeyear>=2020;

select * from booklist; -- 검색조건 없이 모든 필드를 다 조회해서 열람

연산의 결과가 필드의 항목을 조회될 수 있다

select rentprice * 10 - inprice form booklist;
select rentprice * 10 - inprice as 마진 from booklist;
select subject as 제목, rentprice * 10 - inprice as 마진 from booklist;
select subject as "도서 제목", rentprice * 10 - inprice as "10회 대여 마진" from booklist;
select booknum || subject as "book info" from booklist;

오라클 SL 에서 || 는 이어붙이기 연산이다

중복제거 distinct

select bnum as 대여도서번호들 from rentlist;
select distinct bnum as 대여도서번호들 from rentlist;

함수의 사용

select avg(inprice) as 입고가격평균 from booklist;

검색 조건 : update 와 delete 에서 사용하던 where 와 사용방식이 똑같다

memberlist 테이블에서 이름이 ‘홍’으로 시작하는 회원의 모든 회원정보 출력

select * from memberlist where name like '흥%';

memberlist 테이블에서 1983년도 이후로 태어난 회원의 모든 회원정보

select * from memberlist where birth >= '1983-01-01';

booklist 에서 제작년도가 2016년 이전이거나 입고가격(inprice)이 18000 이하인 도서의 모든 필드

select * from booklist where makeyear<2016 or inprice <= 18000

booklist 에서 도서 제목에 두번째 글자가 ‘것’인 도서 정보

select * from booklist where subject like '_것%'
select * from emp;
select * from dept;

IN ANY SOME ALL

부서번호가 10, 20, 30 인 사원들의 모든 필드 조회

  • 방법 #1
select * from emp where deptno=10 or deptno=20 or deptno=30;
  • 방법 #2
select * from emp where deptno <>40;
  • 방법 #3
select * from emp where deptno in(10,20,30);

1. ANY

select * from emp where deptno = any(10,20,40); 
  • ANY() : 괄호안에 나열된 내용중 어느하나라도 해당하는 것이 있다면 검색 대상으로 함
  • in과 유사

2. SOME 조건식 - ANY 와 동일

SELECT * FROM emp WHERE deptno = some(10,20,40);

3. ALL

SELECT * FROM emp WHERE deptno = all(10,20,40);

-괄호안의 모든값이 동시 만족해야하는 조건이므로 해당하는 레코드가 없을때가 대부분이다. 사용빈도수가 현저히 낮다

SELECT * FROM emp WHERE deptno <> all(10,20,40);
  • 이와 같이 구성내용과 모두 같지 않을 때는 필터링 할때 자주 사용한다
  • 위 예문을 in 으로 표현
SELECT * FROM emp WHERE deptno NOT IN(10,20,40);

그 외 활용하기 좋은 select 에 대한 예제

부서번호가 10이 아닌 사원 (아래 두 문장은 같은 의미의 명령입니다)

select * from emp where NOT (DEPTNO=10);
select * from emp where DEPTNO<>10;

급여가 1000달러 이상, 3000 달러 이하

select * from emp where SAL>=1000 and SAL<=3000;
select * from emp where SAL between 1000 and 30000;

사원의 연봉 출력

select deptno, ename, sal * 12 as 연봉 from emp;
  • 정렬(sort)-where 구문 뒤에, 또는 구문의 맨 끝에 Order by 필드명 [desc]
  • select 명령의 결과를 특정 필드값의 오름차순 이나 내림 차순으로 정렬하라는 명령
  • asc : 오름차순 정렬, 쓰지 않으면 기본 오름차순 정렬로 실행된다
  • desc : 내림차순 정렬, 내림 차순 정렬을 위해서는 반드시 필드명 뒤에 써야하는 키워드 이다

  • emp 테이블에서
  • sal 이 1000 이상인 데이터를 ename 의 오름차순으로 정렬하여 조회
select * from emp where sal>=1000 order by ename; -- 오름차순일때 asc는 생략 가능

sal 이 1000 이상인 데이터를 ename 의 내림차순으로 정렬하여 조회

select * from emp where sal>=1000 order by ename desc;

job 으로 내림차순 정렬 후 같은 job_id 사이에서는 순서를 hiredate 의 내림차순으로 정렬

select * from emp order by job desc, hiredate desc;
  • 두개 이상의 정렬 기준이 필요하다면 위와 같이 컴마(,)로 구분해서 두가지 기준을 지정해주며,
  • 위의 예제로 봤을 때 job 으로 1차 내림 차순 정렬하고, 같은 job 값들 사이에 hiredate 로 내림차순 정렬한다

Oracle 카테고리 내 다른 글 보러가기

댓글 남기기