국비학원/공부

9일차 oracle(2)

mikan- 2023. 5. 4. 00:05

Q 23.
22번의 문제에서 언급한 between 말고 쓸 수 있는 SQL?
Q 22 = emp테이블 에서 급여가 1300 ~ 1800 사이에 있는 직원의 정보를 사원이름, 업무, 급여순 으로 SQL 출력

and = 2개가 참참
or = 2개중 하나만 참

SQL> select ename, job, sal from emp where sal >= 1300 and sal <= 1800;

ENAME      JOB              SAL
---------- --------- ----------
ALLEN      SALESMAN        1600
TURNER     SALESMAN        1500
MILLER     CLERK           1300


Q 24.
날짜 검색 -> 문자처럼 검색
emp테이블 에서 81/02/22 이후에 입사한 사원의 이름, 입사일 출력

SQL>select ename, hiredate from emp where hiredate >= '81/02/22';

ENAME      HIREDATE
---------- --------
WARD       81/02/22
JONES      81/04/02
MARTIN     81/09/28
BLAKE      81/05/01
CLARK      81/06/09
SCOTT      87/04/19
KING       81/11/17
TURNER     81/09/08
ADAMS      87/05/23
JAMES      81/12/03
FORD       81/12/03

ENAME      HIREDATE
---------- --------
MILLER     82/01/23


Q 25.
자주 사용이 되거나 검색이 되는 SQL구문이 있다면(앞으로 계속해서 사용이 될 것 같은 문장이 있다면) 파일로 저장해서 불러오기
4장 SQLPlus -> save 명령어 -> 효율성 up
형식)save '경로 포함해서 저장할 파일명'(~.sql or .txt)

SQL>save 'c:\webtest\2.db\print\datesearch.txt';
file c:\webtest\2.db\print\datesearch.txt(이)가 생성되었습니다.


Q 26.
sql구문이 저장된 파일(25번 문제)을 불러오는 방법
형식) get 경로 포함해서 불러올 파일명 or @경로포함해서 불러올 파일명

history 기능을 써서 확인 후 get -> @ 로 바꿔서 실습
get : 파일을 불러올 때 바로 실행하는 것이 아니라 실행시킬 SQL구문을 먼저 출력 시켜준다.
@ : 파일을 불러오면서 바로 그 파일의 내용대로 실행

SQL>get c:\webtest\2.db\print\datesearch.txt;
SQL>@ 'c:\webtest\2.db\print\datesearch.txt';


Q 27.
jsp 웹사이트 우편번호 검색 -> 회원가입(주문 -> 배송지) -> 동이름 -> 우편번호 뿐만 아니라 나머지 주소 -> **우편번호 open API를 사용한다.**

create table zipcode(
      zipcode char(7) not null,
      area1   char(10) null,
      area2   char(20) null,
      area3   char(40) null,
      area4  char(20) null);

SQL>@ c:\webtest\2.db\print\zipcode.txt;

commit을 하게 되면 rollback은 사용이 안됨(트랜잭션 명령어)


Q. 28
emp테이블 에서 사원명이 A자로 시작하는 사원을 찾아서 그 사원의 이름과 급여를 출력(like 연산자)
문자열 검색 : 
정확한 데이터를 알고 있을때
정확한 데이터를 모를때 : like 연산자
특징)
%, _ : 특수기호를 이용하여 검색(_ (글자 한 개 와 매치))
% : 찾는 문자열의 길이를 모를때 (2,3,4,)

김% = 김외, 김길수, 김수순...(김씨 성으로 시작하는 모든 사람 찾기)
김_ = 김외, 김수.... 김씨 성을 가지고 글자길이는 두글자인 사람 찾기
김__ = 김씨포함(세글자)
%수 = 수 로 끝나는 문자열을 찾기
%미아2동% = 찾는 문자열 중에 미아2동 이 들어가 있는 문자열 검색

SQL>select ename, sal from emp where ename like 'A%'; -> A로 시작하는 ename

