[데이터베이스] 기초 SQL과 문자함수

반응형

시작하기전 ...

현재 삼성멀티캠퍼스의 청년취업아카데미에서 데이터베이스를 배우고 있다. 이 과정에 대해 구글링해보았는데 아무런 정보가 없어 수강하는데 고민을 조금 했다. 과정이 끝나고 나면 간단히 후기를 올리겠다.

지금까지 수업에서 리눅스(오라클 리눅스)에 오라클DB를 설치하여 SQL Developer에서 SQL문을 공부했다. 기초적인 SQL문 진도는 다 나갔다고 판단하여 블로그에 정리를 해보려고 한다. 다만 이 수업이 실습위주의 수업이라 데이터베이스 이론(모델링, 설계)는 충분히 다루지 못했다. 이 강좌가 다 끝나고 나면 스스로 독학할 생각이고, 그 내용도 정리해보는 시간을 가질 것이다.


다만 너무 쉽거나 정말로 기초적인 내용은 데이터베이스 교재를 보면 나오는 내용이므로 포스팅에서 제외하려고 했다.

공부하면서 교재에 부족했던 내용이나 개인적으로 궁금했던 내용을 정리해볼 것이다.


1. select와 where

show user : 내가 지금 무슨 계정에서 작업하고 있는지 알려주는 명령어

맨 처음 배운 구조 : select * from 테이블명

배우면서 느낀건데 from 절의 테이블명을 먼저 써놓고 해당 테이블을 보면서 출력하고 싶은 칼럼이나 계산식을 써놓는게 유리해보였다.

SQL 문은 대소문자를 구별하지 않지만 키워드들은 대소문자를 구별한다.

select * from tab; 내장테이블로서 해당 계정의 모든 테이블을 출력해준다.

select * from dual; 더미테이블. 함수를 테스트할 때 사용.

주석은 --


출력할 때 조건을 부여하려면 where절 이용

일반적인 프로그래밍 언어에서 사용되는 등호, 부등호 모두 이용 가능.

다만 문자형의 경우 like를 이용하여 해당 문자열을 검사할 수 있었다.  -> 숫자형에 사용할 경우 조회된 내용에서 숫자가 문자형이 되어버림. 숫자형 데이터에서 수학적 규칙이 아니라 사용자의 임의적 규칙이 사용되었기에 문자형이 되나보다.

한편 문자형일 땐 '   '(작은따옴표) 안에 넣어줘야 한다. 그런데 파이썬에서 큰따옴표와 작은따옴표를 혼용해서 사용했던 기억이 났다. SQL문에서는 문자열 데이터를 큰따옴표로 묶게되면 오류가 났다. 그럼 언제 작은따옴표를 쓰고 큰따옴표를 쓰는걸까?

-> 키워드(식별자)를 지칭할 때는 작은 따옴표를 사용. select하는 칼럼/계산식의 이름을 정의하는 as 문에서 큰따옴표 사용.

참고로 문자열 안에 작은 따옴표가 들어가는 경우에는 작은따옴표를 한 번 더 써주면 된다. ex)  'You''re busy'

SQL문을 실행하고 F10을 눌르면 그 구조가 나오는데, between의 경우 <=와 >=조건을 and로 처리한 것이었다. 어느것을 사용해도 같은 내용을 조회한다.


한편 오라클DB에서만 사용되는 기능도 있었다. 치환변수라는 기능인데, SQL문을 실행하여 조회할 때마다 사용자에게 값을 입력받는 것이었다.

select, where 등 SQL에 &(엠퍼샌드)를 입력해놓고 실행할 경우, 사용자에게 입력받은 값을 이용하여 SQL문을 수행한다.

&&(더블 엠퍼샌드)를 사용할 경우 입력받은 값을 SQL문이 종료될 때까지 저장해놓는다. 다시 초기화하고 싶다면 undefine 실행

 

2. 문자 함수

문자를 붙이고 싶을 때는 || 를 붙여준다. 테이블A||테이블B 이런식으로. 위의 like와 마찬가지로 테이블안에 숫자형 데이터가 들어있었다고 하더라도 조회된 결과에서는 문자형이 된다. || 는 concat의 확장 기능이다. concat(t1, t2)이런 식으로 사용하는데, 인수가 딱 2개뿐이라 여러개를 붙이려면 계속 중첩을 해야 했다고... 호환성을 위해 남겨두었지만 우리는 쓸 일 없다.

where 절에서 다룬 like는 검사할 칼럼의 문자열 데이터를 일일히 검사한다. 또 like문이 and로 2개 이상 있는 경우에 처음 스캔한 결과를 두번째 스캔에 이용하지 않고 처음부터 또 다시 수행하는 비효율적인 작업을 한다.(중복스캔) 따라서 검색하려는 문자의 위치를 알고 있다면 substr을 이용하여 잘라내고, like가 아닌 등호연산으로 수행하는 것이 효율적.

lower나 upper 함수는 당연히 대소문자를 구별하는 DB에만 있다고 한다. (msDB는 대소문자 구별을 안한다고)

substr(데이터,시작수, 끝수) substr에 음수를 넣으면 문자 오른쪽부터 n개를 짤라냄. 문자 끝으로 위치가 고정됨. 엑셀 right와 똑같이 되는 것.

lpad, rpad(데이터, n, '삽입할 문자') -> left/right padding : 왼쪽/오른쪽에서부터 글자수가 n이 되도록 문자를 삽입한다. -> 마스킹에 이용할 수 있음.

이외에도 replace(데이터, '바꾸기 전의 문자', '바꾼 후의 문자') -- 데이터에 있는 모든 바꾸기 전의 문자를 바꾼 후의 문자로 치환한다.

length(데이터) -- 길이반환(숫자값 출력) 이 주로 사용된다.


다음 포스팅에는 함수를 마무리지어야겠다.