본문 바로가기
프로그래밍/데이터베이스

[SQL 기초 - 3장] 오라클 WHERE 절 기본 및 심화 (feat. ORDER BY)

by 잡학다방 2024. 11. 27.
반응형

안녕하세요!

오늘은 지난시간의 내용에 이어서 WHERE 절 기본 및 심화내용과 ORDER BY 절에 대해서 공부해 보도록 하겠습니다!

시작해보도록 하죠~

 

혹시라도 테이블 데이터가 없거나 

지난 시간 내용이 기억나지 않는분들은 아래 버튼을 눌러 확인하고 오시길 바랍니다!

LIKE

시작으로 'LIKE' 부터 공부해보도록 할게요.

LIKEWHERE 절에서 사용 가능한 연산자 중 하나 인데요,

컬럼의 데이터에서 문자의 일부분으로 검색 하고 싶을 때 사용합니다.

형식 : 컬럼명 LIKE '패턴문자열'

위의 형식대로 쿼리를 작성해주시면 되는데요, 제가 지난 시간에 SQL 에서 문자열은 싱글 쿼테이션으로 묶는다고 했죠?

그리고 패턴문자열 안에는 '%' 와 '_' 를 사용해서 데이터를 검색합니다.

이를 마스킹 문자열 이라고 합니다.

1. % : 문자가 없거나, 어떤 문자든 여러개의 문자열을 검색할 때 사용

ex) 'S%' : S로 시작하는 모든 문자열을 검색(S, SS, SMITH 등)

2. _ : 어떤 문자든 딱 하나의 문자를 의미

ex) 'S_' : S로 시작하고 두번째 문자가 어떤 문자든 하나의 문자가 오는 2자리 문자열

'S____' : S로 시작하고 문자열의 길이가 5글자인 문자열

위와 같이 설명 할 수 있겠습니다. 말 보다는 행동이 앞서야죠?

실습 해보도록 하겠습니다.


emp 기본 테이블

 

지난 시간에 보여드렸던 emp의 기본테이블 입니다.

여기에서 LIKE 연산자를 사용해서 ename 커럼의 값이 S로 시작하는 사원들만 조회 해보도록 하죠.

LIKE를 사용하여 조회

 

 

쿼리는 간단하게 위와 같이 작성할 수 있겠습니다.

아래는 결과인데요 ename 컬럼을 보시면 S로 시작하는 사원들만 조회 된것을 보실 수 있씁니다.

그럼 '%' 를 사용해 봤으니 '_' 도 사용해 볼까요?

LIKE를 사용하여 조회

 

 

네. '_' 4개와 마지막 자리가 S로 끝나는 사원들을 조회해 봤습니다.

하지만 이처럼 '_' 는 자릿수를 맞춰야 할 뿐더러 특정 단어까지 섞어서 사용해야 하니,

자주 사용할 것 같지는 않네요 ㅎㅎ

 


논리연산자

1. AND

다음으로 논리연산자에 대해서 살펴보도록 하겠습니다!

논리연산자는 AND, OR, NOT 이 있습니다. 하나씩 설명을 보도록 하시죠.

AND : 참 거짓 판단식1 AND 참 거짓 판단식2 ==> 식 두개를 동시에 만족하는 행만 참

일반적으로 AND 조건이 많이 붙으면 조회되는 행의 수가 줄어든다.

OR : 참 거짓 판단식1 OR 참 거짓 판단식2 ==> 식 두개중에 하나라도 만족하면 참

NOT : 조건을 반대로 해석하는 부정형 연산

ex) NOT IN : 포함되지 않는것

IS NOT NULL : NULL이 아닌것(NULL 은 '=' 연산자로 비교 불가!!)

그럼 AND 부터 실습해 보도록 하겠습니다.

emp 테이블에서 mgr 컬럼 값이 7698이면서 sal 컬럼의 값이 1000보다 큰 사원을 조회 해보도록 하죠.

AND 연산자를 사용하여 조회

 

 

AND 를 사용해서 출력한 결과입니다.

mgr 컬럼의 값이 모두 7698 "이면서" sal 가 1000보다 큰 사원들이 출력되죠?

AND 에서 중요한 부분은 "이면서" 입니다.

즉, 두가지 조건을 모두 만족한다는 것이죠.

그럼 같은 조건으로 OR를 사용해 볼까요?

