Oracle 숫자,날짜,자료형 변환 함수 정리
2018-11-27 00:00:00 +0000숫자 함수
- ROUND(숫자,반올림위치)
 - 숫자를 반올림 위치에서 반올림
 - SELECT ROUND(10.12324,2) FROM DUAL;
 - 결과 10.12
 - TRUNC(숫자,버림위치)
 - 숫자 반올림을 버림위치에서 무조건 버림
 - SELECT TRUNC(10.1777,3) FROM DUAL;
 - 결과 10.177
 - CEIL(숫자)
 - 정한 숫자에서 큰 정수를 반환
 - SELECT CEIL(3.14) FROM DUAL;
 - 결과 4
 - FLOOR(숫자)
 - 지정한 숫자에서 작은 정수를 반환
 - SELECT FLOOR(3.14) FROM DUAL;
 - 결과 3
 - MOD(나눗셈 될 숫자, 나눌 숫자)
 - 나머지 숫자를 구하는 함수
 - SELECT MOD(10, 3) FROM DUAL;
 - 결과 1
 
날짜 함수
- SYSDATE
 - 현재 날짜를 반환하는 함수
 - SELECT SYSDATE FROM DUAL;
 - 결과 18/11/27
 - ADD_MONTHS(SYSDATE, 더할개월)
 - 몇 개월 이후의 날짜를 반환하는 함수
 - SELECT ADD_MONTHS(SYSDATE,3) FROM DUAL;
 - 결과 19/02/27
 - MONTHS_BETWEEN(날짜 데이터1,날짜데이터2)
 - 두 달간 날짜 차이를 구하는 함수
 - SELECT ROUND(MONTHS_BETWEEN(‘2018-11-27’, ‘2019-02-28’),2) FROM DUAL;
 - 결과 -3.03
 
자료형 반환
- 형변환을 사용하면 숫자 데이터<->문자 데이터<->날짜 데이터 끼리 변환이 가능하다
 - TO_CHAR(날짜나 문자,문자형태)
 - 날짜OR문자를 자신이 원하는 형태로 반환하는 함수
 - SELECT TO_CHAR(SYSDATE, ‘YYYY/MM/DD HH24:MI:SS’) FROM DUAL;
 - 결과 2018/11/27 18:55:58
 - TO_NUMBER(문자,변환 숫자형태)
 - 문자데이터를 숫자 형태로 반환하는 함수
 - SELECT TO_NUMBER(‘5,000’, ‘999,999’) FROM DUAL;
 - 결과 5000
 - TO_DATE(문자,인식될 날짜형태)
 - 문자 데이터를 날짜 데이터로 변환하는 함수
 - SELECT TO_DATE(‘20181127’, ‘yyyy-mm-dd’) FROM DUAL;
 - 결과 18/11/27
 
NULL 처리 함수
- NVL(NULL검사 데이터 OR 열, NULL 대체 문자)
 - NULL일 경우 대체문자로 변경한다
 
Oracle 제약조건 정리
2018-11-27 00:00:00 +0000제약조건
- 데이터를 추가, 삭제, 수정하는 가운데 DB의 무결성을 유지
 - 무결성이란 DB 데이터가 정확하고 기본 규칙을 지킨다는 뜻이다
 
| 종류 | 설명 | 
|---|---|
| NOT NULL | NULL의 저장을 허용하지 않는다(반드시 값이 존재해야 됨), 중복여부와는 상관없다 | 
| UNIQUE | 해당 컬럼에서 중복 데이터를 허용하지 않는다, NULL은 중복 대상에서 제외 | 
| PRIMARY KEY | UNIQUE + NOT NULL 제약조건을 전부 가짐, 중복 데이터 허용X NULL 허용X, 자동으로 인덱스 생성됨 | 
| FOREIGN KEY | 서로 다른 테이블 간 관계를 정의 함 | 
| CHECK | 열에 저장할 수 있는 값의 범위, 패턴을 정의할 수 있음 | 
| DEFAULT | 특정 열에 저장할 값이 지정되지 않았을 경우에 기본값을 지정 | 
컬럼 레벨 제약 조건
- 컬럼을 생성할 때 데이터 타입 옆에 제약조건을 적는다
 
