2020. 12. 16. 12:17ㆍWeb_Back-end/Oracle
◎ SELECT
DML (select, insert, delete) | select |
select의 기능 | 테이블에서 모든 레코드의 특정 컬럼을 조회할 때 사용 |
![]() |
|
문법 | 절은 생략할 수 있지만, 절이 사용될 때에는 반드시 아래의 순서를 지킨다![]() |
필수 모든 레코드에서 원하는 멀럼만 조회 |
select | ①컬럼명,, ②컬럼명 연산자,, ③함수명(컬럼명),,, |
from | 테이블명 | |
옵션 특정레코드만 조회 |
where 절 | 검색조건설정, 연산자 |
옵션 같은 값이 묶여서 하나만 조회 |
group by 절 | 그룹화 (여러개의 레코드를 묶어서 하나로 만드는 것 : 중복제거) |
having 절 | 그룹으로 묶일 조건설정 (group by와 반드시 같이 사용) |
|
옵션 레크드의 순서를 오름차순, 내림차순으로 정렬할 때 |
order by 절 | 정렬 (레코드를 순서대로 조회할 때) |
2020/12/15 - [개발/Oracle] - [Oracle] 2020.12.15. day_37 실행,쿼리문작성, Oracle연산자
[Oracle] 2020.12.15. day_37 실행,쿼리문작성, Oracle연산자
- table - Oracle은 tablespace에 테이블이 저장된다 Oracle은 대소문자 구분하지 않는다 ( 모두 대문자로 저장된다 : 컬럼명, 테이블명, 쿼리문, 데이터형 ) 컬럼 값은 대소문자가 구분된다 테이블생성 DDL
jjiny-bbany.tistory.com
◎ emp table로 where절, 연산자 연습하기
○ 컬럼명, 값(숫자) 으로 검색
테이블에서 특정레코드만 조회 | 결과 |
사원테이블에서 10번부서에 근무하는 사원의 사원번호, 직무, 사원명, 연봉, 부서번호 조회 |
![]() |
select empno, job, ename, sal, deptno
from emp
where deptno = 10;
○ 컬럼명, 값(문자열) 으로 검색
테이블에서 특정레코드만 조회 | 결과 |
사원테이블에서 직무가 'SALESMAN' 인 사원의 사원명, 사원번호, 입사일, 연봉, 보너스, 직무 조회 |
![]() |
select ename, hiredate, sal, comm, job
from emp
where job = 'SALESMAN';
○ 컬럼명, 여러 값(숫자) 으로 검색
테이블에서 특정레코드만 조회 | 결과 |
사원테이블에서 부서번호가 10번, 20번인 사원들의 사원번호, 사원명, 부서번호, 연봉, 입사일 조회 |
![]() |
select empno, ename, deptno, sal, hiredate
from emp
where deptno = 10 or deptno = 20;
○ 컬럼명, 여러 값(문자열) 으로 검색
테이블에서 특정레코드만 조회 | 결과 |
사원테이블에서 부서번호가 10번, 20번이면서 연봉이 1000이상인인 사원들의 사원번호, 사원명, 부서번호, 연봉, 입사일 조회 |
![]() |
select empno, ename, deptno, sal, hiredate
from emp
where (deptno = 10 or deptno = 20) and sal > 1000;
○ 컬럼명, null 존재하는지 검색
테이블에서 특정레코드만 조회 | 결과 |
사원테이블에서 보너스를 수령하지 않는 사원들의 사원번호, 사원명, 연봉, 보너스, 부서번호 조회 null 비교 null : 관계연산자(=, !=)로 비교할 수 없다 ※ null 값을 비교할 때에는 is null, is not null로 비교한다 |
![]() |
select empno, ename, sal, comm, deptno
from emp
where comm is null or comm = 0;
○ 관계연산자 , between and 으로 검색
테이블에서 특정레코드만 조회 | 결과 |
사원테이블에서 연봉이 1000~3000사이인 사원의 사원번호, 사원명, 부서번호, 연봉, 입사일 조회 1. 관계연산자 사용 2. between사용 (컬럼명 between 값 and 값 : 적은범위의 값이 앞에와야한다) 큰 값이 앞에 온다면 조회 불가능 |
![]() |
select empno, ename, deptno, sal, hiredate
from emp
--where sal>=1000 and sal<=3000;
--between사용 (컬럼명 between 값 and 값 : 적은범위의 값이 앞에와야한다)
where sal between 1000 and 3000;
○ 범위를 포함하는 값 / and : between / or : in
테이블에서 특정레코드만 조회 | 결과 |
사원테이블에서 '7902, 7698, 7566' 매니저가 관리하는 사원의 사원번호, 사원명, 매니저번호, 부서번호 조회 or(관계연산자)를 여러개 사용해야하는 상황 in을 사용 컬럼명 in(값,,,,,) : 포함하는 값을 조회할 때 사용 in : 포함하는 not in : 포함하지 않는 |
![]() |
select empno, ename, mgr, deptno
from emp
--where mgr='7902' or mgr='7698' or mgr='7566';
where mgr in(7902, 7698, 7566);
--where mgr not in(7902, 7698, 7566);
--in : 포함하는 / not in : 포함하지 않는
○ 같지않음을 조회 _ 관계연산자
테이블에서 특정레코드만 조회 | 결과 |
사원테이블에서 직무가 'CLERK' 가 아닌 사원의 사원번호, 사원명, 직무, 연봉, 입사일 조회 같지않음을 조회할 때에는 != <> |
![]() |
select empno, ename, job, sal, hiredate
from emp
--같지않음을 조회할 때에는 : !=, <>
--where job!='CLERK';
where jop <> 'CLERK';
○ Alias : 컬럼명, 테이블명에 대한 별칭
Alias | |
컬럼명, 테이블명에 대한 별칭 | |
긴 컬럼명, 긴 테이블명을 별명을 부여햐어 가독성 향상 | |
컬럼명의 alias는 조회할 때 컬럼명이 변경되어 inline view로 생성 | |
select 에서 선언된 컬럼명의 alias는 붙어있는 where절에서 사용할 수 없다 | |
문법 | 컬럼명 alias |
컬럼명 as alias | |
select empno e_no, ename as en from emp; |
|
![]() |
|
대소문자 구분 | alias를 ""(쌍따옴표)로 묶어서 부여하면 대소문자를 구분 가능하다 select ename "Ename", sal "Sal" from emp; ![]() |
아래처럼 사용하면 Error발생
--alias는 선언된 select의 where절에서는 사용할 수 없다
select empno, ename, sal as s
from emp
where s > 1200; --error
○ 산술연산자 - 곱하기
테이블에서 특정레코드만 조회 | 결과 |
사원테이블에서 사원번호, 사원명, 부서번호, 연봉, 세금 조회 세금 : 컬럼이 없다 : 다른컬럼을 이용해서 연산해보기 단, 세금은 연봉에 3.3% 로 연산하여 출력 |
![]() |
select empno, ename, deptno, sal, sal*0.033 tax
from emp;
○ null은 연산되면 결과가 null로 나온다
테이블에서 특정레코드만 조회 | 결과 |
사원테이블에서 모든 사원의 사원번호, 사원명, 연봉, 보너스, 총수령액을 조회 단, 총 수령액은 연봉과 보너스를 합산한 금액으로 연산하고 컬럼명을 total_sal로 설정하여 조회할 것 |
![]() |
select empno, ename, sal, comm, sal + comm total_sal
from emp;
○ null은 연산되면 결과가 null로 나온다 --해결방법--> nvl 함수를 사용
○ 산술연산자 - 나누기
테이블에서 특정레코드만 조회 | 결과 |
사원테이블에서 사원번호, 사원명, 연봉, 월급을 조회 단, 월급은 연봉을 12로 나눈 연산결과를 출력 |
![]() |
select empno, ename, sal, sal/12 month_sal
from emp;
○ 산술연산자가 아닌 연산자는 조회하는 컬럼에 사용할 수 없다
Error
select ename, sal>1000
from emp;
sal >1000 : java처럼 true, false를 반환하지 않고 error발생