๐Ÿ“‹

2. MySQL-2

SQL ํ•จ์ˆ˜๋ž€?

๋ฏธ๋ฆฌ ์ •์˜๋œ ๊ธฐ๋Šฅ ๋ชจ์Œ, ๋‹จ์ผ ํ–‰ ํ•จ์ˆ˜์™€ ๊ทธ๋ฃน ํ•จ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํ•จ์ˆ˜๋ฅผ ๋‚˜์—ดํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์ „์ฒด์ ์œผ๋กœ ์–ด๋–ค ๊ธฐ๋Šฅ๋“ค์ด ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š”์ง€ ๋ณด๊ธฐ์—๋Š” ์ˆ˜์›”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ํƒ€์ž… ํ•จ์ˆ˜
  • ๋ฌธ์ž : CHAR(๊ฐ’) : ๋ฌธ์ž ํƒ€์ž… ์ง€์ • 2000๋ฐ”์ดํŠธ
  • ๋ฌธ์ž : VARCHAR2(๊ฐ’) : ๋ฌธ์ž ํƒ€์ž… ์ง€์ • 4000๋ฐ”์ดํŠธ
  • ์ˆซ์ž : Oracle์—์„œ๋Š” NUMBER(์ •์ˆ˜ ์ž๋ฆฟ์ˆ˜, ์†Œ์ˆ˜ ์ž๋ฆฟ์ˆ˜), MySQL์€ INT์‚ฌ์šฉ
  • ๋‚ ์งœ : DATE()
  • ์‹œ๊ฐ„ : TIME()

๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ
  • CONCAT('abc', 'def') โ†’ 'abcdef' : ๋ฌธ์ž์—ด์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  • LOWER('ABC') โ†’ 'abc'
  • UPPER('abc') โ†’ 'ABC'
  • INITCAP('abc') โ†’ 'Abc' : ์•ž๋ฌธ์ž๋งŒ ๋Œ€๋ฌธ์ž
  • SUBSTR('hello world', 1, 5) โ†’ 'hello' : ๋ฌธ์ž์—ด์„ ์ž๋ฅผ ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ˆซ์ž๋Š” ์‹œ์ž‘์œ„์น˜, ์ž๋ฅผ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • REPLACE('hello world', 'world', 'SQL') โ†’ 'hello SQL' : ๋ฐ”๊พธ๊ณ  ์‹ถ์€ ๊ฐ’์œผ๋กœ ๋Œ€์ƒ ๊ฐ’์„ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.
  • LENGTH('hello') โ†’ 5 : ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. COUNT์™€ ๋น„๊ตํ•ด์„œ ๊ธฐ์–ตํ•ด์ฃผ์„ธ์š”.
  • COUNT : ํ–‰์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • INSTR('ABCDEF', 'B') โ†’ 2 : ๋ฌธ์ž์—ด์˜ ์œ„์น˜๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ INDEX๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋‹ˆ, ์ด ์ฐจ์ด๋ฅผ ๊ผญ ๊ธฐ์–ตํ•ด๋‘์„ธ์š”.

  • ROUND(๋ฐ˜์˜ฌ๋ฆผํ•  ์ˆซ์ž, ์ž๋ฆฟ์ˆ˜) : ์ˆซ์ž๋ฅผ ๋ฐ˜์˜ฌ๋ฆผ, 0์ด ์†Œ์ˆซ์  ์ฒซ์งธ์ž๋ฆฌ
  • TRUNC(์ ˆ์‚ญํ•  ์ˆซ์ž, ์ž๋ฆฟ์ˆ˜) : ์ˆซ์ž๋ฅผ ์ ˆ์‚ญ, 0์ด ์†Œ์ˆซ์  ์ฒซ์งธ์ž๋ฆฌ
  • MOD(์ˆ˜, ๋‚˜๋ˆ„๋Š” ๊ฐ’) : ๋‚˜๋จธ์ง€
  • POWER(์ˆ˜, ์Šน์ˆ˜) : ์ œ๊ณฑ ์ถœ๋ ฅ
  • SQRT : ์ œ๊ณฑ๊ทผ ์ถœ๋ ฅ

(์‹ค์Šต) SQL ํ•จ์ˆ˜

AS๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋™์ผํ•˜๊ฒŒ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ฌธ์ž์™€ ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊พธ์–ด ๋ณด์•˜์–ด์š”.

(์‹ค์Šต) SUBSTR(์ปฌ๋Ÿผ, START, LENTH) : ์Šฌ๋ผ์ด์‹ฑ

SELECT SUBSTR('hello world', 1, 5);

(์‹ค์Šต) ๋ฌธ์ œ

  1. ์ด๋ฆ„์˜ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”.
  1. ์ด๋ฆ„์˜ ์•ž 5์ž๋ฆฌ๋ฅผ *๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ์„ธ์š”.
