Interview

DB 텍스트

Cal-D 2020. 1. 30. 10:32

패턴 연산자

 LIKE % _ 

회원중 박씨 성을 조회

select * from member where name = '박%' 하면 진짜 이름이 박%를 찾게 된다 

그러니까 내가원하는 패턴으로 만들려면

select * from member where name LIKE '박%'; 로 해야 된다.

%는 1글자 이상을 의미.

자리수를 한정한 패턴을 원하면?

_ 는 한자리를 의미 즉 LIKE ' 박_'; 하면 두자가 됨

---------------------------------------------------------
정규식을 이용한 패턴 연산
[] : 한 문자를 대변
[0-9] : 0부터 9까지 하나
{}는 반복횟수 
{3,4} 3번 혹은 4번 반복 

\d  는 [0-9] 와 같다. 즉, decimal digit을 나타냄

오라클에서 regexp 쓰려면

regexp_like 를 써야한다.
 
(컬럼, regexp) 사용

^ $는 처음과 끝을 의미 
즉 표현식만! 있어야된다는걸의미

어떤곳에 포함된 정규표현식을 위해서는
^ $ 를 없애야한다.


\w 의 경우 [0-9a-zA-Z]를 의미

\D 의 경우 non[0-9]이다 

 

DDL create alter drop
DML insert select delete update 
DCL grant revoke

 

예약어,컬럼명은 소대문자 안가림

하지만 값은 가림, 즉 select로 불러올때 소대문자를 봐야한다는 소리

select id as(생략가능) user_id 

select id "user id" 빈공백은 이렇게 해야된다. 대신 저렇게 넣으면 소문자로 들어감, 

오라클 서버는 사용자의 접속정보를 따로 관리, 접속정보가 다르면 세션이 다르다.

세션마다 데이터 처리가 다르다. 

트랜잭션이란? 업무의 실행단위/ 논리적 명령단위

COMMIT ROLLBACK


오라클의 더미 테이블 DUAL;

문자열 더하는 연산자는 || 이다.

 

오라클은 ' ' 로 문자열 한다.

varchar2 각 데이터의 길이만큼의 구분자가 생겨서 구분자로 구분, 가변길이는 varchar2

nchar  national char 임, 기본 utf8, 한번에 많은 걸 표현하기때문에 , 

char(3) 은 3byte를 의미,3개의 글자가 아님

영문자는 한글자가 1byte

그러나 한글의 경우는? 한글자가 3byte임


CHAR (3 CHAR) 의경우 BYTE가 아니라 3개의 문자 즉 한글도 3개의 문자가 가능. 그렇지만 이건 바람직 하지 않음

왜? NCHAR(3) 이 적절 하나 표현할때 2BYTE면 됨


즉 영어 숫자가 아니고 한국어 혹은 각국의 언어를 쓰기 위해서 NCHAR를 쓰느게 바람직 () 수는 한글개수 

CLOB (CHARACTER LARGE OBJECT)
NCLOB (NATAINOAL) 유니코드로 


Number로 정수 실수 다 가능 (오라클의 경우)

ALTER의 경우 데이터 형 , 길이를 확인해야겠지? 안그러면 오류가 뜰꺼니까

예약어를 테이블명이나 컬럼명으로 쓰고 싶으면 "" 안에 넣으면 된다

DISTINCT의 경우 한 컬럼만 SELECT 할 경우 사용가능

SELECT DISTICT AGE FROM MEMBER; 처럼

sql : 질의어 
DBMS: 데이터베이스를 관리 시스템

동시성, 보안문제 를 위해 DBMS를 쓴다

SELECT LENGTH('HELLO') FROM DUAL

-----------------------------------------------------------

.오라클 내장 함수


문자열 함수
숫자 함수
날짜함수
변환함수
NULL관련함수
집계함수

오라클 영어는 1BYTE 한글은 3BYTE (유니코드)

SELECT NAME, SUBSTR(컬럼,시작인덱스,몇개까지) FROM 테이블;

SELECT * FROM 테이블 WHERE PHONE LIKE '^011-%-%$' 해도되고,사진찍은 SUBSTR로 해도되고

SELECT * FROM 테이블 WHERE PHONE IS NULL AND SUBSTR(BIRTH,,) IN('07','08','09');

CONCAT(),보다는||더빠르다네.연산이라.함수가아니라서

REPLACE는 통쨰로
TRANSLATE는 한개씩 한개씩