Big Bro's Studying Archive

Oracle을 활용한 SQL 입문 #1. 데이터의 조회 본문

Big Data展

Oracle을 활용한 SQL 입문 #1. 데이터의 조회

빅브로오 2020. 4. 1. 14:39

1. 데이터의 조회방법

select문을 활용한 기본적인 조회 방법

select *
  from emp

emp 테이블의 모든 데이터를 불러옴

* : 모든 데이터를 의미
from 자리에는 table 명이 온다.

select *
  from dept;

dept 테이블의 데이터를 불러옴.

원하는 컬럼의 선택

select empno,
       ename,
       sal,
       sal*1.1,
       1111,
       'abcd'
  from emp;

emp 테이블의 EMPNO, ENAME, SAL 컬럼을 선택

컬럼에 연산을 적용하거나 숫자, 문자를 집어넣으면

컬럼화 시켜 보여준다.
desc 명령어

 desc employees;

desc 명령어를 통해 테이블의 컬럼정보를 알 수 있다.
Alias의 사용

select empno "사원 번호",
       ename 사원이름
  from emp;

컬럼명이 alias로 바뀌어 출력

각 컬럼 옆에 alias를 병기하거나
as를 쓰고 병기하면 된다. 띄어쓰기의 경우 따옴표로 묶어준다.

연결연산자(||) : 컬럼과 컬럼, 컬럼과 표현식을 연결

select empno ||' ' || ename as 사번사명
  from emp;

empno와 ename이 한 컬럼에 출력
데이터가 empno와 ename 사이에 공백을 한 칸 두고 조회된다.

distinct : 중복행 제거, 뒤에 나열된 컬럼 데이터의 유일한 값만 출력

select distinct deptno
  from emp;
select distinct deptno,
       ename
  from emp;

컬럼데이터를 여러개 나열할 경우 모든 컬럼이 중복인 것만 제거
10 davie, 10 jones는 모두 출력

 alias 연습문제 1
select deptno as "부서#",
       dname as 부서명,
       loc as 위치
  from dept;
-- distinct 연습문제 1
select distinct deptno,
       job
  from emp;

조건을 부여하여 조회하는 방법

--student 테이블 조회
select *
  from student;
 --예제) student 테이블에서 1학년이면서 키가 170 이상인 학생의 이름, 학년, 키 정보 출력
select *
  from student
 where Grade = 4
   and studno = 9411;

where절을 활용하여 조회가 가능하다.

select *
  from student
 where name = '서재수';

텍스트로도 조회가 가능하다.
다만 '='의 경우 동치만을 조회

--예제) student 테이블에서 1학년이면서 키가 170 이상인 학생의 이름, 학년, 키 정보 출력
select name,
       grade,
       height
  from student
 where grade = 1
   and height >= 170;
select *
  from emp
 where ename = 'SMITH';

조회시 문자상수는 대소를 구분한다.
'smith'로 조회하면 나오지 않음.

select *
  from EMP
 where sal between 2000 and 3000;
 -- 비트윈 구문
--비트윈 구문과 부등호 구문의 성능차이는 없다.

where 조건절에 범위를 넣는 것도 가능하다.

in 연산자 : A 또는 B 또는 ...
select *
  from student
 where grade in (1,2);

OR와 개념이 같다.

연습문제 ) emp 테이블에서 부서번호가 10번이 아니면서  salary가 3000 이상인 직원의 모든 정보 출력
select *
  from emp
 where deptno <> 10
   and sal >= 3000;

연결 연산자 1
select name ||'의 키는 ' || height || 'cm, 몸무게는 ' || weight || 'kg 입니다' as "학생의 키와 몸무게"
  from student;

연결 연산자 2

