Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

히바리 쿄야 와 함께 하는 Developer Cafe

[1일차] DO IT 오라클 데이터베이스 / p15 ~ 126 / Select 문의 기본형식 Where 절과 연산자 본문

DATABASE

[1일차] DO IT 오라클 데이터베이스 / p15 ~ 126 / Select 문의 기본형식 Where 절과 연산자

TWICE&GFRIEND 2021. 1. 15. 21:12

/*
   empno : 사원번호                                       네자리숫자         

   emp 테이블에서 각 사원의 데이터를 구분할 수 있는 유일한 값 기본키로 사용


   ename : 사원이름 10byte                   크기의 가변형 문자                 scott,james 등                                                      
   job   : 사원직책 9byte                          크기의 가변형 문자             manager,clerk 등                                                         
   mgr   : 직속상관의 사원번호                        네자리 숫자         사원의 상급자의 네 자리 사원 번호를 저장하는 열
   hiredate : 입사일                                        날짜데이터                         입사일을 나타내는 날짜 데이터
   sal   :     급여                          두자리 소수점을 포함하는 일곱자리 숫자          800, 1600, 5000 등 
   comm  : 급여외 추가수당           두자리 소수점을 포함하는 일곱자리 숫자     

   commission 의 약자로 월 급여외 추가수당을 의미
   deptno : 사원이 속한 부서번호                     두자리 숫자               

   department number 의 약어 사원이 속해 있는 부서의 고유번호
*/


--select * from dept;
desc dept;
desc salgrade;

/*
   select [조회할 열1이름],[열2이름],...,[열N이름] from [조회할 테이블 이름];
*/

select * from emp;
select empno,ename,deptno from emp;
select empno,deptno from emp;

/* distinct 중복을 제거함 */
select deptno from emp;
select distinct deptno from emp;  
select distinct job, deptno from emp; -- manager 는 중복이 되어있지 않음 20,30,10 수치값이 다름 중복이 안됨

/* all 중복되는 열 제거없이 그대로 출력*/
select all job, deptno from emp;

select ename, sal, sal*12+comm, comm from emp;

--select ename, sal, sal+sal+sal+sal+sal+sal+sal+sal+sal+sal+sal+sal+comm, comm from emp;

select ename, sal, sal*12+comm as annsal, comm from emp;

/* 별칭을 사용할때 as 키워드 사용하면 됨 */


/* select [조회할 열1 이름], [열2 이름],...,[열N이름] from [조회할 테이블 이름] order by [정렬할 열 이름] [정렬옵션] */
/* order by  desc: 내림차순 asc:오름차순 */

select * from emp order by sal;
select * from emp;

select * from emp order by sal desc;
select * from emp order by deptno asc, sal desc;  -- emp 테이블의 전체 열을 부서번호(오름차순)와 급여(내림차순) 을 정렬

select distinct job from emp;

select * from emp;

select empno as employee_no, ename as employee_name, mgr as manager, sal as salary, comm as commission, deptno as department_no from emp 
order by deptno desc, ename;

select * from emp where deptno = 30;

select * from emp where empno = 7782;

/* select [조회할 열1 이름],[열2 이름],...,[열N 이름] from [조회할 테이블 이름] where [조회할 행을 선별하기 위한 조건식] */

select * from emp where deptno = 30 and job = 'SALESMAN';

select * from emp where empno = 7499 and deptno = 30;

select * from emp where deptno = 30 or job = 'CLERK';

select * from emp where deptno = 20 or job = 'SALESMAN';



select * from emp where sal*12 = 36000;

select * from emp;

select * from emp where sal >= 3000;

select * from emp where sal >= 2500 and job = 'ANALYST';

select * from emp where ename >= 'F';

select * from emp where ename <= 'FORZ';

/*  A != B  A <> B   A ^= B   :  A 값과 B 값이 다를 경우  true,  같을 경우 false 반환 */

select * from emp where sal != 3000;

select * from emp where sal <> 3000;

select * from emp where sal ^= 3000;


select * from emp where not sal = 3000;

/* in 연산자 => where 조건식에서 특정 열 데이터 값만을 조회하고자 할때 사용 */
select * from emp where job = 'MANAGER' or job = 'SALESMAN' or job = 'CLERK';

/*
    select [조회할 열1 이름],[열2 이름],...,[열N 이름] from [조회할 테이블 이름] where 열 이름 in (데이터1,데이터2,... 데이터N);
    in 열 이름 조회할 열의 데이터 목록 - 특정 열에 포함된 데이터를 여러 개 조회할 때 사용 
*/