CREATE TABLE NAME(
ID VARCHAR(20) NOT NULL
);
테이블 레벨 방식
- 테이블 칼럼 을 전부 선언 후 제약조건을 나중에 선언하는 것
 
CREATE TABLE NAME(
PLAYER_ID VARCHAR(20) NOT NULL
CONSTRAINT 제약조건 이름 FOREIGN KEY(컬럼명)
                        REFERENCES 테이블(컬럼명)
);
테이블 수정 방식
- 테이블을 생성한 후 제약조건을 ALTER 수정하듯이 추가하는 것
 
CREATE TABLE NAME(
ID NUMBER,
PASS NUMBER
);
ALTER TABLE 테이블이름 ADD CONSTRAINT 제약조건 이름 PRIMARY KEY(컬럼 이름)
Oracle 기초 쿼리 정리
2018-11-26 00:00:00 +0000Database
- 서로 연관성을 가지며, 중복 없이 지속성으로 유지 관리해야 할 융용한 데이터들의 집합
 - 데이터 저장을 위한 가장 원시적인 방법으로 데이터 파일 사용
 - 데이터 파일 사용 시 중복 된 데이터 저장
 - 대용량의 데이터를 관리하기 힘듬, 보안의 취약
 - 파일의 단점으로 인해 Database 사용
 
DBMS란
- 데이터베이스 관리 시스템
 - 대용량의 데이터를 쉽게 저장하고 효율적으로 검색, 수정,삭제 할 수 있는 환경을 제공해 주는 소프트웨어 Oracle SQL Develop 설치
 
Oracle 실행
- cmd 창 열어서 sqlplus/nolog 명령어 사용
 - conn sys as sysdba명령어 치고 비밀번호를 치면 sql에 접속이 가능하다
 
user 생성 및 로그인
- user 생성
 
create user kosta192 identified by 1234;
- user 권한 전달
 
grant connect, resource, dba to kosta192;
- user 로그인
 
conn id/pass
- 파일가져오기
 - cmd창에서 SQL 접속한 후 해당 sql파일 위치를 적고 엔터치면 프로시저가 실행된다
 
hr계정 unlock
conn / as sysdba
alter user hr identified by hr account unlock;
conn hr/hr
select * from tab;
scott계정 불러오기
conn system/1234
@C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\scott.sql
alter user scott identified by tiger;
conn scott/tiger
select * from tab;
테이블 조회
- select * from table name;
 - 테이블 구조 불러오기
 - DESC 테이블 이름
 - 별칭은 AS
 - 아래 예제는 LAST_NAME 컬럼 이름을 ‘성’으로 변경해서 출력한다
 
SELECT EMPLOYEE_ID AS 사원번호, LAST_NAME AS "성" FROM employees
중복된 데이터 제거
- DUSTINCT
 
SELECT DISTINCT job_id From employees;
정렬 묶음 검색
- ORDER BY 절 사용
 - 기준 필드를 내림차순 하고 싶다면 필드명 뒤에 DESC를 쓴다
 
SELECT eno, ename, sal from emp ORDER BY sal DESC
조건에 맞는 일부데이터 불러오기
- AND : 조건 두개 다 만족하는지 체크
 
select * from employees WHERE SALARY > 5000 AND SALARY < 10000
- BETWEEN AND : BETWEEN 과 AND 사이 값에 들어가는지 체크
 
select * from employees WHERE salary BETWEEN 5000 AND 10000
- OR 연산자 : 조건이 2개 일 때 하나라도 일치하는지 체크
 
select employee_id, last_name, job_id from employees where job_id='FI_MGR' OR job_id = 'FI_ACCOUNT';
- IN 연산자 : 조건이 두개일 때 체크. 둘 중 하나인지 체크
 - 조건 연산자의 반복적인 작업들을 덜어줌
 
select employee_id, last_name, job_id from employees where job_id in('FI_MGR', 'FI_ACCOUNT')
- NOT 연산자 : 제외한다는 의미
 - NOT을 사용하거나 <>,!= 기호 사용
 
SELECT department_id, department_name from departments where not department_id = 10;
SELECT department_id, department_name from departments where not department_id <> 10;
- IS NOT NULLL : NULL이 아닌지 체크
 - NULL이 아닌 값만 출력
    
