ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2월 4주차-2/24(3)] MySQL 기초 문법 정리 🚀
    Why Not SW CAMP 5기/수업 기록 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의 핵심 개념이 정리되었어요! 🔥 추가로 궁금한 점이 있으면 언제든지 질문해 주세요 😊

Designed by Tistory.