반응형

Oracle 기본 -3


1.GROUP BY

특정 그룹(컬럼)으로 묶어 GROUP 함수와 같이 사용해서 

합계(SUM), 평균(AVG), 최대(MAX), 최소(MIN), 갯수(COUNT) 값들을 구해줌

그러므로 SELECT 뒤에는 기준컬럼 하나만 쓰고 나머지는 GROUP 함수들을 써줌


-- 문법 양식

SELECT 기준컬럼

FROM 테이블

GROUP BY 기준컬럼;



-- SELECT 뒤의 컬럼과 GROUP BY의 기준컬럼이 일치해야됨;






2.GROUP 함수


문법 양식

SELECT 기준컬럼, AVG(적용할 컬럼), MIN(적용할 컬럼), MAX(적용할 컬럼)

FROM 테이블

GROUP BY 기준컬럼;


AVG(적용할 컬럼)



MIN(적용할 컬럼), MAX(적용할 컬럼)



 

SUM(적용할 컬럼) , COUNT(적용할 컬럼)














3.HAVING

GROUP BY 기준컬럼이나 GROUP함수에 조건을 줄때 즉, 사용 결과에 필터링 해주는 역할



SELECT 기준컬럼, AVG(적용할 컬럼), MIN(적용할 컬럼), MAX(적용할 컬럼)

FROM 테이블

GROUP BY 기준컬럼

HAVING 조건절;





평균 연봉 2000이상 출력




평균연봉 2000이상 3000이하





직무가 매니저, 이미 직무 별로 묶어놨으므로 ROW는 하나만 나옴







반응형
반응형

Oracle 기본 -2 create,update,delete,drop




1.create

-- 테이블 만들기


create table 테이블명   

(

      1번째컬럼명 자료형(사이즈) 속성,

  2번째컬럼명 자료형(사이즈) 속성

);




오라클 자료형(datatype)


문자형

데이터유형

정의

 최대사이즈

CHAR

고정 길이 데이터 타입,나머지 공간이 공백으로 채워짐

2000byte

  NCHAR

고정 길이 유니코드 데이터 타입  

VARCHAR2

가변 길이 데이터 타입, 나머지 공간은 채우지 않음

4000byte

NVARCHAR2

가변길이 유니코드 데이터 타입

 LONG

가변길이 데이터 타입 

 2Gbyte

 CLOB

대용량 텍스트 데이터 타입 

 4Gbyte

 NCLOB

 대용량 텍스트 유니코드 데이터 타입




숫자형

 데이터유형

정의 

최대사이즈 

BINARY_FLOAT 

부동 소수형 데이터 타입, 32bit 부동소수

 4byte

BINARY_DOUBLE

 부동 소수형 데이터 타입, 64bit 부동소수

 8byte

 NUMBER(P,S)

P,S로 표현 숫자 데이터 타입, P(유효자리수):1~38  S(소수점 유효자리): -84~127

 22byte



날짜형

데이터 유형 

정의 

DATE

고정 길이 날짜 

 INTERVER_YEAR

 날짜(년도,월)형태의 기간 표현 데이터 타입()

INTERVER_DAY

날짜 및 시간(요일, 시, 분 초)형태의 기간 표현 데이터 타입 

 TIMESTAMP

밀리초(ms)까지 표현 데이터 타입 

 TIMESTAMP_WITH TIME ZONE

날짜 및 시간대 형태의 데이터 타입 

 TIMESTAMP_WITH LOCAL TIME ZONE

 저장시 데이터베이스 시간대를 준수, 조회시 조회하는 클라이언트 시간 표현 데이터 타입





이진형

데이터 유형 

정의 

최대사이즈 

 RAW

 가변 길이 이진 데이터 타입

 2Gbyte

 LONGRAW

4Gbyte 

 BLOB

대용량의 바이너리 데이터를 저장하기 위한 데이터 타입 

 BFILE

 대용량의 바이너리 데이터를 파일형태로 저장하기 위한 데이터 타입



ex)

memberinfo 라는 이름으로 ID,Password,가입날짜 를 기록할 table을 작성하시오


create table memberinfo(

 id varchar2(20) primary key, 

password varchar2(20) not null,

joindate date default sysdate  

); 


-- not null : 공백 입력 금지

-- primary key : 한테이블에서 오직 한개의 컬럼만 가질수 있는 속성,

-- default : 특별한 값이 없을때 기본값