SELECT * FROM employees where commission_pct is not nullLIKE 연산자
 - ‘김%’ ‘김’으로 시작하는 모든 문자열 예)김길동, 김박사, 김밥
 - ‘%과’ ‘과’로 끝나는 모든 문자열 예)화학과, 인산과
 - ‘%김%’ ‘김’이라는 문자를 포함하는 모든 문자열 예) 김씨, 돌김, 삼각김밥볶음밥
 - ‘화_’ ‘화’로 시작하는 2글자 문자열 예) 화약, 화분
 - ‘등’ ‘등’이 가운데 들어간 3글자 문자열 예)고등어, 영등포
 
그룹함수
- sum(), avg(), max(), count()
 - select sum(salary) from employees;
 
GROUP BY
- GROUP BY절을 사용한 컬럼 단위로 묶어서 출력한다
 - group by절에서 언급한 컬럼만 사용할 수 있다
 
SELECT department_id, avg(salary) from employees group by department_id
having절
- group by로 나온 group 에 또 조건을 걸고 싶을 때 사용
 - 부서별 급여 평균이 5000 미만의 부서의 내역을 검색하라
    
select department_id, AVG(salary) from departments group by departement_id having avg(salary) < 5000 
문제2775
2018-11-26 00:00:00 +0000문제
https://www.acmicpc.net/problem/2775
풀이
층과 호수가 있는 아파트를 2차원로 볼 수 있다
0층에는 i호는 i명이 살도록 저장하고
1층에는 아랫층(k - 1)의 1호(index 0)에서 n호수까지 값을 더하면
현재 k층, n호의 사람수를 구할 수 있다
층, 호 입력은 14층 까지 받으므로 15x15로 만들어야 한다
Source
import java.util.Scanner;
public class Main {
     final static int MAX_ROW = 15;       //층
     final static int MAX_COL = 15;        //호
     static int[][] arr = new int[MAX_ROW][];
     public static void main(String[] args) {
           
           for(int row = 0; row < MAX_ROW; ++row)      //  배열초기화
                arr[row] = new int[MAX_COL];
                
           for(int row = 1; row < MAX_ROW; ++row)      // 1층  정보만 넣어주기
                arr[0][row] = row;
           
           for(int row = 1; row < MAX_ROW; ++row)      //  값넣어주기, 층
                for(int col = 1; col < MAX_ROW; ++col)// 호
                      for(int i = 0; i <= col; ++i)         //  처음~계산하는 호수 까지 값 계속 더하기
                           arr[row][col] += arr[row-1][i];
           
           Scanner sc = new Scanner(System.in);
           final int roop = sc.nextInt();
           
           int[][] test = new int[roop][];             // k, n 값  저장
           
           for(int i = 0; i < roop; ++i){
                test[i] = new int[2];
                test[i][0] = sc.nextInt();            // 층
                test[i][1] = sc.nextInt();            // 호
           }
     
           for(int i = 0; i < roop; ++i){
                int k = test[i][0];
                int n = test[i][1];
                System.out.println(arr[k][n]);
           }
     }
}
재귀함수로 각 사람인원 수 저장하는 소스
import java.util.Scanner;
public class Main {
	final static int MAX_ROW = 15; // 층 유저가 14층. 14호를 입력할 수 있으므로 15x15로 생성해야한다
	final static int MAX_COL = 15; // 호
	static int[][] arr = new int[MAX_ROW][];
	public static int GetValue(int col, int row, int index, int sum) {
		if (col + 1 == index) {
			return sum;
		}
		sum += arr[row][index];
		return GetValue(col, row, index + 1, sum);
	}
	public static void main(String[] args) {
		for (int row = 0; row < MAX_ROW; ++row) // 배열초기화
			arr[row] = new int[MAX_COL];
		for (int row = 1; row < MAX_ROW; ++row) // 1층 정보만 넣어주기
			arr[0][row] = row;
		for (int row = 1; row < MAX_ROW; ++row) // 값넣어주기, 층
			for (int col = 1; col < MAX_ROW; ++col) { // 호
				arr[row][col] = GetValue(col, row - 1, 0, 0);
			}
		Scanner sc = new Scanner(System.in);
		final int roop = sc.nextInt();
		int[][] test = new int[roop][]; // k, n 값 저장
		for (int i = 0; i < roop; ++i) {
			test[i] = new int[2];
			test[i][0] = sc.nextInt(); // 층
			test[i][1] = sc.nextInt(); // 호
		}
		for (int i = 0; i < roop; ++i) {
			int k = test[i][0];
			int n = test[i][1];
			System.out.println(arr[k][n]);
		}
	}
}
DFS
2018-11-21 00:00:00 +0000DFS(Depth First Search)
- 깊이 우선 탐색
 - 루트 노드에서 자식노드로 이동
 - 마지막 깊이에 도달한 경우 다시 상위 노드로 올라가 탐색을 재개한다
 
