안녕하세요!
오늘은 지난시간의 내용에 이어서 WHERE 절 기본 및 심화내용과 ORDER BY 절에 대해서 공부해 보도록 하겠습니다!
시작해보도록 하죠~
혹시라도 테이블 데이터가 없거나
지난 시간 내용이 기억나지 않는분들은 아래 버튼을 눌러 확인하고 오시길 바랍니다!
LIKE
시작으로 'LIKE' 부터 공부해보도록 할게요.
LIKE 는 WHERE 절에서 사용 가능한 연산자 중 하나 인데요,
컬럼의 데이터에서 문자의 일부분으로 검색 하고 싶을 때 사용합니다.
형식 : 컬럼명 LIKE '패턴문자열'
위의 형식대로 쿼리를 작성해주시면 되는데요, 제가 지난 시간에 SQL 에서 문자열은 싱글 쿼테이션으로 묶는다고 했죠?
그리고 패턴문자열 안에는 '%' 와 '_' 를 사용해서 데이터를 검색합니다.
이를 마스킹 문자열 이라고 합니다.
1. % : 문자가 없거나, 어떤 문자든 여러개의 문자열을 검색할 때 사용
ex) 'S%' : S로 시작하는 모든 문자열을 검색(S, SS, SMITH 등)
2. _ : 어떤 문자든 딱 하나의 문자를 의미
ex) 'S_' : S로 시작하고 두번째 문자가 어떤 문자든 하나의 문자가 오는 2자리 문자열
'S____' : S로 시작하고 문자열의 길이가 5글자인 문자열
위와 같이 설명 할 수 있겠습니다. 말 보다는 행동이 앞서야죠?
실습 해보도록 하겠습니다.
지난 시간에 보여드렸던 emp의 기본테이블 입니다.
여기에서 LIKE 연산자를 사용해서 ename 커럼의 값이 S로 시작하는 사원들만 조회 해보도록 하죠.
쿼리는 간단하게 위와 같이 작성할 수 있겠습니다.
아래는 결과인데요 ename 컬럼을 보시면 S로 시작하는 사원들만 조회 된것을 보실 수 있씁니다.
그럼 '%' 를 사용해 봤으니 '_' 도 사용해 볼까요?
네. '_' 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 를 사용해서 출력한 결과입니다.
mgr 컬럼의 값이 모두 7698 "이면서" sal 가 1000보다 큰 사원들이 출력되죠?
AND 에서 중요한 부분은 "이면서" 입니다.
즉, 두가지 조건을 모두 만족한다는 것이죠.
그럼 같은 조건으로 OR를 사용해 볼까요?
2. OR
OR를 사용하여 만든 결과입니다.
OR는 AND와 다르게 두 조건 중 하나라도 만족하는 행을 조회한다고 했죠?
그래서 mgr 값이 7698 이거나 sal 이 1000보다 큰 모든 사원들이 조회가 된거죠.
그렇다면 OR에서 가장 중요한 것은 "이거나" 라고 할 수 있겠죠?
3. NOT
그렇다면 이번에는 NOT 연산자를 사용해 보도록 하죠.
mgr 사번이 7698이 아니고, 7839가 아니고, NULL이 아닌 직원들을 조회해 봅시다.
그렇다면 쿼리는 NOT 의 반대인 NOT IN 연산자를 사용하면 되겠죠?!
이렇게 하면 될까요?
네?
돼요?!
된다구요?
아니죠~?
위의 쿼리에서 마지막 웨어절을 풀어서 써보면 이렇게 됩니다.
WHERE mgr NOT IN(7698, 7839, NULL);
==> mgr != 7698 AND mgr != 7839 AND mgr != NULL
집합의 개념을 생각해 보세요.
IN 은 합집합의 관계인데, 집합에서 합집합의 역은 뭔가요?
역의 교집합이죠?
그런데 마지막부분에서 NULL이 != 로 되어 있습니다. 제가 아까 물흐르듯이 넘어가서 모르실수도 있겠지만
NULL 은 != 를 사용한다고 했나요? 아니죠?
그렇다면 올바른 쿼리는~~~~
다음과 같이 되고
결과는 이렇게 나오게 됩니다~
괜찮죠..?
다 이해 하셨으리라 믿습니다.
그렇다면 이제 지난 시간에 배운 내용도 복습할 겸 복잡한 문제를 풀어볼까요?
emp 테이블에서 job이 SALESMAN 이거나, 사원번호가 78로 시작하면서 입사일자가 1981년 6월 1일 이후인
직원의 정보를 조회해보세요.
WHERE 절의 쿼리는 크게 두 부분으로 나눠질 수 있겠네요.
크게 두 부분으로 나눠 보면
1. job이 SALESMAN 이거나,
2. 사원번호가 78로 시작하면서 입사일자가 1981년 6월 1일 이후인 직원의 정보
로 나눌 수 있겠습니다. 물론 2번의 문장도 두 부분으로 나눌 수 있겠죠?
그렇게 쿼리를 작성하고 결과를 출력하면 위와 같이 나오게 됩니다!
ORDER BY
지금까지 잘 따라오셨나요??
그렇다면 마지막으로 ORDER BY 절에 대해서 배워보도록 하겠습니다!
먼저 ORDER BY 절 이라고 하면 쉽게 말해서 컬럼의 데이터들을 정렬해주는 기능을 합니다.
형식을 살펴보면
위와 같이 쓸 수 있습니다.
지난 시간에 제가 ' | ' 는 '또는' 이라고 했죠?
저 세가지 중에 하나를 적으시면 됩니다.
ASC 는 오름차순
DESC 는 내림차순 입니다.
자 그럼 사용해보러 갈까요~!
emp 테이블에서 ename 을 기준으로 내림차순 정렬 해보도록 하겠습니다.
emp 테이블이 ename 을 기준으로 내림차순 된게 보이시나요?
아, 쿼리의 DESC 뒷부분에 mgr 은 두번 째 조건입니다.
ename 을 기준으로 내림차순 할 때, 겹치는 사원들을 mgr 번호의 내림차순으로 정렬 하겠다는 조건입니다.
조건은 두개, 세개도 달 수 있습니다.
오름차순은 DESC 대신에 ASC 를 붙여주시면 되는데요,
기본적으로 DESC 를 붙이지 않으신다면 ASC를 붙이지 않더라도 자동으로 오름차순 정렬됩니다!!
오늘은 WHERE 절 심화와 ORDER BY 절에 대해서 배워보았는데요
좋은 내용이었는지 모르겠습니다^^..
그래도 끝까지 봐주셔서 감사합니다!!
'프로그래밍 > 데이터베이스' 카테고리의 다른 글
[SQL 기초 - 5장] 오라클 SQL 날짜(2), 숫자 표기법 / 조건문 (0) | 2024.12.03 |
---|---|
[SQL 기초 - 4장] 오라클 ROWNUM, 문자열, 숫자 관련 함수(1)를 알아보자! (1) | 2024.11.28 |
[SQL 기초 - 2장] 오라클 SELECT 구문을 배워보자!! (0) | 2024.11.25 |
[SQL 기초 - 1.5장] 오라클에 실습 데이터 넣기 (0) | 2024.11.22 |
[SQL 기초 - 1장] 오라클 테이블스페이스 생성 및 계정 생성하기 (0) | 2024.11.21 |