select name || '(' || position || '), ' || name || ' ''' || position || '''' as 교수님
  from professor;
like 연산자 : 패턴연산자
select *
  from EMP
 where ename like 'S%';
 --S로 시작하는 ename에 해당하는 사원 선택

select *
  from EMP
 where ename like '%T';
 --S로 끝나는 enmae에 해당하는 사원 선택

select *
  from EMP
 where ename like '%A%';
 --ename에 A를 포함하고 있는 사원 선택

select *
  from EMP
 where ename like '_A%';
-- 글자수 제한 X

select *
  from emp
 where ename like '_A___';
-- 글자수 제한 (5자)

_ : 언더바는 한 글자를 의미하는 빈 공간

--not 연산자 : 부정연산자
select *
  from student
 where grade not between 2 and 3;

select *
  from student
 where name not like '서%';

select *
  from student
 where name like '서%';
 -- not 연산자와 반대의 결과가 출력되는 것을 확인

-- not 연산자는
between 구문,
in 구문, not like 구문 등 다양하게 활용 가능하다

--null
' ', ' '는 null이 아니고 문자이다.
null은 공간을 차지하지 않은, 아직 입력되지 않은 데이터
null만 '='로 비교할 수 없다.
null 은 is null로 해야 한다.

-- 예제 ) emp 테이블에서 comm이 null인 사원 정보 출력
select *
  from emp
 where comm is null ;

select *
  from EMP
 where comm >=0
    or comm < 0;

아래의 실습문제들의 코드를 직접 oracle에서
수행해 보며 복습해보자

--실습문제
select empno,
       ename,
       job,
       SAL
  from EMP
 where sal >= 3000;

--실습문제 2
SELECT EMPNO,
       ENAME,
       JOB,
       SAL,
       DEPTNO
  from EMP
 where job = 'MANAGER';

--실습문제3
select empno 사원번호,
       ename 성명,
       job 업무,
       sal 급여,
       hiredate 입사일자,
       deptno 부서번호
  from EMP
 where hiredate >= '1982-01-01';

--실습문제 연산자문제1
select ename 성명,
       job 업무,
       sal 급여,
       deptno 부서번호
  from EMP
 where sal >= 1300
   and sal <= 1700;

--실습문제 연산자문제2
select empno 사원번호,
       ename 성명,
       job 업무,
       sal 급여,
       hiredate 입사일자
  from EMP
 where empno = 7902
    or empno = 7788
    or empno = 7566;

-- 실습문제 연산자문제3
select empno 사원번호,
       ename 성명,
       job 담당업무,
       sal 급여,
       hiredate 입사일자,
       deptno 부서번호
  from EMP
 where hiredate between '1982-01-01' and '1982-12-31';

 select empno,
        ename,
        job,
        sal,
        hiredate,
        deptno
   from EMP
  where hiredate like '82%';

-- 실습문제 연산자문제4
select ename 이름,
       sal 급여
  from EMP
 where ename like 'M%';

-- 실습문제 연산자 문제5
select ename 이름,
       job 업무
  from EMP
 where ename like '_L%';

-- 실습문제 연산자 문제6
select ename,
       job,
       sal,
       hiredate,
       deptno
  from EMP
 where comm is null;

-- 실습문제 연산자 문제7
select empno,
       ename,
       job,
       sal,
       hiredate,
       deptno
  from EMP
 where sal >= 1100
   and job = 'MANAGER';

-- 실습문제 연산자 문제8
select empno,
       ename,
       job,
       sal,
       hiredate,
       deptno
  from EMP
 where not (sal < 1100
           and ename like 'M%');

--실습문제 연산자 문제9
select empno,
       ename,
       job,
       sal,
       deptno
  from EMP
 where job not in('MANAGER',
               'CLERK',
               'ANALYST');

--실습문제 연산자 문제10
select empno,
       ename,
       job,
       SAL
  from EMP
 where job = 'PRESIDENT'
   and sal >= 1500
    or job = 'SALESMAN';

--실습문제 정렬문제01
select empno,
       ename,
       job,
       sal,
       hiredate,
       deptno
  from EMP
 order by hiredate desc;

--실습문제 정렬문제02
select empno,
       ename,
       job,
       deptno,
       SAL
  from emp
 order by deptno asc,
       sal desc;

--실습문제 정렬문제 03
select distinct e.deptno,
       dname,
       job
  from emp e,
       dept d
 where e.deptno = d.DEPTNO
 order by job asc;

 select deptno, job
   from EMP
 group by job;
Comments