ENAME             SAL
---------- ----------
ALLEN            1600
ADAMS            1100

SQL>select ename, job, sal from emp where ename not like 'A%'; -> A로 시작하지 않는 ename

ENAME      JOB              SAL
---------- --------- ----------
SMITH      CLERK            800
WARD       SALESMAN        1250
JONES      MANAGER         2975
MARTIN     SALESMAN        1250
BLAKE      MANAGER         2850
CLARK      MANAGER         2450
SCOTT      ANALYST         3000
KING       PRESIDENT       5000
TURNER     SALESMAN        1500
JAMES      CLERK            950
FORD       ANALYST         3000

ENAME      JOB              SAL
---------- --------- ----------
MILLER     CLERK           1300


Q 29. 
emp테이블 에서 급여가 1500 이거나 업무가Saleseman인 사원을 찾아서 그 사원의 이름, 업무, 급여 순으로SQL 출력
~where 조건식 or 조건식2 or ~ 
                  and          and
or : 둘 중의 하나만을 만족 할 때 결과 출력

SQL>select ename, job, sal from emp where sal >= 1500 or job = 'SALESMAN';

ENAME      JOB              SAL
---------- --------- ----------
ALLEN      SALESMAN        1600
JONES      MANAGER         2975
BLAKE      MANAGER         2850
CLARK      MANAGER         2450
SCOTT      ANALYST         3000
KING       PRESIDENT       5000
TURNER     SALESMAN        1500
FORD       ANALYST         3000

SQL>select ename,job,sal "saltest" from emp where sal=1500 or job='SALESMAN';

ENAME      JOB          saltest
---------- --------- ----------
ALLEN      SALESMAN        1600
WARD       SALESMAN        1250
MARTIN     SALESMAN        1250
TURNER     SALESMAN        1500

SQL>select ename,job,sal "saltest" from emp where sal=1500 and job='SALESMAN';

ENAME      JOB          saltest
---------- --------- ----------
TURNER     SALESMAN        1500


=>변경=>or->and(특정 단어를 변경?)
SQL plus명령어=>change,list 명령어를 이용
**********************************
편집=>편집할 내용이 많으면 ed를 이용=>편집창 이용
         단어중심으로 변경->change 명령어
**********************************

 =>바꿀단어가 있는 행을 지정
1)list or l 수정할 단어가 들어가 있는 행번호
2) c(hange)/변경전단어/변경후 단어
3) 변경된 내용대로 실행하라 / or r(un)

SQL>l 3

member테이블에서  id가 nup이고 passwd가 1234인 회원이 있는지 검색하는 SQL작성?

SQL>select id,passwd from member where id='nup' and passwd='1234';
SQL>select id,passwd from member where id='nup' and passwd='1234';


Q 30.
emp테이블의 사원의 이름중에서 두번째글자가 L자인 직원을 찾아서 그 직원의 이름,급여를 출력?
                            -------------------------------
                            like '_L%'

SQL>select ename, sal from emp where ename like '_L%';

ENAME             SAL
---------- ----------
ALLEN            1600
BLAKE            2850
CLARK            2450

SQL>select ename, sal from emp where ename not like '_L%'; -> 2번째 글자가 L이 아닌 경우

ENAME             SAL
---------- ----------
SMITH             800
WARD             1250
JONES            2975
MARTIN           1250
SCOTT            3000
KING             5000
TURNER           1500
ADAMS            1100
JAMES             950
FORD             3000
MILLER           1300


Q 31.
emp테이블 에서 사원번호가 7782, 7788, 7844인 사원을 검색해서 사원의 이름, 급여, 연봉을 출력(단 연봉 ->"total")

SQL>select empno, ename, sal, sal*12 total from emp where empno = 7782 or empno = 7788 or empno = 7844;

     EMPNO ENAME             SAL      TOTAL
---------- ---------- ---------- ----------
      7782 CLARK            2450      29400
      7788 SCOTT            3000      36000
      7844 TURNER           1500      18000

