Programming/SQL 34

NVARCHAR, DDL중 ALTER 로 테이블 변경 2021-07-20

이전 포스트에서는, CHAR 형의 파라미터에 들어가는 것은 size나 2 CHAR 처럼 해당 DBMS가 정하고 있는 유니코드의 글자당 바이트 수가 들어갈수 있다고 했다. 이것은 CHAR 나 VARCHAR 만 한정된 것이고 나머지는 다 size 만 들어간다고 알고 있었다. 그러나 오늘 MEMBER 테이블을 수정할 일이 있어서 확인해 보니. 이렇게 되어 있었다. CHAR나 VARCHAR 의 파라미터로 그냥 숫자를 주면, Unicode - 8 인코딩으로 숫자당 1byte 값으로 저장할수 있는 공간이 생기기에, BIRTHDAY나 ID 의 Byte 값은 이해가 됬다. 그런데 PWD 값은 왜 50 CHAR 일까? 분명 nationalcharacterset은 오라클에서 Unicode -16 을 쓰는데, 50 CHAR..

Programming/SQL 2021.07.20

오라클 문자형 데이터 타입 추가정리 및 인코딩 방식에 따른 메모리크기. 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

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

패턴비교 연산자. 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

SQL 관계연산자, 패턴비교 연산자. 2021-06-24

복습. DML의 종류에는 SELECT INSERT UPDATE 등이 있다. 사용용례 : SELECT 열 AS 별칭 FROM 테이블 INSERT INTO 테이블(열,열) VALUES(값,값); UPDATE 테이블 SET 열=값, 열=값 WHERE 조건. SQL의 관계연산자는 NOT, AND, OR, BETWEEN, IN; 등이 있다. 딱히 부연설명이 필요없이 사례로서 보이겠다. 1. DB에서 조회수 1~3의 열만 추출. SELECT * FROM NOTICE WHERE 1

Programming/SQL 2021.06.24

SELECT 스킬 : 산술연산(숫자연산자, 문자 연산자, 별칭붙여서 출력) ,비교연산 2021-06-22

테이블에 저장된 다양한 필드를 가진 데이터들을 출력하는 방법이 있다. 예를들면, ID PWD NAME ming 0523 밍 hun 2020 동훈 mori 0619 모리 이런 ID,PWD,NAME 필드를 가진 데이터가 DB에 저장되어 있을떄, 워하는 열 만 출력할수 있는지, 원하는 행만 출력할수 있는지, 이런 방법이 매우 중요하다. 또한 이미 저장되어있는 값에 숫자연산을 통채로 다 적용시킨 값을 열(colum)으로서 출력 할 수 도 있어야 한다. .1. ID와 PWD를 뽑는경우 SELECT ID,PWD FROM MEMBER; 2. PWD에 1 더한 값을 뽑는 경우 SELECT PWD+1 FROM MEMBER 그런데 이 방식으로 뽑으면 문제가 있다. 출력을 해보면, PWD+1 0524 2021 0620 이렇..

Programming/SQL 2021.06.22