MySQL & SQL (연산자)

윤태영·2024년 6월 19일
0
post-thumbnail

이미지 출처 : https://076923.github.io/posts/mysql-1/
W3School : https://www.w3schools.com/mysql/trymysql.asp?filename=trysql_select_all

다양한 연산자들을 공부해보겠습니다.

사칙연산 📕

  • +, -, *, / - 각각 더하기, 빼기, 곱하기, 나누기
  • %, MOD - 나머지

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;

  • IS - 양쪽이 모두 TRUE 또는 FALSE
    - IS NOT - 한쪽은 TRUE, 한쪽은 FALSE
# 참은 참이니까 1이 나오겠죠!
SELECT TRUE IS TRUE;

# NOT FALSE는 TRUE이므로 참은 참이됩니다.
SELECT TRUE IS NOT FALSE;

  • AND, && - 양쪽이 모두 TRUE일 때만 TRUE
  • OR, || - 한쪽은 TRUE면 TRUE
# 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%'
profile
ice blue

0개의 댓글