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의 핵심 개념이 정리되었어요! 🔥 추가로 궁금한 점이 있으면 언제든지 질문해 주세요 😊