-- sysdate : insert 할때의 날짜와 시간을 가져옴

-- default sysdate : 기본값으로 insert할때의 날짜와 시간으로 지정



2.insert

--테이블에 row 입력하기

두가지 방식이 존재하는데 

첫번째는 컬럼순서대로 넣고 싶을때 사용


insert into 테이블명 values(

'첫번째컬럼에들어갈리터럴',

'두번째컬럼에들어갈리터럴',

default);  -- 만약 그냥 기본값을 넣고 싶다면 작은 따옴표 안붙이고 default 만 입력해주면 됨




두번째 방법은 컬럼 순서를 바꿔서 넣고 싶을때 사용한다 또한 default 속성이 붙은 컬럼은 

자동으로 입력된다는 장점이 있다


insert into 테이블명(컬럼2,컬럼1) 

values('컬럼2에들어갈리터럴','컬럼1에들어갈리터럴');






3.update

-- 테이블의 row 특정 column literal수정하기

update 테이블 

set 컬럼 = '리터럴'

where 조건;



ex)


update memberinfo 

set id = 'csc'

where id = '아이디임';







4.delete

--테이블의 특정 row를 삭제하거나 모든 row를 삭제한다(컬럼은 남아있음)


delete 테이블명 

where 컬럼명 = '리터럴';


해당 테이블의 where 조건에 해당하는 row만 삭제한다




delete 테이블명;


해당 테이블의 모든 row를 삭제한다


ex)

delete memberinfo

where id = 'csc';


delete memberinfo;



5.drop

--테이블 전체를 삭제한다(컬럼포함)




drop table 테이블명;




그외 중요한 SQL 문들


commit; 

-- 완전저장, drop table 하거나 delete table 했다면 commit 하지 않는한

flashback 과 rollback으로 복원 가능하다 commit 했다면 불가능



rollback; 

-- 이전 커밋 시점으로 되돌린다,delete한걸 취소 시킬수 있다



flashback;

-- Table 뿐만 아니라 DATABASE전체를  과거의 특정 시점으로 되돌린다

drop table 한걸 복원 시킬 수 있다.


반응형
반응형

Oracle 기본 -1

1.DESC


2.select


3.distinct 


4.where


5.오라클 숫자함수

(ROUND, TRUNC, MOD)





1.DESC  

테이블 구조를 파악할 수 있음, 컬럼별 속성이 나옴


ex)

DESC employees; --특정 테이블에 어떤 칼럼이 있는지 조회





2.select 

컬럼들을 조회할 수 있다.


--select [컬럼명 또는 표현식] from [테이블명 또는 뷰 명];


ex)직원 아이디랑 email를 검색할때

select employee_id,email from employees;








--리터럴 문자

select 'very Good' -←리터럴 을 나타낼때 '' 작은 따옴표를 씀 큰따옴표는 쓰지않음

from employees;


ex)

select employee_id,first_name,'very Good' from employees;








--출력할때 나오는 컬럼명을 임시적인 별명으로 나오게 할 수 있음 



ex)

select employee_id "직원명" , first_name as "성" --select 컬럼명 "출력할때컬럼명"

from employees;












--연결 연산자

컬럼들을 붙여서 보여준다

select first_name || last_name from employees;  

-- ||을 기준선으로 해서 합쳐서 보여주기


ex)

select first_name ||' '|| last_name from employees;










3.distinct 

--중복된 값을 제거하고 출력하기


ex)

select distinct department_id from employees;









4.where

where 컬럼명 = 값;

을 통해서 조건문을 만들고 

그조건에 해당하는 row를 찾을 수 있다


ex)

select first_name ||' '||last_name "성명",department_id  --컬럼명

from employees   --테이블

where department_id = 90; --원하는 조건







ex)
salary 값이 15000보다 큰사람들의 first name과 salary를  출력하시오


select first_name , salary  

from employees  

where salary > 15000; 









ex)

department_id 가 10인 사람의 

first_name, 연봉(salary), 월급(연봉/12),department_id 들을 출력하시오 



select first_name "성", salary "연봉", round(salary/12) "월급",department_id "부서 ID"

from employees

where department_id = 10;











ex)

salary가 14000에서 17000사이인 사람들의 first_name과 salary를 출력하시오



select first_name, salary

from employees

where salary between 14000 and 17000;







ex)

first_name이 Neena, Lex, John에 해당하는 사람들의 성명과 연봉을 출력하시오


