반응형
오늘은 MYSQL 내 에서 참과 거짓과 관련된 연산자를 알아보고, 쿼리를 짜는 방법에 대해 알아보자.
엑셀을 어느 정도 공부해 본 사람은 TRUE=1 FALSE=0으로 치환된다는 사실을 공부해 본 적이 있을 것이다.
MySQL에서 역시 True(참)는 1로, False(거짓)은 0으로 치환됨을 알고 있자.
또 다른 시각에서 바라보면, True(참)의 반대는 False(거짓)이기 때문에 1의 반대는 0이라고 해석할 수도 있겠다.
1. MySQL에서의 참과 거짓 ( !와 NOT)
프로그래밍에서 느낌표 ! 표시는 '반대'를 뜻한다.
그렇다면 !True는? 참의 반대이므로 거짓이 될 것이고 !False는 거짓의 반대이므로 참이 될 것이다.
NOT(아니다) 역시 MySQL에서는 느낌표 !와 같은 의미로 쓰인다.
Not 1은 참의 반대이므로 0(거짓)이 될 것이고, Not False는 거짓의 반대이므로 1(참)이 될 것이다.
쿼리문을 직접 추출하면서 확인해보자.
직접 하나하나 씩 타이핑 해보면서 True(참)와 False(거짓), 1(참)과 0(거짓) Not과 !의 기능을 체득해보길 권장한다. (한 번도 해당 개념을 접해보지 못했다면 한 동안은 헷갈릴 가능성이 크다.)
그럼 다음과 같은 쿼리를 보면 어떤 생각이 드는가?
SELECT
0 = True,
1 = True,
0 = False,
1 = Fasle;
엥; 0은 False라고 했는데 0 = True 는 False = True라고 했는데 말이 안되는 거 아니야? 라고 생각했다면
잘 생각한 것이다.
False = True가 아니므로 0 = True라는 쿼리는 '거짓'이라는 뜻이 된다. 거짓은 False 이므로 추출하면 '0'이라는 데이터가 도출될 것이다.
아래 결과 값을 보고 본인의 생각과 일치한지 대조해보자.
2. 참/거짓 비교하기 ( IS와 IS NOT )
어렵게 생각하지말고 영어 그대로 순서대로 해석하여 그 쿼리 자체가 참인지 거짓인지만 판단하면 된다.
1) True IS True (참은 참이다) = 말그대로 참이므로 1(참)이 결과값으로 도출된다.
2) True IS NOT False (참은 거짓이 아니다) = 이 말 역시 참이므로 1(참)이 결과값으로 도출된다.
3) False IS Fasle (거짓은 거짓이다) = 참이므로 1(참)이 결과값으로 도출된다.
4) False IS True (거짓은 참이다) = 거짓이므로 0(거짓)이 결과값으로 도출된다.
3. AND와 OR
하나의 식이 아니라 여러개의 식을 참인지 거짓인지 판단해야 할 때가 있다.
쿼리를 실습하기 전에 미리 결론부터 짚고 넘어가자면,
A AND B는 And(그리고) 문이므로 A조건과 B조건을 '모두' 만족할 때만 '참'이 된다.
즉, A와 B조건 중 하나라도 거짓이 있으면 False(0)인 것이다.
반면에, A OR B는 A조건과 B조건 중 '하나만' 충족되어도 '참'이 된다.
위와 같이 2 + 3 = 6이라는 식은 틀렸지만, B조건인 2 * 3 = 6이 참이므로
OR문에서는 참(1)이 도출되는 것이다.
만약 저 OR자리에 AND조건이 들어갔다면 A조건과 B조건을 모두 충족해야 참이므로
거짓(0)이 도출되었을 것이라 유추할 수 있겠다.
AND 자리에는 &&을, OR자리에는 ||로 명령어를 대체할 수 있다.
tip) ||를 알파벳 대문자 I나 소문자 l로 기입하여 오류를 호소하시는 분들이 있는데, 저 수직선표시는
Shift + \ 키로 입력하면 된다.
이렇게 괄호()를 통해 여러 조건을 병행하여 데이터를 도출할 수도 있겠다.
위 커리는 OrderID가 10514이거나(OR) Quantity가 50인 데이터이면서(AND)
ProductID가 20인 데이터를 나타낸다.
4. =(같다) !=, <>(다르다) >(크다), <(작다)
다양한 연산자를 통해 참(True)과 거짓(False)를 서로 비교하며 최종적으로 참(1)인지 거짓(0)인지 값을 도출해 낼 수 있겠다. 시간이 될 때 여러 숫자와 연산자를 이용하여 연산자와 True/False (참/거짓=1/0)개념에 익숙해지도록 하자.
알파벳의 경우 A가 가장 작은 단위, Z가 가장 큰 단위로 친다. A < Z = True
대소문자는 구분하지 않는다.
위와 같이 응용하여 제품 데이터를 불러와서 20보다 큰 값의 가격을 가진 제품은 비쌈(1=참)으로 체크할 수 있게 데이터를 불러올 수 있다.
5. 연산자: 사이에 있는 값 (BETWEEN A AND B)
A와 B사이에 있는 값을 비교하여 참인지 거짓인디 도출하는 BETWEEN A AND B 쿼리이다.
위 쿼리에서는 5가 1과 10사이에 있음의 참거짓을 구분했을 때 '참'이 나오므로 1(참)이 결과값으로 나왔다.
*만약 위 커리에서 1 AND 10이 아니라 10 AND 1처럼 큰숫자가 앞으로 오면 다른 값이 도출되니 반드시 작은 숫자를 앞에 기입하도록 하자.
숫자 대신 문자열이 들어갔을 때와 Between 앞에 NOT이 붙었을 때도 마찬가지이다.
쿼리를 해석하면 Banana는 Apple와 camera사이에 있지 않다. 라는 뜻이므로 거짓이다. 고로 0(FALSE)라는 결과 값이 도출되는 것이다. (앞서 말했듯이 알파벳은 대소문자를 구분하지 않는다.)
6. 연산자: IN, NOT IN (사이에 있다, 사이에 없다)
어떠한 값이 IN 뒤에 오는 범주에 속하는지 참/거짓을 판단하는 구문이다.
1 + 2 IN (2, 3, 4)라는 쿼리는 곧, 1 + 2의 결과가 2, 3, 4 중에 있냐? 라는 뜻이다.
참에 해당하므로 결과는 1(참)으로 도출됨을 확인하였다.
만약 IN이 아니라 NOT IN을 대입했다면 "1+2는 2, 3, 4 중에 포함되지 않는다"는 쿼리이므로 거짓(0)이 도출된다.
앞서 우리는 OR문을 통해 A혹은 B혹은 C조건에 하나이상 해당하면 그 데이터를 불러오는 쿼리를 만들어 보았다.
이 긴 쿼리를 IN 을 통해 위처럼 쉽게 구현할 수 있다.
'City'가 Torino, Paris, Madrid, Portland에 해당하는 데이터들을 불러올 때 OR문을 사용해 긴 문장의 쿼리를 작성할 필요가 없어졌다.
7. 패턴에 의한 참/거짓 판단 (Like)
이제 Like문을 활용해 패턴의 위치에 따른 일치유무로 참 거짓을 판단하고자 한다.
우선 쿼리와 결과값을 먼저 보고 설명을 보자.
1. HELLO라는 문자열과 LIKE 뒤에오는 문자열과 비교하여 참 거짓을 판단한다.
2. H%는 'H로 시작하는 단어'로 해석한다.
3. %O는 'O로 끝나는 단어'로 해석한다.
4. H%O는 'H로 시작하고 O로 끝나는 단어로 해석한다.
5. %HELLO%는 문자열 사이에 'HELLO'라는 문자열이 포함되어있는 단어로 해석한다.
즉 LIKE를 기준으로 좌변문자열(HELLO)와 우변문자열이 참인지 거짓인지 결과를 나타낸다고 볼 수 있다.
즉 방정식에서 x에 해당하는 미지수롤 %로 표현했는데, 아래와 같은 경우는 어떨까?
비슷한 공식인데 마지막 세 개가 0(거짓)으로 도출되었다. %대신에 _가 들어갔을 뿐인 것 같은데 왜 거짓으로 판단되는 걸까?
바로, H%는 H뒤에 몇개의 문자가 오든 H로 시작하면 참으로 인지하지만, H_는 언더바( _ 모양 )개수까지 참 거짓을 판단하는 기준이 되기 때문이다.
즉, LIKE 문에서 _ 기호를 사용했을 때 'HELLO' LIKE 'H____' 처럼 ELLO에 해당하는 언더바 _가 4개가 와야 참(1)으로 인식되는 것이다.
8. LIKE 문 현업에서 활용하기
8-1) 데이터베이스에서 Employees라는 테이블을 불러와 그 하위항목 중 NOTE라는 항목에서 'economics'라는 단어가 '포함'되어 있는 데이터를 뽑고싶다면 어떻게 해야 할까? 직접 쿼리를 작성해보고 아래 정답과 비교해보자.
8-2) Orderdetails라는 테이블에서 1025로 시작하는 '다섯자리 수'의 OrderID를 가진 데이터를 출력하고자 할 때 쿼리를 짜보고 아래 정답과 비교해보자.
반응형
'Skills > MySQL' 카테고리의 다른 글
3. MySQL 숫자와 문자열을 다루는 함수들 (초보자 MySQL 강좌) (0) | 2022.04.18 |
---|---|
2. MySQL 각종 연산 쿼리 - 사칙연산, 할인가격, 참/거짓 (초보자 무작정 따라하기) (0) | 2022.04.16 |
1. MySQL 데이터 불러오기, 조건문, 주석, ORDER BY (초보자 무작정 따라하기) (0) | 2022.04.16 |