in : 여러 값 중 하나와 일치 하는 행을 찾는 연산자
형식) ~찾을 필드명 in(값)


SQL>select empno, ename, sal, sal*12 total from emp where empno in (7782, 7788, 7844);

     EMPNO ENAME             SAL      TOTAL
---------- ---------- ---------- ----------
      7782 CLARK            2450      29400
      7788 SCOTT            3000      36000
      7844 TURNER           1500      18000


SQL>select empno, ename, sal, sal*12 total from emp where empno not in (7782, 7788, 7844); -> in 값을 제외한 나머지

     EMPNO ENAME             SAL      TOTAL
---------- ---------- ---------- ----------
      7369 SMITH             800       9600
      7499 ALLEN            1600      19200
      7521 WARD             1250      15000
      7566 JONES            2975      35700
      7654 MARTIN           1250      15000
      7698 BLAKE            2850      34200
      7839 KING             5000      60000
      7876 ADAMS            1100      13200
      7900 JAMES             950      11400
      7902 FORD             3000      36000
      7934 MILLER           1300      15600


Q 32.
DB->null (값이 들어가 있지 않은 상태)->눈에 X
                  ' ' =>저장은 되는데 눈에 X (ex 공기)
null을 사용=>값이 들어가 있지 않은 상태의 필드를 검색할때 사용

SQL>select ename, sal, comm from emp where comm is null;  -> comm 값이 null(비어있는)인 직원을 찾기
        ==
ENAME             SAL       COMM
---------- ---------- ----------
SMITH             800
JONES            2975
BLAKE            2850
CLARK            2450
SCOTT            3000
KING             5000
ADAMS            1100
JAMES             950
FORD             3000
MILLER           1300

SQL>select ename, sal, comm from emp where comm is not null; -> 데이터 값이 들어있음

ENAME             SAL       COMM
---------- ---------- ----------
ALLEN            1600        300
WARD             1250        500
MARTIN           1250       1400
TURNER           1500          0


Q 33.
검색하는 중간에 중복된 데이터가 존재한다면 중복된 데이터를 한번만 출력하기
형식)distinct 중복필드, 성별 -> 중복된 데이터는 한번만

SQL>select distinct job from emp;

JOB
---------
CLERK
SALESMAN
PRESIDENT
MANAGER
ANALYST


Q 34.
emp테이블 에서 업무(job)이 PRESIDENT 이고(and) 급여가 1500 이상 이거나(or) 업무가 SALESMAN인 사원을 찾아서 
그 사원의 사번, 이름, 업무, 급여 순으로 출력하는 SQL 작성

 연산자 우선순위
 (  )
 연결연산자 ||
 관계연산자 >,>=,<,<=,    <>, !=, ^=
                                  같지 않다
 is [not] null,not like,not in
 not between
 not 논리연산자
 and연산자
 or연산자

and > or
and 가 or 보다 먼저 적용됨

SQL>select empno, ename, job, sal from emp where job = 'PRESIDENT' and sal >= 1500 or job = 'SALESMAN';

     EMPNO ENAME      JOB              SAL
---------- ---------- --------- ----------
      7499 ALLEN      SALESMAN        1600
      7521 WARD       SALESMAN        1250
      7654 MARTIN     SALESMAN        1250
      7839 KING       PRESIDENT       5000
      7844 TURNER     SALESMAN        1500


SQL>select empno, ename, job, sal from emp where job = 'SALESMAN' or job = 'PRESIDENT' and sal >= 1500;
      위 랑 결과 값음 같음 = and가 먼저 실행되기 때문에

SQL>select empno, ename, job, sal from emp where (job = 'SALESMAN' or job = 'PRESIDENT') and sal >= 1500;
      괄호가 먼저 실행 됨

     EMPNO ENAME      JOB              SAL
---------- ---------- --------- ----------
      7499 ALLEN      SALESMAN        1600
      7839 KING       PRESIDENT       5000
      7844 TURNER     SALESMAN        1500


