2일차 Oracle(2023-03-22)

권단비·2023년 3월 22일

https://wikidocs.net/134225

DDL(Create) : DML(Read Update Delete Select) = select

COMMIT은 내가 INSERT, UPDATE, DELETE 등 명령문을 수행한 내역을 COMMIT 시 실제 데이터베이스 내에 적용하는 것

[오라클 테이블 생성]

・테이블 값 조회

emp1 테이블로부터 * (전체)를 선택하라
select * from emp1;

・테이블 생성

create table emp1(
	empno NUMBER(4) default 1000 not null,
	ename VARCHAR2(10),
	job VARCHAR2(9),
	mgr NUMBER(4),
	hiredata date,
	sal NUMBER(7,2), -- 7자리의 가변 길이 정수와 2자리의 가변길이 소수
    comm NUMBER(7,2),
	deptno NUMBER(2)
);
desc emp1; -- 테이블의 정보를 설명
[desc emp1;]
이름       널?       유형           
-------- -------- ------------ 
EMPNO    NOT NULL NUMBER(4)    
ENAME             VARCHAR2(10) 
JOB               VARCHAR2(9)  
MGR               NUMBER(4)    
HIREDATA          DATE         
SAL               NUMBER(7,2)  
COMM              NUMBER(7,2)  
DEPTNO            NUMBER(2)   

・insert : 내용 삽입

insert into emp1 values(7839,'홍길동','매니저',1234,'1981/05/05',5000,null,10);
insert into emp1 values(7000,'홍길순','매니저',1234,'1981/05/05',5000,null,10);
insert into emp1 values(7000,'권단비','매니저',1234,'1981/05/05',5000,null,10);


・update : table의 특정값을 바꾸기

update table의 특정값을 바꾸기(전체)
update emp1 set sal = sal * 1.1;
update table의 특정값을 바꾸기(홍길순)
update emp1 set sal = sal * 1.1 where ename='홍길순';
부서번호가 10번인 사원의 부서번호를 30번으로 수정하시오.
update emp1 set deptno =30 where deptno=10;
job이 매니저인 사람을 사원으로 변경하시오.
update emp1 set job='사원' where job='매니저';
모든 입사일을 오늘로 수정하는 쿼리문
update emp1 set hiredata=SYSDATE;

・delete : 삭제

부서번호가 10번인 데이터를 삭제하시오.
delete from emp1 where deptno = 10;
이름이 홍길동인 사람을 삭제하시오.
delete from emp1 where ename='홍길동';
월급이 5500미만인 사원을 삭제하시오.
delete from emp1 where sal<5500;
drop table emp1; -- table 삭제

[SQL문을 이용하여 데이터 가져오기]

・% 와일드 카드

검색하고자 하는 값을 정확히 모를 경우 와일드 카드와 함께 사용할 수 있다.
%특정 문자가 포함되기만 하고 그 이전이나 이후에 어떤 문자가 몇 개가 오든지 상관없다는 의미를 표현하기 위해서는 LIKE 연산자와 
이름이 F로 시작하는 사람을 찾는 쿼리문
select * from emp where ename like 'F%';
위치 상관없이 이름 중에 A가 들어있는 사람을 찾는 쿼리문
select * from emp where ename like '%A%';
이름이 N으로 끝나는 사람을 찾는 쿼리문
select * from emp where ename like '%N';
이름의 두 번째 글자가 A인 사원을 찾는 쿼리문 ⇒ '_' 자릿수를 의미
select * from emp where ename like'_A%';
이름의 세 번째 글자가 A인 사원을 찾는 쿼리문
select * from emp where ename like'__A%';
이름에 A를 포함하지 않는 사람만 검색하는 쿼리문
select * from emp where ename not like'%A%';

・NULL을 위한 연산자

NULL의 의미 : 미확정. 알 수 없는 값을 의미한다. 고로 연산, 할당, 비교가 불가능하다.
select * from emp where comm IS null;

예)커미션(COMM)을 받지 않는 사원을 검색하는 쿼리문
select * from emp where comm is not null;
JAVA에서의 null
참조형에만 null 정의 가능
int a = null (x)
A a = null (o) → 주소가 들어가 있지 않은 것

A a = new A();
a = null → 주소 참조가 끊김 (메모리 회수해도 좋다.)

Oracle에서의 null
NULL의 의미 : 미확정. 알 수 없는 값을 의미한다. 고로 연산, 할당, 비교가 불가능하다.

・정렬을 위한 ORDER BY절

사원들의 급여를 오름차순으로 정렬하는 쿼리문
select * from emp ORDER BY sal asc;
사원들의 급여를 내림차순으로 정렬하는 쿼리문
select * from emp order by sal desc;
가장 최근에 입사한 사원부터 출력하는 쿼리문
select * from emp order by hiredate desc;
select * from emp order by empno asc;
이름순으로 출력하시오.
select * from emp order by ename asc;

・DISTINCT : 동일한 데이터 값들이 중복되어 출력되지 않도록 사용한다.

예)사원들이 소속되어 있는 부서의 번호를 출력하는 쿼리문
select DISTINCT deptno from emp;

예)사원들의 job 종류
select DISTINCT job from emp;

・AS : 열의 이름(별칭)을 정하는 쿼리문

예)사원들의 10% salay 인상한 결과값을 뽑아내시오.
select ename, (sal *1.1) as "연봉 인상" from emp;

・DUAL 테이블 : 한 행으로 결과를 출력하기 위한 테이블이다.

산술 연산이나 가상 컬럼 등의 값을 한번만 출력하고 싶을 때 많이 사용한다.
select 15*67 from dual;
select sysdate from dual;

・ 그룹함수

사원의 총급여를 구하는 쿼리문
select sum(sal) from emp;
사원의 총급여 평균을 구하는 쿼리문
select avg(sal) from emp;
사원의 급여 중 제일 큰 수를 구하는 쿼리문
select max(sal) from emp;
사원의 급여 중 제일 작은 수를 구하는 쿼리문
select min(sal) from emp;
총사원수
select count(*) from emp;
예)사원 테이블의 사원들 중에서 커미션(COMM)을 받은 사원의 수를 구하는 쿼리문
select count(comm) from emp;
잡종-잡수(중복x)
select count(DISTINCT job) from emp;
⊛정리
그룹함수란 하나의 행으로 출력된다.
그룹함수 종류 : max, min, avg, sum, count

count 함수 정리
count함수는 null값에 대한 갯수를 세지 않는다.
해당 컬럼에서 값을 갖고 있는 로우의 갯수를 반환한다.

MAX : 결과값을 1개로 나타내는 집합함수

SELECT MIN(sal), MAX(sal), COUNT(*) FROM emp;

having : 뒤에는 그룹함수
where : 단순칼럼

0개의 댓글