ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 210830_
    Oracle 2021. 8. 30. 15:09

     


    --emp테이블 전체조회...ctrl+enter는 한줄조회
    select * from emp;


    --emp테이블에서 급여가 작은사람부터 조회하되 ename,sal 만 조회
    select ename,sal from emp order by sal asc;--asc는 생략가능

    --emp테이블에서 급여가 큰사람부터 조회하되 ename,job,sal 만 조회
    select ename,job,sal from emp order by sal desc;

    --emp테이블에서 job만출력
    select job from emp;

    --emp테이블에서 job만출력(중복제거)
    select distinct job from emp;

    --alias 별칭주기_1
    select ename "직원명",job "부서" from emp;

    --alias 별칭주기_2("제거가능..공백없는경우)
    select ename 직원명,job 부서 from emp;

    --전체인원수
    select count(*) from emp;

    --전체인원수..컬럼명을 cnt로 나오게
    select count(*)cnt from emp;

    --조건..where절
    --emp에서 급여가 3000이상인 사람만 조회(ename,job,sal)
    select ename 사원명,job 부서,sal 급여 from emp where sal>=3000;

    --emp에서 급여가 2000~3000사이인 사람만 조회(ename,job,sal)..and
    select ename,job,sal from emp where sal>=2000 and sal<=3000;

    --emp에서 급여가 2000~3000사이인 사람만 조회(ename,job,sal)..between
    select ename,job,sal from emp where sal between 2000 and 3000;


    --emp에서 job이 개발,경영인 사람만 출력(ename,job,sal)
    select ename,job,sal from emp where job='개발'or job='경영';

    --emp에서 job이 개발,경영인 사람만 출력(ename,job,sal)..IN연산자
    select ename,job,sal from emp where job IN('개발','경영');

    --emp에서 IN을 이용해서 MGR이 0301,0202,1001 인데이타 출력(전체컬럼)
    select * from emp where Mgr IN(0301,0202,1001);

    --emp에서 comm이 Null인경우
    select * from emp where comm is Null;

    --emp에서 comm이 Null 이 아닌경우
    select * from emp where comm is Not Null;

    --ename이 이승철을 조회
    select * from emp where ename='이승철';

    --이로 시작하는 이름을 가진 데이타출력
    select * from emp where ename like '이%';

    --이 or 안 으로 시작하는 이름을 가진 데이타출력
    select * from emp where ename like '이%' or ename like '안%';
    --emp에서 job이 개발,경영인 사람만 출력(ename,job,sal)
    select ename,job,sal from emp where job='개발'or job='경영';

    --emp에서 job이 개발,경영인 사람만 출력(ename,job,sal)..IN연산자
    select ename,job,sal from emp where job IN('개발','경영');

    --emp에서 IN을 이용해서 MGR이 0301,0202,1001 인데이타 출력(전체컬럼)
    select * from emp where Mgr IN(0301,0202,1001);

    --emp에서 comm이 Null인경우
    select * from emp where comm is Null;

    --emp에서 comm이 Null 이 아닌경우
    select * from emp where comm is Not Null;

    --ename이 이승철을 조회
    select * from emp where ename='이승철';

    --이로 시작하는 이름을 가진 데이타출력
    select * from emp where ename like '이%';

    --이 or 안 으로 시작하는 이름을 가진 데이타출력
    select * from emp where ename like '이%' or ename like '안%';

    --course에서 cname에 화학이 들어가는 cname 출력
    select cname from course where cname like '%화학%';

    —emp에서 이름의 두번째가 영 인 사람 출력
    select * from emp where ename like ‘_영&;

    —emp에서 이름의 세번째가 찬 인 사람 출력
    select * from emp where ename like ‘__찬%’;

    -emp에서 comm이 있는 사람중에서 sal이 1500이상인 사람 출력
    Select * from emp where comm is not null and sal>=1500;


    --emp에서 comm과 sal을 더해서 합계컬럼 만들기
    select sal 급여,comm 보너스,sal+comm 총급여 from emp;
    --comm이 null인곳은 총급여도 null 이므로 comm이 null인곳 0으로 만들기

    --NVL함수
    --Null값을 다른 값으로 변환해서 출력
    --오라클:NVL / mysql:INFULL
    --전환되는 값의 데이터 타입을 일치시켜야 한다

    --dno가 30인 사원 출력하는데 comm이 없는 사원 0으로 바꾸기
    select eno,NVL(comm,0) from emp where dno=30;

    --emp에서 급여,커미션으로 표시하고 총합 구하기..null은 0으로 
    select sal 급여,NVL(comm,0) 커미션,sal+NVL(comm,0) 총합 from emp;

    --원하는 컬럼만 출력..표현식 alias 주기 (띄어쓰기 별칭 줄거면 "" 사용)
    select ename "지금 실습중" from emp;

    --연결연산자 || ..컬럼 뒤에 나타내는 것
    --ename 님은 job 부서 입니다
    select ename || ' 님은 ' || job || ' 부서 입니다' from emp;

    select pname || ' 님은 ' || orders || ' 입니다' from professor;

    select pname || ' 님은 ' || section || '과 ' || orders || ' 입니다' from professor;

     

    ---------------------------------------

     


    --Q1.emp 에서 10번 부서에 근무하는 사람의 사원명 급여와 부서번호를 출력하시오
    select ename 사원명,sal 급여, mgr 부서번호 from emp where dno in 10;
    --Q2.emp테이블에서 급여가 4000보다 큰사람의 이름과 급여를 출력하시오
    select ename 이름,sal 급여 from emp where sal>=4000;
    --Q3.emp에서 이름이 이승철인 사람의 이름과 사원번호 급여를 출력하시오
    select ename 이름, eno 사원번호 from emp where ename='이승철';
    --Q4.gogak테이블에서 point가 500000보다 크거나 같은사람을 출력하시오 (비교연산자)
    select gname 이름 from gogak where point>=500000; 
    --Q5.gogak테이블에서 point가 500000~700000 인 사람의 이름과 포인트를 출력하시오(Between연산자)
    select gname,point from gogak where point between 500000 and 700000;
    --Q6.professor에서 물리학과이면서 정교수인 사람의, 교수명, 학과,작위를 출력하시오
    select pname 교수명, section 학과,orders 작위 from professor where section='물리' and orders='정교수';
    --Q7.gogakr에서 포인트가 900000이상인 사람의 이름,주민번호,포인트
    select gname 이름,jumin 주민번호, point 포인트 from gogak where point>=900000;
    --Q8.dept에서 지역이 서울인 곳의 부서명과 지역 출력
    select dname 부서명, loc 지역 from dept where loc='서울';
    --Q9.emp에서 개발부의 급여,보너스,연봉(sal*12+comm) 출력
    select sal 급여, NVL(comm,0) 보너스, sal*12+NVL(comm,0) 연봉 from emp where job='개발';
    --Q10.emp에서 성이 이씨이고 개발부인 사원의 사원명, 부서 출력
    select ename 사원명, job 부서 from emp where ename like '이%' and job='개발';

     

    ---------------------------------------

    --insert : 행 추가
    --sysdate : 현재 날짜
    --varchar2(n) : string 역할
    --primary key는 not null+unique(유일성)

    --test 테이블 생성
    create table test(num number(5) primary key, name varchar2(20), score number(6,2), birth date);

    desc test;

    --test테이블에 전체 데이터 insert 해보기
    insert into test values(5,'강호동',77.77,sysdate);

    --test테이블에 일부 데이터 insert 해보기
    insert into test (num,name)values(7,'박명수');

    commit;  --developer에서는 반드시 commit으로 저장처리
    rollback;  --commit하기 이전값으로 되돌릴 수 있다

    --전체 test 데이터 조회
    select * from test;

    --일부 컬럼만 조회
    select num,name from test;

    --alter : 구조 변경

    --주소를 저장할 컬럼 추가..초기값은 무조건 null이 됨
    alter table test add addr varchar2(30);

    --직업 job을 컬럼 추가.. 초기값을 교사로 지정(아닐 때는 insert로 따로 지정)
    alter table test add job varchar(20) default '교사';

    --쓰다보다 주소 자리(30)가 모자를 때 문자타입 30에서 50으로 수정
    alter table test modify addr varchar2(50);

    --table 구조 확인
    desc test;

    --나이를 저장할 컬럼 추가, 초기값은 무조건 null로 지정
    alter table test add age varchar(3);

    --age타입을 varchar2(가10)으로 변경, 초기값을 10으로 지정
    alter table test modify age varchar2(10) default '10';

    --추가
    insert into test(num,name,addr,age)values(6,'노홍철','서울시 광진구 구의3동','21세');

    insert into test(num,name,addr)values(8,'마이클','서울시 영등포구 여의도동');

    --num의 오름차순으로 출력..asc
    select * from test order by num;
    select * from test order by num asc;

    --name의 내림차순으로 출력..desc
    select * from test order by name desc; 

    --drop은 구조적인 삭제, delete은 내용 삭제
    --age 컬럼 삭제
    alter table test drop column age;

    --addr 컬럼 삭제
    alter table test drop column addr;

    --birth를 birthday로 수정
    alter table test rename column birth to birhtday;

    --테이블 삭제
    drop table test;
    --rollback 안됨

    'Oracle' 카테고리의 다른 글

    210831_서브쿼리  (0) 2021.08.31
    210831_to char  (0) 2021.08.31
    210831_그룹함수  (0) 2021.08.31
    210831_sequence  (0) 2021.08.31
    error  (0) 2021.08.25

    댓글

Designed by Tistory.