[Oracle] 2020.12.16. day_38 select , select 연산자 사용, alias, alias""로 대소문자구분

2020. 12. 16. 12:17Web_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발생