MariaDB์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ ์ฐ์ฐ์์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ์ฐ์ฐ์๋ SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๋ฐ์ ํ์์ ์ธ ์์๋ก, ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๊ณ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป๋ ๋ฐ์ ์ฌ์ฉ๋ฉ๋๋ค.
โฃ ๋ชฉ์ฐจ

์ฐ์ ์ฐ์ฐ์๐ข
์ฐ์ ์ฐ์ฐ์๋ ์ซ์ ๋ฐ์ดํฐ ํ์ ๊ฐ์ ์ํ์ ์ธ ๊ณ์ฐ์ ์ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. MariaDB์์๋ ๋ค์๊ณผ ๊ฐ์ ์ฐ์ ์ฐ์ฐ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋ง์ +
- ๋บ์ -
- ๊ณฑ์ *
- ๋๋์ /
์๋ฅผ ๋ค์ด, ์ฃผ๋ฌธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ ํ ๊ฐ๊ฒฉ์ ์กฐ์ ํ๊ฑฐ๋ ํ ์ธ์จ์ ์ ์ฉํ๋ ๋ฑ์ ์์ ์ ์ฐ์ ์ฐ์ฐ์๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
SELECT price * 0.9 AS discounted_price
FROM products;
์์ ์ฟผ๋ฆฌ๋ ์ ํ์ ๊ฐ๊ฒฉ์ 10% ํ ์ธ์จ์ ์ ์ฉํ ๊ฐ๊ฒฉ์ ์กฐํํฉ๋๋ค.
๋น๊ต ์ฐ์ฐ์โณ
๋น๊ต ์ฐ์ฐ์๋ ๊ฐ์ ๋น๊ตํ๊ณ ๋ ผ๋ฆฌ์ ์ธ ์กฐ๊ฑด์ ํ๊ฐํ๋ ๋ฐ์ ์ฌ์ฉ๋ฉ๋๋ค. MariaDB์์๋ ๋ค์๊ณผ ๊ฐ์ ๋น๊ต ์ฐ์ฐ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋ฑํธ =: ๋ ๊ฐ์ด ๋์ผํ์ง ํ์ธํฉ๋๋ค.
- ๋ถ๋ฑํธ >, <: ํ๋์ ๊ฐ์ด ๋ค๋ฅธ ๊ฐ๋ณด๋ค ํฐ์ง ๋๋ ์์์ง ํ์ธํฉ๋๋ค.
- ํฌ๊ฑฐ๋ ๊ฐ์ >=: ํ๋์ ๊ฐ์ด ๋ค๋ฅธ ๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์์ง ํ์ธํฉ๋๋ค.
- ์๊ฑฐ๋ ๊ฐ์ <=: ํ๋์ ๊ฐ์ด ๋ค๋ฅธ ๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ง ํ์ธํฉ๋๋ค.
- ๊ฐ์ง ์์ != ๋๋ <>: ๋ ๊ฐ์ด ๋ค๋ฅธ์ง ํ์ธํฉ๋๋ค.
๊ฐ๋ น, ์ฃผ๋ฌธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํน์ ๊ฐ๊ฒฉ ๋ฒ์์ ์ํ๋ ์ ํ์ ๊ฒ์ํ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ์ด๋ฅผ ์ํด ๋ฑํธ(=)์ ๋ถ๋ฑํธ(<, >)๋ฅผ ์ด์ฉํ์ฌ ์ ์ ํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
-- ํน์ ๊ฐ๊ฒฉ ๋ฒ์์ ์ํ๋ ์ ํ ๊ฒ์ ์์
-- 100์์ 200 ์ฌ์ด์ ๊ฐ๊ฒฉ์ ๊ฐ์ง ์ ํ ๊ฒ์
SELECT *
FROM products
WHERE price >= 100 AND price <= 200;
-- ํน์ ๊ฐ๊ฒฉ ์ดํ์ ์ ํ ๊ฒ์
SELECT *
FROM products
WHERE price <= 50;
-- ํน์ ๊ฐ๊ฒฉ ์ด์์ ์ ํ ๊ฒ์
SELECT *
FROM products
WHERE price >= 500;
์์ ์์ ์์๋ ๊ฐ๊ฐ ํน์ ๊ฐ๊ฒฉ ๋ฒ์์ ์ํ๋ ์ ํ์ ๊ฒ์ํ๋ ์ฟผ๋ฆฌ๋ฅผ ๋ณด์ฌ์ค๋๋ค. ๋ฑํธ(=)์ ๋ถ๋ฑํธ(<, >)๋ฅผ ์กฐํฉํ์ฌ ์ํ๋ ์กฐ๊ฑด์ ์ค์ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ์ํ ์ ๋ณด๋ฅผ ์ฝ๊ฒ ์ถ์ถํ ์ ์์ต๋๋ค.
๋ ผ๋ฆฌ ์ฐ์ฐ์๐ก
๋ ผ๋ฆฌ ์ฐ์ฐ์๋ SQL ์ฟผ๋ฆฌ์์ ์ฌ๋ฌ ์กฐ๊ฑด์ ๊ฒฐํฉํ์ฌ ๋ณต์กํ ๋ ผ๋ฆฌ์ ์กฐ๊ฑด์ ๊ตฌ์ฑํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. MariaDB์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ ๋ ผ๋ฆฌ ์ฐ์ฐ์๋ AND, OR, NOT์ ๋๋ค. ์ด๋ฌํ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ์ ํํฐ๋ง ์กฐ๊ฑด์ ๋ ์ธ๋ถ์ ์ผ๋ก ์ ์ํ ์ ์์ต๋๋ค.
- AND: ๋ ์กฐ๊ฑด์ด ๋ชจ๋ ์ฐธ์ผ ๋ ์ฐธ์ ๋ฐํํฉ๋๋ค.
- OR: ๋ ์กฐ๊ฑด ์ค ํ๋๋ผ๋ ์ฐธ์ผ ๋ ์ฐธ์ ๋ฐํํฉ๋๋ค.
- NOT: ์กฐ๊ฑด์ด ๊ฑฐ์ง์ผ ๋ ์ฐธ์ ๋ฐํํ๊ณ , ์ฐธ์ผ ๋ ๊ฑฐ์ง์ ๋ฐํํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ ํ์ ๊ฐ๊ฒฉ์ด ํน์ ๋ฒ์ ๋ด์ ์๋ ์ ํ์ ๊ฒ์ํ๋๋ฐ ๋ ผ๋ฆฌ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
SELECT *
FROM products
WHERE price > 100 AND price < 200;
์์ ์ฟผ๋ฆฌ๋ ๊ฐ๊ฒฉ์ด 100์์ 200 ์ฌ์ด์ธ ๋ชจ๋ ์ ํ์ ๊ฒ์ํฉ๋๋ค.
๋นํธ ์ฐ์ฐ์๐ฉโ๐ป
๋นํธ ์ฐ์ฐ์๋ ๋นํธ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. MariaDB๋ ์ฌ๋ฌ ๋นํธ ์ฐ์ฐ์๋ฅผ ์ ๊ณตํ๋ฉฐ, ์ด๋ ์ฃผ๋ก ์ ์ ๊ฐ์ ๋นํธ๋ฅผ ์ง์ ์กฐ์ํ ํ์๊ฐ ์์ ๋ ์ ์ฉํฉ๋๋ค. ๋นํธ ์ฐ์ฐ์๋ ๋ ผ๋ฆฌ์ AND, OR, XOR, NOT ๋ฐ ์ํํธ ์ฐ์ฐ์ ํฌํจํฉ๋๋ค.
- ๋นํธ AND (&): ๋ ๋นํธ๊ฐ ๋ชจ๋ 1์ผ ๋ 1์ ๋ฐํํฉ๋๋ค.
- ๋นํธ OR (|): ๋ ๋นํธ ์ค ํ๋๋ผ๋ 1์ผ ๋ 1์ ๋ฐํํฉ๋๋ค.
- ๋นํธ XOR (^): ๋๋นํธ๊ฐ ๋ค๋ฅผ ๋ 1์ ๋ฐํํฉ๋๋ค.
- ๋นํธ NOT (~): ๋นํธ๋ฅผ ๋ฐ์ ์ํต๋๋ค. (1์ 0์ผ๋ก, 0์ 1๋ก)
-- ๋นํธ AND (&): ๋ ๋นํธ๊ฐ ๋ชจ๋ 1์ผ ๋ 1์ ๋ฐํํฉ๋๋ค.
SELECT 5 & 3 AS bit_and_result;
-- ๊ฒฐ๊ณผ: 1 (5๋ 101, 3์ 011, AND ์ฐ์ฐ ๊ฒฐ๊ณผ๋ 001)
-- ๋นํธ OR (|): ๋ ๋นํธ ์ค ํ๋๋ผ๋ 1์ผ ๋ 1์ ๋ฐํํฉ๋๋ค.
SELECT 5 | 3 AS bit_or_result;
-- ๊ฒฐ๊ณผ: 7 (5๋ 101, 3์ 011, OR ์ฐ์ฐ ๊ฒฐ๊ณผ๋ 111)
-- ๋นํธ XOR (^): ๋ ๋นํธ๊ฐ ๋ค๋ฅผ ๋ 1์ ๋ฐํํฉ๋๋ค.
SELECT 5 ^ 3 AS bit_xor_result;
-- ๊ฒฐ๊ณผ: 6 (5๋ 101, 3์ 011, XOR ์ฐ์ฐ ๊ฒฐ๊ณผ๋ 110)
-- ๋นํธ NOT (~): ๋นํธ๋ฅผ ๋ฐ์ ์ํต๋๋ค. (1์ 0์ผ๋ก, 0์ 1๋ก)
SELECT ~5 AS bit_not_result;
-- ๊ฒฐ๊ณผ: -6 (5๋ 101, NOT ์ฐ์ฐ ๊ฒฐ๊ณผ๋ 010, 2์ ๋ณด์๋ฒ์ผ๋ก ์ธํด -6)
์๋ฅผ ๋ค์ด, ํน์ ๋นํธ๋ฅผ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ๊ฑฐ๋ ํด๋
ํ๋ ์์
์ ๋นํธ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
SELECT id, name
FROM users
WHERE role & 2 = 2;
์์ ์ฟผ๋ฆฌ๋ ์ฌ์ฉ์์ ์ญํ (role)์ด 2๋ฒ ๋นํธ๊ฐ ์ค์ ๋ ์ฌ์ฉ์๋ฅผ ๊ฒ์ํฉ๋๋ค.
ํจํด๋งค์นญ ์ฐ์ฐ์๐ฏโ
ํจํด ๋งค์นญ ์ฐ์ฐ์๋ ์ ๊ท ํํ์์ ์ฌ์ฉํ์ฌ ํน์ ํ ํจํด์ ๊ฒ์ํ๊ฑฐ๋ ์ถ์ถํ๋ ๋ฐ์ ์ฌ์ฉ๋ฉ๋๋ค. MariaDB์์๋ LIKE ์ฐ์ฐ์์ REGEXP ์ฐ์ฐ์๋ฅผ ํตํด ํจํด ๋งค์นญ์ ์ํํ ์ ์์ต๋๋ค.
LIKE ์ฐ์ฐ์
LIKE ์ฐ์ฐ์๋ ๋ฌธ์์ด์ด ํน์ ํ ํจํด์ ๋ฐ๋ฅด๋์ง๋ฅผ ๊ฒ์ฌํฉ๋๋ค. ์ด ๋ ์ฌ์ฉ๋๋ ์์ผ๋์นด๋๋ก๋ %๊ฐ ์์ผ๋ฉฐ, ์ด๋ ์์์ ๋ฌธ์์ด์ ๋ํ๋
๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์์ ์ฟผ๋ฆฌ๋ ์ด๋ฉ์ผ ์ฃผ์๊ฐ "@gmail.com"์ผ๋ก ๋๋๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํฉ๋๋ค.
SELECT *
FROM users
WHERE email LIKE '%@gmail.com';
์์ ์ฟผ๋ฆฌ์์ %๋ "@gmail.com" ์์ ์๋ ์์์ ๋ฌธ์์ด์ ๋ํ๋
๋๋ค.
REGEXP ์ฐ์ฐ์
REGEXP ์ฐ์ฐ์๋ MariaDB์์ ์ ๊ท ํํ์์ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด ํจํด์ ๋งค์นญํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ์ ๊ท ํํ์์ ๋ฌธ์์ด์์ ํน์ ํจํด์ ๊ฒ์ํ๊ณ ์ถ์ถํ ์ ์๊ฒ ํด์ฃผ๋ ํํ์์ ๋๋ค. REGEXP๋ ๋ณต์กํ ๋ฌธ์์ด ๊ฒ์์ด ํ์ํ ๋ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
โถ ๊ธฐ๋ณธ ๋ฌธ๋ฒ
SELECT *
FROM table_name
WHERE column_name REGEXP 'pattern';
โถ ์ ๊ท ํํ์ ํจํด
- ^: ๋ฌธ์์ด์ ์์์ ๋ํ๋ ๋๋ค.
- $: ๋ฌธ์์ด์ ๋์ ๋ํ๋ ๋๋ค.
- .: ์์์ ํ ๋ฌธ์๋ฅผ ๋ํ๋ ๋๋ค.
- [abc]: ๊ดํธ ์์ ๋ฌธ์ ์ค ํ๋์ ์ผ์นํฉ๋๋ค.
- [^abc]: ๊ดํธ ์์ ๋ฌธ์ ์ธ์ ํ๋์ ์ผ์นํฉ๋๋ค.
- [a-z]: ํน์ ๋ฒ์์ ๋ฌธ์์ ์ผ์นํฉ๋๋ค.
- a|b: a ๋๋ b์ ์ผ์นํฉ๋๋ค.
- *: 0๊ฐ ์ด์์ ์์ ํจํด๊ณผ ์ผ์นํฉ๋๋ค.
- +: 1๊ฐ ์ด์์ ์์ ํจํด๊ณผ ์ผ์นํฉ๋๋ค.
- ?: 0๊ฐ ๋๋ 1๊ฐ์ ์์ ํจํด๊ณผ ์ผ์นํฉ๋๋ค.
- {m}: ๋ฐ๋ก ์์ ์๋ ๋ฌธ์๊ฐ mํ ๋ฐ๋ณต๋ฉ๋๋ค.
- {m, n}: ๋ฐ๋ก ์์ ์๋ ๋ฌธ์๊ฐ mํ๋ถํฐ nํ๊น์ง ๋ฐ๋ณต๋ฉ๋๋ค.
โถ ์์ ) ๋ฌธ์์ด์ด 'A'๋ก ์์ํ๋ ๊ฒฝ์ฐ ๊ฒ์:
SELECT *
FROM users
WHERE name REGEXP '^A';
โถ์์ ) ๋ฌธ์์ด์ด ์ซ์๋ก ๋๋๋ ๊ฒฝ์ฐ ๊ฒ์:
SELECT *
FROM users
WHERE name REGEXP '[0-9]$';
โถ์์ ) ๋ฌธ์์ด์ 'cat' ๋๋ 'dog'์ด ํฌํจ๋ ๊ฒฝ์ฐ ๊ฒ์:
SELECT *
FROM articles
WHERE content REGEXP 'cat|dog';
โถ์์ ) ์ด๋ฉ์ผ ํ์์ด ์ฌ๋ฐ๋ฅธ์ง ํ์ธ (๊ฐ๋จํ ์):
SELECT *
FROM users
WHERE email REGEXP '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$';
์ ๊ท ํํ์์ ๊ฐ๋ ฅํ ๊ฒ์ ๋ฐ ํ
์คํธ ์กฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ๋ค์ํ ํจํด ๋งค์นญ ์์
์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด MariaDB์์ ๋ณต์กํ ๋ฌธ์์ด ๊ฒ์์ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์์ต๋๋ค.
NULL ์ฐ์ฐ์๐ฌ
NULL ์ฐ์ฐ์๋ SQL์์ NULL ๊ฐ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. NULL์ "๊ฐ์ด ์์"์ ์๋ฏธํ๋ฉฐ, ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํน์ ์ด์ด ๋น์ด ์๊ฑฐ๋ ์ ์๋์ง ์์ ์ํ๋ฅผ ๋ํ๋ ๋๋ค. MariaDB์์ NULL ๊ฐ์ ๋ค๋ฃจ๊ธฐ ์ํด ์ฌ๋ฌ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- IS NULL: ์ด์ด NULL ๊ฐ์ ๊ฐ์ง๋์ง ํ์ธํฉ๋๋ค.
- IS NOT NULL: ์ด์ด NULL ๊ฐ์ ๊ฐ์ง์ง ์๋์ง ํ์ธํฉ๋๋ค.
์๋ ์ฟผ๋ฆฌ๋ ๊ณ ๊ฐ ID๊ฐ NULL์ธ ๋ชจ๋ ์ฃผ๋ฌธ์ ๊ฒ์ํฉ๋๋ค.
SELECT *
FROM orders
WHERE customer_id IS NULL;
์๋ ์ฟผ๋ฆฌ๋ ๊ณ ๊ฐ ID๊ฐ NULL์ด ์๋ ๋ชจ๋ ์ฃผ๋ฌธ์ ๊ฒ์ํฉ๋๋ค.
SELECT *
FROM orders
WHERE customer_id IS NOT NULL;
NULL๊ณผ์ ๋น๊ต
NULL๊ณผ์ ์ง์ ์ ์ธ ๋น๊ต(=,!= ๋ฑ)๋ ์ฌ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ง ์์ต๋๋ค. ์ด๋ SQL ํ์ค์์ NULL์ ์ด๋ค ๊ฐ๊ณผ๋ ๊ฐ์ง ์๋ค๊ณ ๊ฐ์ฃผ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. NULL ๊ฐ๊ณผ ๋น๊ตํ๋ ค๋ฉด ๋ฐ๋์ IS NULL ๋๋ IS NOT NULL์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์๋ชป๋ ์์
-- This will not work as expected
SELECT *
FROM orders
WHERE customer_id = NULL;
์ฌ๋ฐ๋ฅธ ์์
-- Correct way to check for NULL
SELECT *
FROM orders
WHERE customer_id IS NULL;
NULL ๊ฐ์ ํน์ฑ
- NULL์ ๋น์ด ์๋ ๊ฐ์ด๋ 0๊ณผ ๋ค๋ฆ ๋๋ค: NULL์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ์ง ์์์ ์๋ฏธํ๋ฉฐ, ์ด๋ ๋น ๋ฌธ์์ด์ด๋ 0๊ณผ๋ ๋ค๋ฆ ๋๋ค.
- ์ฐ์ฐ์์์ NULL: NULL๊ณผ์ ์ฐ์ ์ฐ์ฐ, ๋ฌธ์์ด ์ฐ์ฐ ๋ฑ์ ํญ์ NULL์ ๋ฐํํฉ๋๋ค.
SELECT price * discount AS discounted_price
FROM products
WHERE discount IS NULL;
์์ ์ฟผ๋ฆฌ๋ ํ ์ธ ๊ฐ์ด NULL์ธ ์ ํ์ ๋ํด NULL์ ๋ฐํํฉ๋๋ค.
ํต์ฌ ๋ด์ฉ๐


