๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
DBMS/Mariadb

[DBMS]MariaDB ์—ฐ์‚ฐ์ž: SQL ์ฟผ๋ฆฌ ๋งˆ์Šคํ„ฐํ•˜๊ธฐ

by YJ Dev 2024. 5. 23.
728x90
๋ฐ˜์‘ํ˜•
SMALL

MariaDB์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์—ฐ์‚ฐ์ž๋Š” SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ์— ํ•„์ˆ˜์ ์ธ ์š”์†Œ๋กœ, ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๊ณ  ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š” ๋ฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

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์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๋‚ด์šฉ๐Ÿ‘€

์‚ฐ์ˆ , ๋น„๊ต ์—ฐ์‚ฐ์ž
๋…ผ๋ฆฌ, ๋น„ํŠธ, NULL ์—ฐ์‚ฐ์ž
ํŒจํ„ด ๋งค์นญ ์—ฐ์‚ฐ์ž

728x90
๋ฐ˜์‘ํ˜•