이미지 출처 : https://076923.github.io/posts/mysql-1/
W3School : https://www.w3schools.com/mysql/trymysql.asp?filename=trysql_select_all
다양한 연산자들을 공부해보겠습니다.
MySQL에서는 어떤 테이블을 선택하지 않아도 아래와 같이 select문으로 특정값을 추출 가능!!
SELECT 1 + 2;
# 원하는 컬럼명으로 가져오기 SELECT 5 - 2.5 AS DIFFERENCE, 10 % 3;
# 문자열에 원하는 사칙연산을 하면 문자열은 0으로 변환 SELECT 'ABC' + 3;
# OrderID열과 ProductID열을 합친다. SELECT OrderID, ProductID, OrderID + ProductID FROM OrderDetails;
MySQL에서 TRUE는 1로, FALSE는 0으로 표시됩니다.
SELECT TRUE, FALSE;
# 프로그래밍에서 느낌표가 어떤 값 앞에 붙으면 그것의 반대, 즉 참이라면 거짓이고 거짓이면 참으로 표시된다. # NOT 역시 !표와 같은 기능 SELECT !TRUE, NOT 1, !FALSE, NOT FALSE;
만약 Customers 테이블을 가져오는데 WHERE TRUE를 조건으로 하면 어떤 결과가 나올까요?
SELECT * FROM Customers WHERE TRUE;
반대로 하면 아무것도 선택되지 않습니다.
SELECT * FROM Customers WHERE FALSE;
# 참은 참이니까 1이 나오겠죠! SELECT TRUE IS TRUE;
# NOT FALSE는 TRUE이므로 참은 참이됩니다. SELECT TRUE IS NOT FALSE;
# TRUE AND FALSE는 FALSE가 0이기에 값은 FALSE가 나오고 TRUE OR FALSE는 한쪽만 TRUE이면 TRUE이기에 값이 TRUE가 나옵니다. SELECT TRUE AND FALSE, TRUE OR FALSE;
Products 테이블에서 제품이름이 'Tofu' 이거나 카테고리아이디가 8인 데이터를 출력하고 싶다면 아래처럼 쿼리를 만들면 됩니다.
SELECT * FROM Products WHERE ProductName = 'Tofu' OR CategoryId = 8;
SELECT 1 = 1, !(1 <> 1), NOT (1 < 2), 1 > 0 IS NOT FALSE;
# 알파벳 순서상 나중에 오는 것이 더크다 SELECT 'Apple' > 'Banana' OR 1 < 2 IS TRUE;
# MySql의 기본 사칙연산자는 대소문자 구분 X SELECT 'A' = 'a';
Products 테이블에서 제품이름과 가격 그리고 가격이 20보다 큰지 여부를 출력한다. 하지만 앞에 NOT이 있으므로 반대로 20보다 큰것들은 0으로 출력되겠죠?
SELECT ProductName, Price, NOT Price > 20 AS CHEAP FROM Products;
BETWEEN {MIN} AND {MAX} - 두 값 사이에 있음
NOT BETWEEN {MIN} AND {MAX} - 두 값 사이가 아닌 곳에 있음
# 5는 1과 10사이에 있으므로 TRUE인 1이 출력 SELECT 5 BETWEEN 1 AND 10;
# B보다 크고 C보다 작다는 것은 B로 시작하는 글자들을 의미 SELECT * FROM Customers WHERE CustomerName BETWEEN 'b' AND 'c';
IN (...) - 괄호 안의 값들 가운데 있음
NOT IN (...) - 괄호 안의 값들 가운데 없음
# 3은 괄호 안에 있다. SELECT 1 + 2 IN (2, 3, 4)
# city가 토리노, 파리, 포틀랜드, 마드리드인 데이터만 추출 SELECT * FROM Customers WHERE City IN ('Torino', 'Paris', 'Portland', 'Madrid')
LIKE '... % ...' - 0~N개 문자를 가진 패턴
LIKE '... _ ...' - _ 갯수만큼의 문자를 가진 패턴
# ex) hel 다음에 N개의 문자가 오면 TRUE SELECT 'HELLO' LIKE 'hel%', 'HELLO' LIKE 'H%', 'HELLO' LIKE 'H%O', 'HELLO' LIKE '%O', 'HELLO' LIKE '%HELLO%', 'HELLO' LIKE '%H', 'HELLO' LIKE 'L%'
%H는 H로 끝나면서 앞에 문자가 와야 하는데 'HELLO'는 맞지 않는다.
# _(언더스페이스)는 한개의 문자만을 의미 SELECT 'HELLO' LIKE 'HEL__', 'HELLO' LIKE 'h___O', 'HELLO' LIKE 'HE_LO', 'HELLO' LIKE '_____', 'HELLO' LIKE '_HELLO', 'HELLO' LIKE 'HEL_', 'HELLO' LIKE 'H_O'
'HEL_'은 언더바가 1개뿐이라 'HELLO'와 같지 않다.
Notes열에서 economics가 포함된 데이터만 추출
SELECT * FROM Employees WHERE Notes LIKE '%economics%'