전체 글 170

오라클 문자형 데이터 타입 추가정리 및 인코딩 방식에 따른 메모리크기. 2021-07-07

오늘은 어제 내가 깐 SQL Developer로 여러가지 기능을 가지고 놀아본다고, 실질적인 공부내용은 적을수 있다. 그러나 오늘 내가 직접 테이블을 생성해보고, 쿼리를 날려보고, 결과를 눈으로 확인하니, 확실히 그 어떤 학습보다 이해도가 올라갔다. 우선 문자 데이터형은 크게 1. CHAR(SIZE(BYTE | CHAR)) 2.VARCHAR(SIZE(BYTE|CHAR)) 3.NCHAR(SIZE) 4.NVARCHAR(SIZE) SIZE=2BYTE(UTF16) SIZE=3BYTE(UTF8) 가 있다. 난 처음 이전 포스트에 공부할때는 ,이 데이터형의 파라미터가 자리수 인지, 바이트 인지, 아니면 인코딩에 따른 자리수 인지 전혀 구별을 못했는데 이제 확실히 알겠다. 우선 오라클에서 문자를 표현하는 데이텨형은 ..

Programming/SQL 2021.07.07

PDB와 CDB, 멀티 태넌트 개념. 테이블 스페이스 생성. 2021-07-06

우선 우리는 이전 포스트에서 서버를 생성한 것은, SID 가 XE 즉, 기본 컨테이너 서버(CDB)를 만든 것이다. 오라클은 버전이 업데이트 되면서, 기존에는 한가지 서버로만 사용했던 것들이, 이제는 서버안에 또 다른 가상의 서버를 만듬으로서 조금 더 쉽게 갈아끼우거나, 변경, 삭제 할수 있도록 만들었다. 또한 하나의 템플릿(서버의 틀)을 카피하며, 다양한 종류의 서버를 만들수 있도록 하였다. 그것이 바로 Pluggable database이다. 요약하자면, 큰 컨테이너 서버의 자원을 공유하면서 완전히 독립된 조그마한 서버를 여러개 만드는 것이다. 왜 이런 짓을 하는지 내가 구글 검색해본 결과 큰 서버 한개의 자원을 100%쓰는 경우는 드물기에 나머지 놀고먹는 자원들을 활용하기 위해, 다른 별개의 용도를 ..

Programming/SQL 2021.07.06

SQL developer 설치. + IntelliJ 바로가기 경로 재설정. 2021-07-05

우선 난 이전 포스트에서 말한 것 처럼 오라클은 에디터나 DB와 사용자의 실질적 소통을 만들어주는 창구가 아니다. 그냐 DB를 관리해주는 시스템일 뿐이다. 또한, 사용자는 직접적으로 쿼리를 DBMS에 날릴수 있는 방법이 없다. 무조건 서버 클라이언트를 통해서만 DB(DBMS)랑 상호작용 할수 있다. 오라클에서는 대표적으로, 콘솔 기반의 SQL plus 와 더욱 사용자에 친숙하게 윈도우 기반의 SQL developer 가 있다. 즉, 여기서 직접 퀴리를 날리고, 연결, 결과집합을 확인 할 수 있는 것이다. 오늘은 그래서 SQL developer를 설치 해 보았다. 과정을 설명하자면, 1. 오라클 사이트의 download 카테고리 로 들어가자. 처음 내가 오라클 사이트 접속했을때는 소프트웨어를 다운할수 있는..

Programming/SQL 2021.07.05

SQL 문자열 내장함수 LPAD, INSTR, LENGTH. + 오라클 DBMS 와 사용자 인터페이스(SQL PLUS, SQL DEVELOPER) 2021-07-02

SQL에서 가장 대표적인 문자열 내장 함수는, LPAD,RPAD : 패딩함수 INSTR : 문자열에 포함된 문자가 어느 위치에 있는지 숫자를 반환하는 함수. LENGTH : 문자열의 길이를 반환하는 함수. 등이 있다. 바로 용례를 설명하고, 문제를 풀면서 보이겠다. LPAD(문자1, 5, 문자2) 의 뜻은 문자 1을 5자리수만 출력할것인데, 만약 5자리 미만이라면, 왼쪽(Left)에 남는 자리만큼 문자 2를 채우라는 뜻이다. 문제 답. SELECT RPAD(NAME,3,'_') FROM MEMBER; 그런데 여기서 주의할 점은, 패딩함수의 인자로 오는 숫자는 바이트 단위이다. 그러므로, 한글을 자르려면, *2를 해줘야 한다.(유니코드로 한글은 1글자당 2바이트이기 떄문); 수정 답: SELECT RPAD..

Programming/SQL 2021.07.02

오라클 내장 함수중 문자열 함수. 2021-07-01

오늘 내가 처음 인지한 내용은 SELECT 문에서 '행' 을 선별할지, '열'을 선별할지 구분하는 것이다. SELECT PHONE AS p, NAME FROM MEMEBER WHERE ID LIKE 'ab%'; 여기서 FROM 절 앞에 오는 것은 '열(COLUMN)' 의 선별이고 WHERE 절 뒤에 오는 조건은 어떤 '행(ROW)'을 선별하는 조건이다. 그런데 내장함수는 FROM 절 앞에서 자주 쓰이며, '칼럼' 을 선별하기 위해서 쓰인다. 물론, WHERE 절뒤 조건절에 행(ROW)를 선별하기 위햇 쓰일 수는 있지만, 만약 테이블이 수만개 되면 모든 행을 조건에 맞는지, 검사할때마다, 함수를 호출해야 하기 떄문에 CPU에 부담이 될수 있어서 가급적, 행을 선별할때는 LIKE, REGEXP_LIKE, O..