Q 35.
emp테이블 에서 이름, 급여, 연봉 순으로 출력하되 고액 연봉자순으로 정렬하시오(=내림차순)

오름차순, 내림차순
형식)select 필드명 from 테이블명 where 조건식 order by 정렬하고자 하는 필드명, 필드명2 [정렬기준] default -> asc


ascending(asc 오름차순) decending(desc 내림차순)


SQL>select ename, sal, sal*12 total from emp order by total desc;

ENAME             SAL      TOTAL
---------- ---------- ----------
KING             5000      60000
FORD             3000      36000
SCOTT            3000      36000
JONES            2975      35700
BLAKE            2850      34200
CLARK            2450      29400
ALLEN            1600      19200
TURNER           1500      18000
MILLER           1300      15600
WARD             1250      15000
MARTIN           1250      15000

ENAME             SAL      TOTAL
---------- ---------- ----------
ADAMS            1100      13200
JAMES             950      11400
SMITH             800       9600


Q 36.
emp테이블 에서 먼저 급여가 많은순으로 정렬하되 만약에 sal가 같은 사원이 존재한다면 ename을 내림차순(z->a)으로 정렬하시오

다중정렬 = order by 필드명 asc, 필드명2 desc

SQL>select ename as "irum", sal, sal*12 total from emp order by sal desc, ename desc;

irum              SAL      TOTAL
---------- ---------- ----------
KING             5000      60000
SCOTT            3000      36000
FORD             3000      36000
JONES            2975      35700
BLAKE            2850      34200
CLARK            2450      29400
ALLEN            1600      19200
TURNER           1500      18000
MILLER           1300      15600
WARD             1250      15000
MARTIN           1250      15000

irum              SAL      TOTAL
---------- ---------- ----------
ADAMS            1100      13200
JAMES             950      11400
SMITH             800       9600


Q 37.
order by 특징 3가지
1. order by 뒤에 가상필드가 올 수 있다.
2. 다중정렬이 가능한데 순서는 default -> asc
3. select ~ from 에 나오는 필드 순서를 번호로 구분해서 정렬에 사용할 수 있다.(필드명 대신 나오는 순번으로 사용가능)

SQL>select ename as "irum", sal, sal*12 total from emp order by total desc,1 desc;
                    1                2          3

irum              SAL      TOTAL
---------- ---------- ----------
KING             5000      60000
SCOTT            3000      36000
FORD             3000      36000
JONES            2975      35700
BLAKE            2850      34200
CLARK            2450      29400
ALLEN            1600      19200
TURNER           1500      18000
MILLER           1300      15600
WARD             1250      15000
MARTIN           1250      15000

irum              SAL      TOTAL
---------- ---------- ----------
ADAMS            1100      13200
JAMES             950      11400
SMITH             800       9600

********************************************************************************
Q 38.
********************************************************************************
emp테이블 에서 부서번호가 10번인 사원을 찾아서 그 사원들의 사원이름, 급여, 부서번호 순으로 출력하되 급여가 많은순으로 정렬

파라미터 인수질의(query) 검색(=매개변수 질의 검색)

SQL>select ename, sal, deptno from emp where deptno = 10 order by sal desc;

ENAME             SAL     DEPTNO
---------- ---------- ----------
KING             5000         10
CLARK            2450         10
MILLER           1300         10


SQL>select ename, sal, deptno from emp where deptno = 20 order by sal desc;

ENAME             SAL     DEPTNO
---------- ---------- ----------
SCOTT            3000         20
FORD             3000         20
JONES            2975         20
ADAMS            1100         20
SMITH             800         20


SQL> select ename, sal, deptno from emp where deptno = &deptno order by sal desc; -> java에서는 ?로 표시(입력 받는다는 표시)
      -> &변수명(=필드명) ?
입력받을 부분을 변수명으로 출력
deptno의 값을 입력하시오:[ ]

***************************************************************
 자바로 표현한다면
  
select ename,sal,deptno
         from emp
          where deptno=?
         order by sal desc

  insert into member values(?,?,?,?,?,,,,);//java,jsp에서 사용
  ?=>입력받는 부분을 의미(input type="text")
