Programming/SQL

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

최동훈1 2021. 7. 26. 15:57

우선 비교연산자를 적용해보기 위해선 많은 ROW(레코드) 가 필요하다. 그래서 이전 포스트에서 설명한 쿼리로 레코드를 입력시켜놨다.

여기서 비교 연산자'>'를 통해 PWD가 3보다 큰 레코드 그리고 전화번호가 null 이 아닌 레코드들을 뽑으려 한다.

또한 이전 배운 내용을 응용해서, 출력할때 칼럼명을 이름(회사) 로 별칭 붙여서 출력하려고 한다.

SELECT name||'('||id||')' as "이름(회사)" from member where pwd>3 and phone is not null;

이걸 실행하니,

이렇게 나왔다. 여기서 또 알게된 점은 PWD 칼럼은 NVARCHAR 형이라 문자 만 들어가는데 왜 숫자인 3과 비교가 가능하지? 라는 의문을 잠깐 품었지만 어짜피 숫자든 영어든 한글이든 모든 것을 2바이트로 표현한다는 것을 알고, 비교가 가능하다는 것을 깨달았다. 위 회사는 내가 꼭 가고 싶은 회사 들이다 ㅎㅎㅎ.

 

또한 관계연산자에는 and,or, not, between, in 등이 있다.

만약 내가 HIT 수가 0부터 3까지의 ROW를 출력하고 싶다면,

SELECT * FROM NOTICE WHERE HIT BETWEEN 0 and 3;
SELECT * FROM NOTICE WHERE HIT = 0 OR HIT = 1 OR HIT = 3;
SELECT * FROM NOTICE WHERE HIT in(0,1,2,3);

 이걸 실행하면 다 동일한 실행 결과를 나타낸다. 

패턴 비교연산자는 문자열의 패턴을 비교할수 있도록 만든다. 그리고 패턴 비교를 하기 위해선 = 연산자가 아닌 LIKE 연산자를 써야 한다. 패턴 비교연산자를 써서 s로 id 가 시작하는 모든 ROW를 출력해 보겠다. 검색을 위한 ROW 조건을 설정할 때는 대소문자 구별을 함으로 s 가 아닌 S 를 썼다.

SELECT id as "회사" ,name from member where id like 'S%';

만약 자릿수를 기준으로 구하고 싶다면 _를 쓰면 된다.

SELECT name from member where name like '최_';

이 쿼리를 날리면 성은 최이고 이름은 외자인 ROW만 출력된다.

결과.

그렇다면 조금 더 응용해서 이름중 성이 '최'가 아닌 ROW만 출력하려고 하면

SELECT * from member where name not like '최%';

이렇게 하면 된다. 최_ 는 아니다. 그럼 최훈 만 뺴고 다 출력된다.

 

**추가. 

우선 사용자라 함은 어떤 서버에서 특정한 권한을 가지고 직접 어떤 테이블을 생성하거나 조작할수 있는 권한을 가진 계정이다. 즉, 우리가 오라클 서버에 접속할떄 해당 사용자와 비밀번호로 접속한다면, 사용자에 지정된 권한과 저장루트가 적용된다. 서버에 관계없이.DBA에서 사용자를 추가하고, 해당 사용자로 어떤 테이블을 만들고 저장하는 임시/영구 테이블이 "사용자 별로 저장하는 것이다.

 

즉 PDB..CDB, 접속 등 많은 용어들 때문에 혼란스러웠고, 도대체 커밋하기전에 저장되는 공간은 어디일까? 라는 생각을 많이 했었는데 이제서야 의문이 풀렸다. DBA 에서 사용자를 생성하면서 지정해준 공간으로 가는 것이다. 예를 들면 해당 서버에 다른 사용자로 접속하여 테이블을 저장했다면, 같은 공간이 아닌, 그 사용자전용 저장공간에 저장되는 것이다.

 

공부시간 2시간

순공시간 1시간.