Source
- 아래는 임의의 숫자(NUM)의 순열을 나타내는 예제이다
 
public class Dfs {
     final static int MAX = 7;                                  // 배열 생성을 위한 임의의 수
     final static int NUM = 3;                                  // 깊이 값
     static boolean[] visit = new boolean[MAX];       			// 방문여부  체크
     static int[] arr = new int[MAX];                           // 값 저장
     public static void dfs(final int depth){
           
           // 지정한 깊이보다 현재 깊이가 더 크면 빠져나온다
           if(NUM + 1 == depth){
                // 출력
                for(int i = 1; i <= NUM; ++i){
                      System.out.print(arr[i]+""); 
                }
                System.out.println(" ");
                
           }else{ // 탐색
                for(int i = 1; i <= NUM; ++i){
                      if(false == visit[i]){           	 // 방문하지  않았다면
                           visit[i] = true;              // 들어가지 않은 노드는 들어갔다고 표시를 한다
                           arr[depth] = i;
                           //System.out.println("depth:"+depth+"  i:"+i);
                           dfs(depth+1);            	// 한단계 깊이 들어간다
                           visit[i] = false;            // 최고 깊이에 도달해서 dfs 함수를 빠져나왔다
                           arr[depth] = 0;            	//  그래서 방문여부와 값을 초기화한다
                      }
                }
           }
     }
     
     public static void main(String[] args) {
           dfs(1);
     }
}
Posts
- 
        
Interceptor(인터셉터)
 - 
        
Android Studio Install
 - 
        
계층형 게시판
 - 
        
VirtualBox Ubuntu 18.04.2 LTS
 - 
        
TransactionAwareDataSourceProxy Error
 - 
        
Java Coding Conventions
 - 
        
Java Long과 long의 차이
 - 
        
Mybatis 객체 안에 객체 매핑
 - 
        
JavaConfig mariadb 연결
 - 
        
DataTable
 - 
        
관리자 페이지
 - 
        
MappingJackson2JsonView
 - 
        
Spring Javaconfig
 - 
        
게시판 만들기-제품 등록
 - 
        
게시판 만들기-제품 페이지 제작
 - 
        
게시판 만들기-회원탈퇴 및 게시판 삭제 플래그 추가
 - 
        
footer 하단에 고정시키기
 - 
        
bootstrap4 사용법
 - 
        
Spring 데이터 검증 @Valid, BindingResult
 - 
        
brackets 실시간 미리보기
 - 
        
Spring 기본설정(pom.xml, web.xml, encoding)
 - 
        
Vue.js computed, methods, watch
 - 
        
javascript onkeyup
 - 
        
Maria DB Incorrect string value Error
 - 
        
javascript 암호화(md5, base64)
 - 
        
Vue.js template
 - 
        
Vue.js 소개
 - 
        
Nexacro 설명
 - 
        
ControllerAdvice
 - 
        
Batch
 - 
        
html 페이지 로딩 순서
 - 
        
소수구하기(PrimeNumber)
 - 
        
최소공배수,최대공약수
 - 
        
Stream
 - 
        
Lambda(람다식)
 - 
        
inner class(내부 클래스)
 - 
        
final 키워드
 - 
        
file upload
 - 
        
파이썬 빅 데이터 K-평균(K-means)
 - 
        
아나콘다(Anaconda), 주피터 개발환경 세팅
 - 
        
텐서플로우(TensorFlow) 아키텍쳐 및 Session
 - 
        