***************************************************************


Q 39.
위 15번 문제를 save 명령어를 이용해서 저장

SQL>save c:\webtest\2.db\print\deptnosearch.txt
get or @c:\webtest\2.db\print\deptnosearch.txt


Q 40.
dual
= 계산을 한다든지(함수사용), 날짜를 출력, 기본적인 기능
형식) select 함수명() or 함수명(~) from dual;
SQL>select 24*23*13 from dual;

24*23*12
----------
      6624

오늘 날짜 출력 -> 회원가입 날짜 -> 내부적으로 자동으로 저장
sysdate <--> now() -> mysql에서의 함수

SQL>select sysdate from dual; -> 오늘 날짜 구하기

SYSDATE
--------
23/05/02


Q 41.
직원 14명중 사원의 이름의 길이가 5자이상인 직원을 검색해서 그 직원의 사번, 이름, 업무순으로 출력
형식)select 함수명(처리해야할 값), 함수명2(~) from 테이블명(dual, 검색대상 테이블) where 조건식 (함수(~))

SQL>select empno, lower(ename) as "소문자로 변환", upper(job) as 대문자로 from emp where length(ename) >= 5;

     EMPNO 소문자로   대문자로
---------- ---------- ---------
      7369 smith      CLERK
      7499 allen      SALESMAN
      7566 jones      MANAGER
      7654 martin     SALESMAN
      7698 blake      MANAGER
      7782 clark      MANAGER
      7788 scott      ANALYST
      7844 turner     SALESMAN
      7876 adams      CLERK
      7900 james      CLERK
      7934 miller     CLERK


Q 42.
사원검색 -> 사원이름이 전부 대분자 -> 소문자로 입력 -> 검색x
사원명, 급여, 보너스 출력

SQL>select ename, sal, comm from emp where ename = upper('&ename');

ename의 값을 입력하십시오: scott

ENAME             SAL       COMM
---------- ---------- ----------
SCOTT            3000


Q 43.
문자열 취급 -> 입력한 문자열의 길이
01234567 -> 문자열 취급 -> 인덱스 번호0
'oracletest'

문자열 취급 -> 오라클은 입력순서가 1부터 시작함
형식)substr(대상문자열, 시작위치(1부터), 뽑아낼 문자열 개수)

SQL>select substr('abcde',1,2) from dual;

SU
--
ab


SQL>select substr('abcde',2,3) from dual;

SUB
---
bcd


Q 44.
emp테이블 에서 사원 이름이 'K'보다 크고
'Y'자보다 적은 사원을 검색해서 찾은 사원의 사번, 이름, 업무순으로 출력(단 이름순으로 정렬)

initcap(문자열) -> 첫 글자만 대문자로 출력

SQL>select empno, ename, initcap(ename), job from emp where substr(ename, 1, 1) > 'K' and substr(ename, 1, 1) < 'Y';

     EMPNO ENAME      INITCAP(EN JOB
---------- ---------- ---------- ---------
      7369 SMITH      Smith      CLERK
      7521 WARD       Ward       SALESMAN
      7654 MARTIN     Martin     SALESMAN
      7788 SCOTT      Scott      ANALYST
      7844 TURNER     Turner     SALESMAN
      7934 MILLER     Miller     CLERK


Q 45.
문자열 검색중 특정문자의 위치를 알려주는 함수(index 번호)
형식)instr(대상 문자열, 찾고자 하는 문자열) -> 위치번호를 알려줌. 못찾으면 0을 리턴
-> indexOf()와 비슷 <->lastIndexOf

SQL>select ename, instr(ename, '0') from emp;

ENAME      INSTR(ENAME,'O')
---------- ----------------
SMITH                     0  =>못찾았다는 표시
ALLEN                     0
WARD                      0
JONES                     2 =>인덱스 번호 2번째에 찾은 문자있다.
MARTIN                    0
BLAKE                     0
CLARK                     0
SCOTT                     3=>3번째
KING                      0
TURNER                    0
ADAMS                     0