/* 정렬 단축키 ctrl + f7   쿼리 히스토리 창 f8   커밋 f11   롤백 f12  확장된 붙여넣기  ctrl + shift + v  데이터베이스 접속 alt + f10  계획 설명 f10    대소문자 변경  alt + ' */

select * from emp where job in ('MANAGER','SALESMAN','CLERK');

select * from emp where job != 'MANAGER' and job <> 'SALESMAN' and job ^= 'CLERK';

select * from emp where job not in ('MANAGER','SALESMAN','CLERK');

select * from emp where deptno in (10, 20);


/* between  A  and  B  :   A(최솟값) 이상 B(최댓값) 이하 */

select * from emp where sal >= 2000 and sal <=3000;

select * from emp where sal between 2000 and 3000;

select * from emp where sal not between 2000 and 3000;

/* like 연산자 : 이메일이나 게시판 제목 또는 내용 검색 기능 처럼 일부 문자열이 포함된 데이터를 조회할때 사용 */
/* 와일드 카드 :  _ 어떤 값이든 상관없이 한 개의 문자 데이터                 % 길이와 상관없이 (문자 없는 경우도 포함) 모든 문자 데이터  */
select * from emp where ename like 'S%';

-- 사원 이름의 두 번째 글자가 L 인 사원 출력
select * from emp where ename like '_L%';

-- 사원 이름에 AM 이 포함되어 있는 사원 데이터 출력
select * from emp where ename like '%AM%';

-- 별칭을 사용하여 열 이름 출력
select ename, sal, sal*12+comm as annsal, comm from emp;

select * from emp where comm = null;

-- null 인 데이터 값을 출력하고 싶을때 is null  연산자를 사용하면 된다.
select * from emp where comm is null;  

-- null 이 아닌 데이터 값을 출력 하고 싶을때 is not null 연산자 사용
select * from emp where mgr is not null;

select * from emp where sal > null and comm is null;

 

select * from emp where sal > null or comm is null;

 

-- 집합 연산자 (union) 을 사용하여 출력하기 연결할때 사용 
select empno, ename, sal, deptno from emp where deptno = 10 union 
select empno, ename, sal, deptno from emp where deptno = 20;

 

-- 집합 연산자 (union) 을 사용하여 출력하기 연결할때 사용 
select empno, ename, sal, deptno from emp where deptno = 10 union 
select empno, ename, sal, deptno from emp where deptno = 20;


-- 에러나는 예제 
select empno, ename, sal, deptno from emp where deptno = 10 union
select deptno, ename, sal from emp where deptno = 20;
--ORA-01789: 질의 블록은 부정확한 수의 결과 열을 가지고 있습니다. (출력 열이 다를때 에러남)

 

--ORA-01790: 대응하는 식과 같은 데이터 유형이어야 합니다 (출력 할때 열이 자료형이 다를때)
select empno, ename, sal, deptno from emp where deptno = 10 union
select ename, empno, deptno, sal from emp where deptno = 20;

 

 

-- 출력열 개수와 자료형이 같을때
select empno, ename, sal, deptno from emp where deptno = 10 union 
select sal, job, deptno, sal from emp where deptno = 20;

 

 

 

-- union : 연결된 select 문의 결과 값을 합집합 으로 묶어줌 결과값의 중복은 제거됨
-- union all : 연결된 select 문의 결과 값을 합집합으로 묶어줌 중복된 결과 값도 제거 없이 모두 출력됨
-- minus : 먼저 작성한 select 문의 결과 값에서 다음 select 문의 결과 값을 차집합 처리함 먼저 작성한 

   select 문의 결과 값 중 다음 select 문에 존재하지 않는 데이터만 출력

-- intersect : 먼저 작성한 select 문과 다음 select 문의 결과 값이 같은 데이터만 출력된다. 교집합과 같은 의미

 

 

select empno, ename, sal, deptno from emp where deptno = 10 union
select empno, ename, sal, deptno from emp where deptno = 10;

select empno, ename, sal, deptno from emp where deptno = 10 union all
select empno, ename, sal, deptno from emp where deptno = 10;

 

select empno, ename, sal, deptno from emp minus
select empno, ename, sal, deptno from emp where deptno = 10;

 

select empno, ename, sal, deptno from emp intersect
select empno, ename, sal, deptno from emp where deptno = 10;

 

 

 

 

 

 

 

Comments