텐서플로우(TensorFlow)상수, 변수, 함수
 - 
        
머신러닝 기초
 - 
        
한글 리스트 오름차순, 내림차순
 - 
        
연속된 글자의 갯수 출력
 - 
        
java spring5 프로젝트 설정
 - 
        
restController
 - 
        
spring 세팅 및 기본설정
 - 
        
mybatis trim
 - 
        
jquery datepicker
 - 
        
ajax로 데이터 전달/응답 받는법
 - 
        
mybatis error
 - 
        
mybatis 게시판 만들기 순서
 - 
        
Java Jsp Mybatis Dynamic Query
 - 
        
mybatis
 - 
        
git 소개
 - 
        
node.js 개발환경 구축
 - 
        
node.js 기본 내장 모듈
 - 
        
node.js의 전역 객체
 - 
        
node.js http module
 - 
        
node.js event
 - 
        
jdbc
 - 
        
자바빈
 - 
        
jsp, servlet 정리
 - 
        
java null object pattern
 - 
        
다음지도 key 등록(kakao map)
 - 
        
공공 데이터 open api
 - 
        
facebook login api
 - 
        
sourcetree 사용법
 - 
        
JavaScript event3
 - 
        
JavaScript jquery
 - 
        
JavaScript dom
 - 
        
JavaScript ajax
 - 
        
JavaScript 이벤트2
 - 
        
JavaScript 캡슐화
 - 
        
JavaScript Array,내장객체
 - 
        
JavaScript var
 - 
        
JavaScript 객체,생성자
 - 
        
JavaScript 함수,클로저
 - 
        
JavaScript Event
 - 
        
javascript eclipse 자동완성(with tern)
 - 
        
CSS position
 - 
        
HTML5,CSS 선택자
 - 
        
자바 시간 측정
 - 
        
git,eclipse 연동
 - 
        
HTML 기초 정리
 - 
        
Eclipse Web 환경세팅
 - 
        
피보나치의 수
 - 
        
Oracle 반복문,커서,예외,저장 서브프로그램
 - 
        
Oracle PL/SQL
 - 
        
Oracle 다중쿼리(Multiple row query)
 - 
        
Oracle 인덱스, 뷰, 시퀀스, 트랜잭션, 세션 정리
 - 
        
Oracle JOIN 정리
 - 
        
Oracle DDL, DML 정리
 - 
        
Oracle 문자열 함수 정리
 - 
        
Oracle 숫자,날짜,자료형 변환 함수 정리
 - 
        
Oracle 제약조건 정리
 - 
        
Oracle 기초 쿼리 정리
 - 
        
문제2775
 - 
        
DFS
 - 
        
junit
 - 
        
json
 - 
        
algorithmus basic
 - 
        
circular queue(원형큐)
 - 
        
binary search(이진탐색)
 - 
        
port forwarding(포트포워딩)
 - 
        
kakao chatbot(카카오 챗봇)
 - 
        
java io
 - 
        
sort comparable, comparator
 - 
        
Unresolved compilation problem
 - 
        
ArrayList, HashMap
 - 
        
Regular(정규표현식)
 - 
        
Enum Class
 - 
        
String Function
 - 
        
refactoring 이란(상수,제어플래그,assert)
 - 
        
reference,abstract 정리
 - 
        
FileNotFoundException Solve
 - 
        
static
 - 
        
Thread Synchronization(스레드동기화,원자성)
 - 
        
Java Exception(예외처리)
 - 
        
Java 생성자, this, super
 - 
        
roomnum
 - 
        
BeeHouse
 - 
        
Git Reset, Revert
 - 
        
Git Log
 - 
        
Array
 - 
        
stack
 - 
        
pyramid draw
 - 
        
Star Draw(별 그리기4)
 - 
        
Star Draw(별 그리기3)
 - 
        
Star Draw(별 그리기2)
 - 
        
Star Draw(별 그리기1)
 - 
        
Loop(While, For)
 - 
        
자바 데이터 타입, 데이터 연산
 - 
        
시계방향 달팽이 그리기
 - 
        
정수값의 짝수,홀수 갯수 구하기
 - 
        
java, Scanner 정리
 - 
        
draw dog
 
subscribe via RSS