Programming/SQL 2021.07.01

[자바] 1463번 1로 만들기. 2021-06-30

문제는 우선 처음 아이디어를 내고 DP[i] =num 이 무엇을 의미하는지와, N-1항에서 N항으로 어떻게 갈수 있는지를 파악하기만 하면 쉽게 풀린다. 두가지 풀이법이 있다. 첫번째는 내 풀이법인데 난 이것이 DP[i]의 정의를 더욱 더 직관적으로 이해할수 있는 코드라고 생각한다. 물론 시간초과나서 틀렸지만. 하지만 알고리즘 원리는 똑같으니 같은 해답이다. 나는 DP[i]=num 의 정의를 N부터 시작해서 연산을 통해 i를 만들수 있는 연산의 최솟값 num 으로 정의했고, 다른 좀더 빠른 방식으로는. i를 1로 만들수 있는 최소연산횟수 num으로 정의했다. 내가 한 방법이 조금 더 문제의 조건에 직관적이긴 하지만, 시간초과가 난게 아마 2중 for문으로 현재 인덱스보다 크고 N보다 작은 것중에 2나 3으..

ROWNUM, 페이징을 통한 열의 단위집합 출력 2021-06-29

이전까지는 난 오라클에서 SELECT 문을 통해 결과집합을 출력할떄, 기존에 있던 칼럼(column : 열) 에서 ROWNUM이라는 새로운 칼럼을 추가해 준다는 것을 몰랐다. 그런데 난 SELECT * FROM (SELECT ROWNUM NUM,NOTICE.* FROM NOTICE) WHERE NUM BETWEEN 2 AND 7; 이 구문을 이해하는 과정에서, 알게 되었다. 사실 오늘 내가 설명하려고 하는 모든 내용이 이 한 구문안에 다 존재한다. 우선 문제의 시작은 테이블에서 특정 갯수만 출력할때, 어떤 SQL 구문을 만들어야 하는가에서 시작된다. 예를들면 가장 상위의 5개씩 출력, 하위의 2~7 ROWNUM 출력 등이다. 우선 ROWNUM 이 무엇인가? 우리가 SELECT 문을 통해 테이블을 출력하면..

Programming/SQL 2021.06.29

[자바] 백준 1697번 숨바꼭질. 2021-06-28

처음에는 2차원 평면상의 이동이 아니라서 DP로 풀어야 하나.. 하고 끙끙댔는데, 알고보니 +1,-1, *2 의 이동가능 범위(계층이동)의 1차원 수직선상의 이동으로 BFS를 이용하면 쉽게 풀리는 문제였다. 큐에 한계층 이동했을때를 현재 좌표에 반영해서 넣기 곤란했는데, 새로 움직인 좌표를 저장하는 nexti[ ]라는 배열을 만들어서 쉽게 해결하였다. 앞으로 좌표를 수직선이나 평면에 표현할 수 있고, 이동함+최솟값 조건의 문제는 DP가 아닌 BFS부터 생각해서 풀어야겠다. import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { public static void main(String[]..

패턴비교 연산자. 2021-06-28

우선 지난시간에 배웠던 정규식을 이용하지 않은 단순 패턴비교연산자(LIKE)의 용례를 복습겸 풀어보자. SELECT * FROM NOTIECE WHERE NAME LIKE '최%'; --이러면 '최'로 시작하는 1개 이상의 모든 단어가 출력됨. 최, 최훈, 최미미, 최모리모리 등.. SELECT NAME AS '이름', ID, PHONE FROM MEMBER WHERE NAME LIKE '최__'; --이러면, '최'로 시작하는 세글자의 이름만 추출해서 출력됨. SELECT NAME name, pwd FROM MEMBER WHERE NAME LIKE '%울산%'; --이러면, 이름에 울산이라는 단어가 앞이나 뒤, 중간에 포함되 있기만 하면 다 추출된다. 그런데 우리는 %와 _ 연산자를 통해 우리가 원하는..

Programming/SQL 2021.06.28

[자바] 백준 2156번 포도주 시식 2021-06-25

우선 문제 접근은 매우 쉬웠다 결국 틀렸지만ㅋㅋ,, 이전 포스트에서도 설명했듯, DP문제를 풀 때는 맨 마지막 항 N이 어떻게 구성될수 있는지 경우의 수를 나눠서 일반항을 구하는것과 구한 DP배열의 각 항이 무엇을 의미하는것을 정의하는게 제일 핵심이다. 1. 맨 마지막 항 N이 구성될 수 있는 경우는 3가지 이다. 내가 직접 그림을 그렸다. 그런데 매우 특이한 점은, 맨 마지막항을 "무조건" 방문해야 한다는 조건이 없기에, 만약 2번 3번 경우보다 아예 해당 노드를 안방문하는 경우가 더 클 경우, 그냥 바로 전 항의 dp값을 현재의 dp값으로 할 수 있다는 것이다. 여기서 방문(마신다)는 것은 dp[i]의 값에 현재의 인덱스값 arr[i]를 더해주느냐 마느냐로 정할수 있다. dp[i]의 값을 구하는 식에..