[SQL] WHERE (Part 1)
WHERE가 뭐지?
WHERE은 어디에, 어디로, 어디에서와 같은 뜻으로 알고 있을 거에요.
맞아요! 앞장에서 DML(기억이 안난다면 클릭!)을 하면서 모든 데이터가 한번에 지워지고, 한번에 바뀌고 그래서 원하는대로 못했어요.
하지만 이번에는 바로 이 "WHERE"를 이용해서 내가 어디에 데이터를 원하는지 알려 줄거에요!
그리고 데이블들을 연결시켜주는 "JOIN"이라는 일도 해준답니다. JOIN은 나중에 자세하게 이야기 해봐요!
Part1에는 WHERE절의 기본과 간단한 예시, 그리고 비교연산자와 논리연산자를 포스팅하고
Part2에는 SQL연산자, 부정비교 연산자, 부정 SQL연산자를 포스팅 할 예정입니다~
오른쪽 +버튼을 이용한 실습! |
오른쪽에 빨간색 버튼을 누르면 ORACLE Live SQL이 나옵니다. 거기에 실습내용을 모두 모아놨습니다! |
지금 부터 SQL이 재밌어지는 시간입니다!! 바로 한번 볼까요?
기본형식 |
SELECT 칼럼명 [ALIAS명] FROM 테이블명 WHERE 조건식; |
SELECT문으로 원하는 컬럼명이나 모든 컬럼 등을 선택하고 별칭을 지정할 수 있습니다. FROM 테이블명으로 원하는 테이블을 선택할 수 있습니다.
WHERE문과 그 뒤에 조건식을 이용해서 원하는 컬럼에 조건을 만들어 원하는 데이터를 선택할 수 있습니다! |
연산자의 종류 및 연산 우선순위
Part1에서 배울 연산자 목록
연산자 종류 | 연산자 | 연산자의 의미 |
비교 연산자 | = | 두 연산자가 같다. |
> | 두 연산자 중 왼쪽 연산자가 더 크다. | |
>= | 두 연산자 중 왼쪽 연산자가 더 크거나 같다. | |
< | 두 연산자 중 오른쪽 연산자가 더 크다. | |
<= | 두 연산자 중 오른쪽 연산자가 더 크거나 같다. | |
논리 연산자 | AND | 조건식이 2개 이상일 때 모든 조건식이 참(True)인 조건을 선택한다. |
OR | 조건식이 2개 이상인 경우 하나이상의 조건에서만 참인 조건를 선택한다. | |
NOT | 뒤에 오는 조건과 반대되는 결과를 되돌려준다. |
연산자의 우선순위
연산자 우선순위 | |
1 | 괄호 ( ) |
2 | NOT 연산자 |
3 | 비교 연산자 |
4 | AND |
5 | OR |
연산자 우선순위로는 1. 괄호로 묶은 연산이 제일 먼저 연산 처리된다. 2. 연산자들 중에는 부정 연산자(NOT)가 먼저 처리된다. 3. 비교 연산자(=,>,>=,<,<=)가 처리된다. 4. 논리 연산자 중에서는 AND, OR의 순으로 처리된다.
TIP! |
만약 이러한 연산에 있어서 연산자들의 우선순위를 염두에 두지 않고 WHERE 절을 작성한다면 테이블에서 자기가 원하는 자료를 찾지 못하거나, 혹은 틀린 자료인지도 모른 채 사용할 수도 있다. 실수하기 쉬운 비교 연산자와 논리 연산자의 경우 괄호를 사용해서 우선순위를 표시하는 것을 추천한다!! |
우리가 실습할 기본 데이터
우리가 실습할 데이터를 간단하게 소개합니다.
FAMILY 테이블
가족 테이블입니다!
이 데이터를 이용해서 WHERE 절을 실습해봅시다!
비교연산자
비교연산자는 여러분들이 수학에서 알고 있는 연사자와 아주 비슷한 형태에요.
비교 연산자 | = | 두 연산자가 같다. |
> | 두 연산자 중 왼쪽 연산자가 더 크다. | |
>= | 두 연산자 중 왼쪽 연산자가 더 크거나 같다. | |
< | 두 연산자 중 오른쪽 연산자가 더 크다. | |
<= | 두 연산자 중 오른쪽 연산자가 더 크거나 같다. |
비교연산자를 이용한 실습내용을 적어놨어요. 옆에 빨간색 +를 눌러서 실습해 봅시다!
연산자 | 내용 |
> |
SELECT * FROM FAMILY WHERE AGE > 20; 나이가 20살 이상인 가족 구성원의 컬럼정보를 모두를 보여준다. |
< |
SELECT * FROM FAMILY WHERE HEIGHT < 180; 키가 180cm 이하인 가족 구성원의 컬럼정보를 모두를 보여준다. |
= |
=을 사용하는 예제는 직접 작성해 보세요! 나이가 24살인 가족 구성원의 컬럼정보를 보여주는 예제를 직접 작성해봅시다!! |
문자 비교연산자
문자 비교연산자는 문자들도 비교할 수 있는 연산자에요!
다른 특별한 것이 있을까요? 전혀요! 사용법은 비슷해요 하지만 몇가지 추가되는 부분이 있어요!
문자열을 만드는 데이터 타입은 2개라고 배웠었죠? 혹시 기억이 안난다면 클릭해요!
바로 VARCHAR와 CHAR를 비교하거나 문자와 숫자를 비교하는 부분입니다.
연산자 | 비교 방법 |
비교하는 연산자가 둘 다 CHAR인 경우 |
길이가 서로 다른 CHAR형 타입이면 작은 쪽에 공백(SPACE)를 추가해서 길이를 같게 한 뒤 비교한다. 서로 다른 문자가 나올 때까지 비교한다.
달라진 첫 번째 문자에 따라 크기를 결정한다. ✔ 두 문자의 크기비교는 순서로 정한다. 빠른순서의 문자열이 더 큰 값을 가진다.
만약 공백의 수만 다르다면 같은 문자라고 판단한다. |
비교하는 연산자의 한 쪽이 VARCHAR유형인 경우 |
서로 다른 문자가 나올 때까지 비교한다. 길이가 다르면 끝날 때까지만 비교한 뒤 길이가 긴것이 크다고 판단
길이가 같고 다른것이 없다면 같다고 판단한다. |
상수값과 문자열을 비교할 경우 |
상수 쪽을 변수타입과 동일하게 바꾼뒤 비교한다. 변수쪽이 CHAR유형이면 CHAR 유형타입을 적용하고 VARCHAR유형이면 VARCHAR유형타입을 적용하여 비교한다. |
TIP! |
문자열을 비교할 때는 문자열을 입력하고 다루는 것과 동일하게 ''(따음표)를 반드시 넣어준다. |
문자를 비교연산자를 이용한 실습내용을 적어놨어요. 옆에 빨간색 +를 눌러서 실습해 봅시다!
내용 |
SELECT * FROM FAMILY WHERE F_NAME = 'HYEON'; 이름이 HYEON인 사람의 모든 컬럼정보를 검색합니다. |
깜짝문제!! |
형제가 2명 이상일 수 있어요!! BROTHER를 한명 더 추가하고
모든 BROTHER의 정보를 조회해 봅시다!! |
HINT 정보를 추가하는 INSERT를 사용하고 가족테이블의 WHO를 비교해보면 되겠죠? |
논리연산자
논리연산자는 논리적으로 맞는지 아닌지를 말해주는 연산자에요! 이렇게 말하니 느낌이 잘 안오죠?
AND는 조건들이 모두 맞아야 맞는 깐깐한 연산자에요.
OR는 조건들중 하나만 맞으면 되는 널널한 연산자에요.
NOT는 조건에 반대되는 결과를 보여주는 연산자에요.
조건1 | 조건2 | 결과 |
참 | 참 | 참 |
참 | 거짓 | 거짓 |
거짓 | 참 | 거짓 |
거짓 | 거짓 | 거짓 |
AND 연산자를 보면 조건 1과 2가 참인경우만이 결과에 참으로 나왔어요! 두 조건중 하나의 조건이라도 거짓이라면 깐깐한 AND는 거짓이라는 결과를 보여줍니다!
조건1 | 조건2 | 결과 |
참 | 참 | 참 |
참 | 거짓 | 참 |
거짓 | 참 | 참 |
거짓 | 거짓 | 거짓 |
OR연산자는 조건 1과 2중에 하나의 경우만 참인 경우에 결과가 참으로 나왔어요! 두 조건중 하나의 조건이라도 참이라면 널널한 OR연산자는 참이러는 결과를 보여줍니다!
조건1 | 결과 |
참 | 거짓 |
거짓 | 참 |
NOT연산자는 조건 1의 결과를 반대로 만들어줍니다! 조건 1이 참인 경우 거짓으로 거짓인 경우는 참으로 변했네요! NOT연산자는 조건의 내용을 반대되는 결과를 보여줍니다!
논리연산자 예제
교연산자를 이용한 실습내용을 적어놨어요. 옆에 빨간색 +를 눌러서 실습해 봅시다!
연산자 | 내용 |
AND |
SELECT * FROM FAMILY WHERE AGE > 20 AND HEIGHT > 170; 나이가 20살 이상이고 키가 170이상인 가족 구성원의 컬럼정보를 모두를 보여준다. |
OR |
SELECT * FROM FAMILY WHERE HEIGHT < 180 OR AGE > 20; 키가 180cm 이하 거나 나이가 20살이상인 가족 구성원의 컬럼정보를 모두를 보여준다. |
NOT |
SELECT * FROM FAMILY WHERE NOT AGE > 20; 나이가 20살이상인 가족 구성원을 제외하고 나머지 가족의 모든 컬럼정보를 보여준다. |
응용 |
SELECT * FROM FAMILY WHERE (AGE > 20 OR HEIGHT >165) AND WHO = 'BROTHER'; 나이가 20살이상 이거나 키가165 이상인 사람중에서 BROTHER인 가족의 모든 컬럼정보를 보여준다. |
깜짝문제!!! |
응용예시를 이용해서 나이가 10살에서 30살 사이에 사람들중에 키가 170 이상인 사람들의 이름을 보고 싶어요! |