ENAME      INSTR(ENAME,'O')
---------- ----------------
JAMES                     0
FORD                      2
MILLER                    0


********************************************************************************
Q 46.
중첩함수 : 함수내부에서 또 다른 함수가 있는 형태(실행순서는 내부함수부터 실행)
********************************************************************************
형식) 함수명(함수명())

SQL>select ename, instr(ename, upper('o')) as ins from emp;

ENAME             INS
---------- ----------
SMITH               0
ALLEN               0
WARD                0
JONES               2
MARTIN              0
BLAKE               0
CLARK               0
SCOTT               3
KING                0
TURNER              0
ADAMS               0

ENAME             INS
---------- ----------
JAMES               0
FORD                2
MILLER              0

날짜 특정해당되는 부분을 출력
SQL>select substr(sysdate, 1, 2) from dual;


Q 47.
숫자함수 = 계산, 반올림, 내림

round() : 반올림 하는 함수
round(반올림할 함수, 반올림할 자릿수);

trunc() : 주어진 숫자를 지정된 자릿수까지 잘라낸 후 반환
trunc(주어진 숫자, 잘라낼 자릿수);

SQL>select round(4567.678), round(4567.678,0), round(4567.678,2), round(4567.678,-2) from dual;

ROUND(4567.678) ROUND(4567.678,0) ROUND(4567.678,2) ROUND(4567.678,-2)
--------------- ----------------- ----------------- ------------------
           4568              4568           4567.68               4600

SQL>select trunc(4567.678), trunc(4567.678,0), trunc(4567.678,2), trunc(4567.678,-2) from dual;

TRUNC(4567.678) TRUNC(4567.678,0) TRUNC(4567.678,2) TRUNC(4567.678,-2)
--------------- ----------------- ----------------- ------------------
           4567              4567           4567.67               4500


Q 48.
emp테이블 에서 20번 부서에 근무하는 사원의 급여앞에 $를 표시하고 3자리마다 , 를 표시해서 SQL 출력(사번, 이름, 급여, 출력서식)