2. ​OR

OR 연산자를 사용하여 조회

OR를 사용하여 만든 결과입니다.

OR는 AND와 다르게 두 조건 중 하나라도 만족하는 행을 조회한다고 했죠?

그래서 mgr 값이 7698 이거나 sal 이 1000보다 큰 모든 사원들이 조회가 된거죠.

그렇다면 OR에서 가장 중요한 것은 "이거나" 라고 할 수 있겠죠?

​3. NOT

그렇다면 이번에는 NOT 연산자를 사용해 보도록 하죠.

mgr 사번이 7698이 아니고, 7839가 아니고, NULL이 아닌 직원들을 조회해 봅시다.

그렇다면 쿼리는 NOT 의 반대인 NOT IN 연산자를 사용하면 되겠죠?!

NOT IN 연산자 사용하여 조회

이렇게 하면 될까요?

네?

돼요?!

된다구요?

아니죠~?

위의 쿼리에서 마지막 웨어절을 풀어서 써보면 이렇게 됩니다.

WHERE mgr NOT IN(7698, 7839, NULL);

==> mgr != 7698 AND mgr != 7839 AND mgr != NULL

집합의 개념을 생각해 보세요.

IN 은 합집합의 관계인데, 집합에서 합집합의 역은 뭔가요?

역의 교집합이죠?

그런데 마지막부분에서 NULL이 != 로 되어 있습니다. 제가 아까 물흐르듯이 넘어가서 모르실수도 있겠지만

NULL 은 != 를 사용한다고 했나요? 아니죠?

그렇다면 올바른 쿼리는~~~~

NOT IN 연산자를 사용하여 조회

다음과 같이 되고

결과는 이렇게 나오게 됩니다~

 

괜찮죠..?

다 이해 하셨으리라 믿습니다.

 

그렇다면 이제 지난 시간에 배운 내용도 복습할 겸 복잡한 문제를 풀어볼까요?

emp 테이블에서 job이 SALESMAN 이거나, 사원번호가 78로 시작하면서 입사일자가 1981년 6월 1일 이후인

직원의 정보를 조회해보세요.

WHERE 절의 쿼리는 크게 두 부분으로 나눠질 수 있겠네요.

AND, OR 연산자를 사용한 조회

 

 

크게 두 부분으로 나눠 보면

1. job이 SALESMAN 이거나,

2. 사원번호가 78로 시작하면서 입사일자가 1981년 6월 1일 이후인 직원의 정보

로 나눌 수 있겠습니다. 물론 2번의 문장도 두 부분으로 나눌 수 있겠죠?

그렇게 쿼리를 작성하고 결과를 출력하면 위와 같이 나오게 됩니다!


ORDER BY

지금까지 잘 따라오셨나요??

그렇다면 마지막으로 ORDER BY 절에 대해서 배워보도록 하겠습니다!

먼저 ORDER BY 절 이라고 하면 쉽게 말해서 컬럼의 데이터들을 정렬해주는 기능을 합니다.

형식을 살펴보면

ORDER BY 절의 형식

 

 

위와 같이 쓸 수 있습니다.

지난 시간에 제가 ' | ' 는 '또는' 이라고 했죠?

저 세가지 중에 하나를 적으시면 됩니다.

ASC 는 오름차순

DESC 는 내림차순 입니다.

자 그럼 사용해보러 갈까요~!

emp 테이블에서 ename 을 기준으로 내림차순 정렬 해보도록 하겠습니다.

 

내림차순 정렬

 

emp 테이블이 ename 을 기준으로 내림차순 된게 보이시나요?

아, 쿼리의 DESC 뒷부분에 mgr 은 두번 째 조건입니다.

ename 을 기준으로 내림차순 할 때, 겹치는 사원들을 mgr 번호의 내림차순으로 정렬 하겠다는 조건입니다.

조건은 두개, 세개도 달 수 있습니다.

오름차순은 DESC 대신에 ASC 를 붙여주시면 되는데요,

기본적으로 DESC 를 붙이지 않으신다면 ASC를 붙이지 않더라도 자동으로 오름차순 정렬됩니다!!

오늘은 WHERE 절 심화와 ORDER BY 절에 대해서 배워보았는데요

좋은 내용이었는지 모르겠습니다^^..

그래도 끝까지 봐주셔서 감사합니다!!

반응형