Why Not SW CAMP 5기/수업 기록

[2월 4주차-2/24(3)] MySQL 기초 문법 정리 🚀

rubii 2025. 2. 24. 17:46

📌 MySQL Workbench 실습

🔹데이터베이스 및 테이블 관리

# 데이터베이스 생성 및 삭제
CREATE DATABASE test;
DROP DATABASE test;

# 데이터베이스 사용
USE test;

# 테이블 생성
CREATE TABLE test_create_table (
    col_1 INT NOT NULL,
    col_2 VARCHAR(50),
    col_3 DATETIME
);

# 테이블 삭제
DROP TABLE test_create_table;

 

🔹데이터 추가 및 수정

# 데이터 삽입
INSERT INTO test_create_table (col_1, col_2, col_3) VALUES (1, 'doitsql', '2025-02-24');
INSERT INTO test_create_table VALUES (2, 'test2', '2025-02-24');
INSERT INTO test_create_table (col_1, col_2) VALUES (3, 'doitsql');
INSERT INTO test_create_table (col_1) VALUES (4);

# 데이터 조회
SELECT * FROM test_create_table;

# 데이터 수정 (key 값 필수)
UPDATE test_create_table SET col_2 = 'test1' WHERE col_1 = 1;

# 데이터 삭제
DELETE FROM test_create_table WHERE col_1 = 2;

📌 데이터 모델링 단계 🏗️

1️⃣ 요구사항 분석 → 2️⃣ 개념 모델링 → 3️⃣ 논리 모델링 → 4️⃣ 물리 모델링 → 5️⃣ DB 구현

릴레이션(Relationships)

  • 1:1 관계
  • 1:N 관계
  • N:M 관계

📌 SQL 문법 정리

🔹 SHOW 문법

SHOW COLUMNS FROM sakila.customer; -- 컬럼 구조 조회
SHOW TABLES; -- 데이터베이스 내 테이블 목록 조회
SHOW DATABASES; -- 전체 데이터베이스 목록 조회

🔹 SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY 예제

📌 부서별 평균 급여 계산 후, 평균 급여가 50,000 이상인 부서를 급여순 정렬

SELECT department, AVG(salary) AS avg_salary  -- ① 조회할 컬럼 선택
FROM employees                                  -- ② 조회할 테이블 지정
WHERE salary > 30000                            -- ③ 급여 30000 초과인 직원만 선택
GROUP BY department                             -- ④ 부서별로 그룹화
HAVING AVG(salary) >= 50000                     -- ⑤ 평균 급여 50000 이상인 부서만 필터링
ORDER BY avg_salary DESC;                       -- ⑥ 평균 급여가 높은 순으로 정렬

🔹 ORDER BY와 LIMIT

-- 100번째부터 10개 조회 (구버전 문법)
SELECT * FROM customer ORDER BY customer_id ASC LIMIT 100, 10;

-- 최신 문법
SELECT * FROM customer ORDER BY customer_id ASC LIMIT 10 OFFSET 100;

📌 SQL 논리 연산자 정리

--all, and, any, between and, exists, in, like, not, or, some(any와 동일)

SELECT *
FROM employees e
WHERE salary BETWEEN 40000 AND 60000                 -- (1) 급여가 40000~60000 사이
  AND department IN ('IT', 'HR', 'Sales')           -- (2) IT, HR, Sales 부서
  AND name LIKE 'J%'                                -- (3) 이름이 'J'로 시작
  AND salary > ALL (SELECT salary FROM employees WHERE department = 'HR')  -- (4) HR 부서의 모든 급여보다 큼. (SELECT MAX(salary) FROM employees WHERE department = 'HR')로 변경 가능
  AND salary > ANY (SELECT salary FROM employees WHERE department = 'Sales') -- (5) Sales 부서 일부 급여보다 큼. (SELECT MIN(salary) FROM employees WHERE department = 'Sales')로 변경 가능
  AND EXISTS (SELECT 1 FROM departments d WHERE d.id = e.department_id)     -- (6) 부서가 존재하는 직원
  AND NOT department = 'Finance'                     -- (7) Finance 부서는 제외
  OR (salary > 70000 AND department = 'Marketing');  -- (8) 급여가 70000 초과 & Marketing 부서는 예외로 포함

🔹 LIKE 연산자 정리

%a 'a'로 끝나는 단어
a% 'a'로 시작하는 단어
%a% 'a'가 포함된 단어
_a% 두 번째 글자가 'a'
_____ 정확히 5글자인 단어
A_C% 첫 글자가 'A', 세 번째가 'C'

🔹 특수 문자 검색 (ESCAPE 사용)

-- `%` 문자가 포함된 데이터 검색
SELECT * FROM table_name WHERE column_name LIKE '%\%%' ESCAPE '\';

-- `_` 문자가 포함된 데이터 검색
SELECT * FROM table_name WHERE column_name LIKE '%\_%' ESCAPE '\';

📌 정규 표현식 (REGEXP) 정리

🔹기본 패턴 연산자

패턴 의미 예제 결과
. 아무 글자 하나 'a.b' "acb", "a1b", "a_b" (❌ "ab")
* 이전 문자가 0번 이상 반복 'ab*c' "ac", "abc", "abbc", "abbbc"
+ 이전 문자가 1번 이상 반복 'ab+c' "abc", "abbc", "abbbc" (❌ "ac")
^ 문자열 시작 '^A' "Alice", "Adam" (❌ "Bob Alice")
$ 문자열 끝 'a$' "Linda", "Elsa" (❌ "Alice A")
|   OR (또는)  
[...] 괄호 안의 문자 중 하나 '[aeiou]' "Alice", "Bob", "Charlie"
[^...] 괄호 안의 문자 제외 '[^aeiou]' "Chris", "Bob" (모음 없는 문자 포함)

🔹반복 횟수 지정

{n} n번 반복 'a{2}' "aa" (❌ "a", "aaa")
{n,} 최소 n번 반복 'a{2,}' "aa", "aaa", "aaaa"
{n,m} n~m번 반복 'a{2,4}' "aa", "aaa", "aaaa" (❌ "a", "aaaaa")

📌 예제 SQL 문

-- 이름이 'A'로 시작하는 사람 검색
SELECT * FROM employees WHERE name REGEXP '^A';

-- 이름이 'e' 또는 'a'가 포함된 사람 검색
SELECT * FROM employees WHERE name REGEXP 'e|a';

-- 이름이 정확히 5글자인 사람 검색
SELECT * FROM employees WHERE name REGEXP '^.{5}$';

-- 숫자가 포함된 이름 검색
SELECT * FROM employees WHERE name REGEXP '[0-9]';


📌 NULL 값 조회

-- NULL 값 조회
SELECT * FROM address WHERE address2 IS NULL;

-- NULL이 아닌 값 조회
SELECT * FROM address WHERE address2 IS NOT NULL;
SELECT * FROM address WHERE address2 = '';

이제 MySQL의 핵심 개념이 정리되었어요! 🔥 추가로 궁금한 점이 있으면 언제든지 질문해 주세요 😊