select first_name, last_name, salary

from employees

where first_name IN ('Neena','Lex','John'); 





ex)

--first_name이 L로 시작하는 사람들의 성명과 연봉 을 출력하시오


select first_name ||' '|| last_name, salary

from employees

where first_name like 'L%' ;    


 ex)

--first_name이 L로 시작하고 last_name이 Po로 시작하는 

사람들의 성명과 연봉 을 출력하시오

select first_name ||' '|| last_name, salary

from employees

where first_name like 'L%' and last_name like 'Po__';     




ex)

--연봉이 10000보다 크고 Department_id가 90 인

 사람들의 first_name, salary,department_id,hire_date 들을  

salary를 기준으로 오름차순으로 정렬해서 출력하시오


select first_name , salary , department_id , hire_date

from employees

where salary > 10000

and department_id = 90;


order by salary ;      --  salary를 기준으로오름차순으로 정렬(ASC)

order by salary DESC; --  내림차순,DESC, 기본값이 아니라서 명시적으로 써줘야됨




ex)

--연봉이 10000보다 크고 Department_id가 90 보다 큰 사람들의 

first_name, salary,department_id,hire_date 들을  

연봉은 높은순(내림차순)으로, 입사일자 기준으로 오래된 순(오름차순)으로  

정렬해서 출력하시오




-- order by 기준을 2개로 맞춰 놓을 수도 있다

select first_name , salary , department_id , to_char(HIRE_DATE,'YYYY-MM-DD')

from employees

where salary > 10000

order by salary DESC , HIRE_DATE ASC; 

--  salary 기준으로 DESC(내림차순), hire_date 기준으로 ASC(오름차순) 













5.오라클 숫자함수

(ROUND, TRUNC, MOD)


ROUND 함수는 지정한 자리수 이하에서 반올림 한 결과를 구해주는 함수이다

즉 지정한 자리수까지만 남도록 

다음 자리수에서 반올림 해준다는 뜻이다


round(number속성을 가진 컬럼,반올림자리수)


ex)

select round(12.3456789) "round일의자리까지"  -- 기본값 일의 자리까지 

,round(12.3456789,1) "round소수첫째자리까지"  -- 소수 첫째자리까지

,round(12.3456789,2) "round소수둘째자리까지"-- 소수 둘째자리까지

,round(12.3456789,3) "round소수셋째자리까지"-- 소수 셋째자리까지

,round(12.3456789,4) "round소수넷째자리까지" from dual; -- 소수 넷째자리까지







TRUNC함수는 지정한 자리 수 이하를 버린 결과를 구해주는 함수이다

즉 지정한 자리수까지만 남도록 다음 자리수는 버림을 한다는 거다

ex)

select trunc(12.3456789) "trunc일의자리까지"  -- 기본값 일의 자리까지 남기고 버림

,trunc(12.3456789,1) "trunc소수첫째자리까지"  -- 소수 첫째자까지 남기고 버림지

,trunc(12.3456789,2) "trunc소수둘째자리까지"-- 소수 둘째자리까지 남기고 버림

,trunc(12.3456789,3) "trunc소수셋째자리까지"-- 소수 셋째자리까지 남기고 버림

,trunc(12.3456789,4) "trunc소수넷째자리까지" from dual; -- 소수 넷째자리까지 남기고 버림





MOD함수는 modulus 의 약자로 나누기 연산을 한후에 나머지를 구해주는 함수이다 

( 프로그래밍에서 '%' 연산자와 같음)

mod(x,y) 는 x%y 와 같다 즉 x를 y로 나눈 나머지를 말한다

ex)

select mod(3,1) "3 mod 1 == 3%1"  -- 3을 1로 나눈 나머지 

,mod(3,3) " 3 mod 3 == 3%3"  -- 3을 3으로 나눈 나머지

,mod(9,3) "9 mod 3 == 9%3" -- 9를 3으로 나눈 나머지

,mod(10,3) "10 mod 3 == 10%3" -- 10을 3으로 나눈 나머지 

,mod(7,3) "7 mod 3 == 7%3" from dual; -- 7를 3으로 나눈 나머지













반응형

'DB' 카테고리의 다른 글

Oracle 기본 -3 GROUP BY, GROUP 함수 , HAVING  (0) 2018.05.13
Oracle 기본 -2 create,insert,update,delete,drop  (0) 2018.03.22

+ Recent posts