SELECT CustomerID, CustomerName, LENGTH(CustomerName) AS ์ด๋ฆ„๊ธธ์ด, SUBSTR(CustomerName, 6) AS ์ž๋ฅธ์ด๋ฆ„, REPLACE(CustomerName, SUBSTR(CustomerName, 0, 6), '******') AS ๋ณ„ํ‘œ์ฑ„์šด์ด๋ฆ„ FROM Customers;
์—ฌ๊ธฐ์„œ ์‚ฌ์šฉํ•œ SUBSTR ๊ฐ™์€ ๊ฒฝ์šฐ
  • Oracle์€ SUBSTR, SUBSTRB
  • MsSQL์€ SUBSTRING
  • MySQL์€ SUBSTRING, SUBSTR, MID
์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

(์‹ค์Šต) ๋‚ ์งœ

๋‚ ์งœ์™€ ์‹œ๊ฐ„์ด ์–ด๋–ป๊ฒŒ ๋”ํ•ด์ง€๋Š”์ง€ ํ™•์ธํ•ด๋ณด์„ธ์š”.
SELECT DATE();
SELECT DATE() + 10;
SELECT TIME() + 10;

(์‹ค์Šต) ํ†ต๊ณ„

ํ†ต๊ณ„๊ด€๋ จ๋œ ํ•จ์ˆ˜๋ฅผ ์‹ค์Šตํ•ด๋ด…๋‹ˆ๋‹ค. ํ•˜๋‚˜์”ฉ ์‚ฌ์šฉํ•ด๋ณด์„ธ์š”. ๋ณดํ†ต์€ ๋ถ„์‚ฐ๊ณผ ํ‘œ์ค€ํŽธ์ฐจ ํ•จ์ˆ˜๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. W3School์—์„œ๋Š” ๋ถ„์‚ฐ๊ณผ ํ‘œ์ค€ํŽธ์ฐจ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
SELECT MAX(CustomerID) AS ์ตœ๋Œ“๊ฐ’ FROM Customers; SELECT SUM(CustomerID) AS ์ „์ฒดํ•ฉ FROM Customers; SELECT MIN(CustomerID) AS ์ตœ์†Ÿ๊ฐ’ FROM Customers; SELECT COUNT(CustomerID) AS ์ „์ฒดํ–‰์˜์ˆ˜ FROM Customers; SELECT AVG(CustomerID) AS ํ‰๊ท  FROM Customers;

(์‹ค์Šต ์•ˆํ•จ) ๋ฌธ์ž์—ด ๋ณ€ํ™˜

์‹ค์Šต์€ ์•ˆํ•˜์ง€๋งŒ ํ•ด๋‹นํ•จ์ˆ˜๋Š” ๊ฐ„ํ˜น SQL Injection ๊ณต๊ฒฉ์— ์‚ฌ์šฉ๋˜๊ณคํ•˜๋‹ˆ, ํ˜น์‹œ ์ •๋ณด๋ณด์•ˆ์„ ๊ณต๋ถ€ํ•˜๋Š” ํ•™์ƒ์ด๋ผ๋ฉด ๊ธฐ์–ตํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
SELECT CHAR(65) || CHAR(65)); SELECT CONCAT(CHAR(65), CHAR(65)); SELECT ASCII('A');
ย 

(์‹ค์Šต) ๋ฌธ์ œ ํ’€์ด

SELECT * FROM Products;
  1. ์ „์ฒด ์ œํ’ˆ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด์ฃผ์„ธ์š”.
    1. /* SELECT COUNT(ProductID) FROM Products; */ SELECT COUNT(*) FROM Products;
      ์•„๋ž˜ 1๋ฒˆ ์ฟผ๋ฆฌ์ฒ˜๋Ÿผ ๊ตฌ๋ฌธ์„ ์ž‘์„ฑํ•˜์‹œ๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์ด์œ ๋Š” ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด๋ณด์‹œ๋ฉด ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      INSERT INTO Products (Price) VALUES ('500');
      SELECT COUNT(ProductName) FROM Products;
  1. ๊ฐ’์˜ ํ‰๊ท ์„ ๊ตฌํ•ด์ฃผ์„ธ์š”.(ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”.)
    1. SELECT AVG(Price) FROM Products;
  1. ์ œํ’ˆ ์ด๋ฆ„์ด 'A'๋กœ ์‹œ์ž‘ํ•˜๋ฉด์„œ ๊ฐ€๊ฒฉ์ด ํ‰๊ท  ์ด์ƒ์ธ ์ œํ’ˆ์„ ๊ตฌํ•ด์ฃผ์„ธ์š”. ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด ์• ๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ๋ฉ๋‹ˆ๋‹ค. ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๊ณ , ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.
    1. /* SELECT * FROM Products WHERE ProductName LIKE 'A%' AND Price > AVG(Price); */
ย 
ย