Programming 95

문자열 함수 LOWER,UPPER, PAD, INSTR. 2021-07-30

우선 그나마 실용적으로 쓰이는 함수는 LOWER과 UPPER이다. 일단 칼럼 제한 조건부분에서는 칼럼명은 소문자로 쓰든 대문자로 쓰든 오라클에서는 대/소 문자를 구별하지 않지만, WHERE 절 뒤 ROW를 제한하는 조건을 쓸떄 비교연산자 '=' 을 쓰는 경우에는 문자 리터럴로 대/소문자를 구별한다. 이떄 대/소 문자 가리지않고 ROW를 제한하는 방법에 이것을 쓴다. 예를 들면, 이렇게 HUN이라는 이름속에는 대/소문자가 혼재되어 있을경우 구별없이 출력하고자한다면 어떤 쿼리를 써야 할까? select name||id as "이름(회사명)" from member where UPPER(name)='HUN'; 이렇게 해당 칼럼을 아예 대문자로 다 바꾼뒤에 비교연산자 '='를 통해 비교하면 된다. 그다음 많이쓰는..

Programming/SQL 2021.07.30

ROWNUM을 이용한 페이징 출력, 중복제거 distinct 키워드, 문자열 자르기 SUBSTR 함수. 2021-07-29

우선 페이징 이라 함은, 한번에 테이블 중 몇개씩 끊어서 나열하는 것인지 기준에 따라 정렬시키는 방법이다. 이런 페이징을 하기 위해서는 테이블을 특정 기준에 따라 나눌수 있어야 한다. 그런데 일반적으로 생성한 테이블들을 보면 어떤 추가된 순서에 따라 숫자를 부여하는 칼럼을 사용자가 만들어놓지 않은 이상 그런 순차적으로 뚜렷하게 나눌수 있는 기준이 되는 칼럼을 찾기 어렵다. 예를 들면 저번에 내가 만들어놓은 이런 칼럼에서, 기준으로 잡을 것이 안보일 것이다. 이때 순차적으로 페이징할수 있는 기준을 만드는 것이 바로 ROWNUM을 이용하는 것이다. 바로 위 사진의 제일 왼쪽에 1 부터 4까지 붙여진 것이 있는데 이것은 오라클에서 자체적으로 select 문을 통해 결과집합을 생성하면서(where절 단계에서) ..

Programming/SQL 2021.07.29

정규식 패턴 + 특수문자가 포함된 칼럼 검색 2021-07-28

select * from member where REGEXP_LIKE(email,'\w+@\w+.(com|org|net)'); 우선 내가 저번에 저장한 member 테이블에서 전화번호를 검색한다고 하자. 우선 이전 포스트에서 설명한 단순 패턴비교 연산으로도 검색이 가능하다. select *from member where phone like '%-%-%'; 이렇게 말이다. 그런데 이럼 문제가 있다. 범위가 너무 넓다는 것이다. %는 숫자 문자, 영어 등 모든 문자를 포함한 값이 올수 있다는 것인데, 숫자뿐 아니라 김치-바나나-학성고 등의 문자열도 검색되버릴수 있다는 것이다. 그래서 우리는 좀더 정교한 검색을 위해 정규식을 사용할 수 있다. 우선 [ ] 연산자는 1자리를 나타낸다. 예를들면. select *..

Programming/SQL 2021.07.28

비교연산자, 관계연산자, 패턴 연산자 실습+ 테이블 스페이스가 저장되는곳. 2021-07-26

우선 비교연산자를 적용해보기 위해선 많은 ROW(레코드) 가 필요하다. 그래서 이전 포스트에서 설명한 쿼리로 레코드를 입력시켜놨다. 여기서 비교 연산자'>'를 통해 PWD가 3보다 큰 레코드 그리고 전화번호가 null 이 아닌 레코드들을 뽑으려 한다. 또한 이전 배운 내용을 응용해서, 출력할때 칼럼명을 이름(회사) 로 별칭 붙여서 출력하려고 한다. SELECT name||'('||id||')' as "이름(회사)" from member where pwd>3 and phone is not null; 이걸 실행하니, 이렇게 나왔다. 여기서 또 알게된 점은 PWD 칼럼은 NVARCHAR 형이라 문자 만 들어가는데 왜 숫자인 3과 비교가 가능하지? 라는 의문을 잠깐 품었지만 어짜피 숫자든 영어든 한글이든 모든 ..

Programming/SQL 2021.07.26

커밋과 롤백, DATE 형 칼럼에 값 insert 하기. 2021-07-23

지난 포스트에서 내가 관련 개념을 설명할 때는, 직접 SQL developer에서 프로그래밍 해 보지는 않았는데, 오늘 직접 해보니, 막연한 개념을 확실히 확인할 수 있었다. **커밋,롤백, 트랜젝션에 대한 자세한 설명은 내 이전포스트 참고바람. 우선 서로다른 세션이 한 저장소에 접근하는것을 보이기 위해 SQL developer를 두번 열었다. 이렇게 연 다음, Session2에서 ID 가 newlec인 레코드의 칼럼을 update 한 뒤 Session1에서 해당 레코드의 칼럼중 하나인 gender에 접근하여 바꾸려 하자 보이는 것처럼 바로 ROCK이 걸렸다. 이유는 Session2가 아직 commit 하지 않았으므로, 해당 레코드에 관한 트랜젝션이 완료되지 않았다고 간주하고, 해당 테이블이 Sessio..

Programming/SQL 2021.07.23

insert, update, delete 쿼리의 실행.2021-07-21

오늘은 오전공부는 SQL로 40분정도 했는데 어짜피 이전에 적었던 포스트라 중복되서 짧게 복습용으로 적겠다. insert into member(id,pwd) values('dragon','111'); insert into member(id,pwd) values('newlec','111'); insert into member(id,pwd) values('dragon','222'); 위 쿼리 실행결과 이렇게 row가 저장된다. update member set pwd='222',name='손오공' where id='dragon' and pwd='111'; delete member where id='dragon' and name is null; 이렇게 쿼리를 실행하면, 같은 dragon id 이지만, 손오공이라..

Programming/SQL 2021.07.21

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

유니코드, 2의보수법, 부동소수점

우선 컴퓨터에 a 라는 문자를 char 형 데이터에 저장한다면, char a= 'a' 이렇게 char형 변수에 저장한다. 그런데 실제로 저장되는 값은 문자 a 에 매치되는 유니코드 값인 65이다. 컴퓨터는 0과 1로 이루어진 이진법 숫자만 저장 가능하기 때문이다. unicode 는 원래 아스키코드, 확장 아스키 코드 처럼 전 세계의 문자 인코딩 방식을 하나로 통합해사 만들어진 체계인데 자바는 Unicode-16 을 쓴다. 이 16의 특징은 영어든 숫자든 한글이든 다 2byte 규격으로 저장한다는 것이다. 단점은 1바이트로 저장가능한 영어조차 2바이트로 저장하니 비효율적이다. 그런데 Unicode- 8 은 영어는 1byte, 한글은 3byte 이렇게 가변적으로 문자를 표현한다. a와 b 가 n의보수관계에 ..

Programming/JAVA 2021.07.19

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