SQL>select empno, deptno, ename, sal, to_char(sal, '$999,999') from emp where deptno = 20 order by sal desc;

     EMPNO     DEPTNO ENAME             SAL TO_CHAR(S
---------- ---------- ---------- ---------- ---------
      7788         20 SCOTT            3000    $3,000
      7902         20 FORD             3000    $3,000
      7566         20 JONES            2975    $2,975
      7876         20 ADAMS            1100    $1,100
      7369         20 SMITH             800      $800

SQL>select empno, deptno, ename, sal, to_char(sal, '$999,999') from emp where deptno = &deptno order by sal desc;
deptno의 값을 입력하십시오: 10
구   1:  select empno, deptno, ename, sal, to_char(sal, '$999,999') from emp where deptno = &deptno order by sal desc;
신   1:  select empno, deptno, ename, sal, to_char(sal, '$999,999') from emp where deptno = 10 order by sal desc;
0
     EMPNO     DEPTNO ENAME             SAL TO_CHAR(S
---------- ---------- ---------- ---------- ---------
      7839         10 KING             5000    $5,000
      7782         10 CLARK            2450    $2,450
      7934         10 MILLER           1300    $1,300


Q 49.
그룹함수 -> 통계처리함수
         null값 까지 포함O
총레코드 개수 = count(*) or count(필드명) : 필드에 들어가 있는 레코드수를 체크하는데 필드에 null은 배재(개수에 포함x)

SQL>select count(*) from zipcode;

COUNT(*)
--------
    42619

min(필드명) : 최소값, max(필드명) : 최대값, avg(필드명) : 평균값
sum(필드명 : 합계값

SQL>select count(*), trunc(avg(sal)), max(sal), min(sal), to_char(sum(sal), '$999,999') from emp;

  COUNT(*) TRUNC(AVG(SAL))   MAX(SAL)   MIN(SAL) TO_CHAR(S
---------- --------------- ---------- ---------- ---------
        14            2073       5000        800   $29,025


Q 50.
그룹함수의 성격
문제49번에 누가 얼마만큼 받는지 알고 싶다.

SQL>select ename, count(*), trunc(avg(sal)), max(sal), min(sal), to_char(sum(sal), '$999,999') from emp;

select ename, count(*), trunc(avg(sal)), max(sal), min(sal), to_char(sum(sal), '$999,999') from emp
        *
1행에 오류:
ORA-00937: 단일 그룹의 그룹 함수가 아닙니다

그룹함수의 특징 : 일반필드와 그룹함수는 같이 사용할 수 없다.
select ~ from 사이에 일반필드와 그룹함수는 같이 사용할 수 없다.

형식)
select
from
where
group by : 그룹을 지어줄 필드명(ex : ename)
order by

SQL>select ename, count(*), trunc(avg(sal)), max(sal), min(sal), to_char(sum(sal), '$999,999') from emp group by ename;

ENAME        COUNT(*) TRUNC(AVG(SAL))   MAX(SAL)   MIN(SAL) TO_CHAR(S
---------- ---------- --------------- ---------- ---------- ---------
ALLEN               1            1600       1600       1600    $1,600
JONES               1            2975       2975       2975    $2,975
FORD                1            3000       3000       3000    $3,000
CLARK               1            2450       2450       2450    $2,450
MILLER              1            1300       1300       1300    $1,300
SMITH               1             800        800        800      $800
WARD                1            1250       1250       1250    $1,250
MARTIN              1            1250       1250       1250    $1,250
SCOTT               1            3000       3000       3000    $3,000
TURNER              1            1500       1500       1500    $1,500
ADAMS               1            1100       1100       1100    $1,100

ENAME        COUNT(*) TRUNC(AVG(SAL))   MAX(SAL)   MIN(SAL) TO_CHAR(S
---------- ---------- --------------- ---------- ---------- ---------
BLAKE               1            2850       2850       2850    $2,850
KING                1            5000       5000       5000    $5,000
JAMES               1             950        950        950      $950


Q 51.
emp테이블 에서 급여가 3000 이상인 사원수를 구하기

SQL>select count(*) from emp where sal >= 3000;

  COUNT(*)
----------
         3

SQL>select ename, sal, count(*) from emp where sal >= 3000 group by ename, sal;


Q 52.
count(*), sum, min, max, avg = 숫자화된 데이터만 사용이 되는건 X, 날짜 문자 데이터도 같이 사용 O

SQL>select min(ename), max(ename), min(hiredate), max(hiredate), min(sal), max(sal) from emp;

MIN(ENAME) MAX(ENAME) MIN(HIRE MAX(HIRE   MIN(SAL)   MAX(SAL)
---------- ---------- -------- -------- ---------- ----------
ADAMS      WARD       80/12/17 87/05/23        800       5000

영문자(a ~ z) 범위 판단
첫번째 영문자가 같으면 두번째 로 판단
두번째도 같으면 세번째로 판단....~

min(hiredate) = 입사일이 가장 적다 = 가장 오래 장기근무자
max(hiredate) = 입사일이 가장 크다 = 가장 짧게한 근무자


Q 53.
부서별로 사원의 수가 4명 이상인 사원의 정보를 찾아서 출력하는 SQL작성
단 출력 순서는 부서번호, 급여의 합계순으로 출력

having : where 에 못쓰는곳에 사용되고 group by 와 함께 사용됨

SQL>select deptno as 부서, count(deptno) as 수, sum(sal) as 합계 from emp group by deptno having count(deptno) >= 4;

'국비학원 > 공부' 카테고리의 다른 글

11일차 oracle(4)  (0) 2023.05.04
10일차 oracle(3)  (1) 2023.05.04
8일차 oracle(1)  (0) 2023.05.04
7일차 jsp ~ oracle 설치  (1) 2023.05.04
6일차 jsp(미니 프로젝트)  (0) 2023.04.28