-
--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