본문 바로가기
Backend/Database

[DB스터디] 3_데이터의 조작

by 요호유후 2025. 2. 4.
반응형

'그림으로 배우는 데이터베이스' 책을 공부하며 정리했다.

 

목표
▶ SQL 문법 익히기

 

 

내용 정리

SQL 기본 구조

SELECT 컬렴명 FROM 테이블명 WHERE 조건 ;
항목 항목 항목 ;

(예시 문장이다. 무조건 위 구조가 기본인 것은 아니다.)

▶ 항목-값이 쌍으로 이루어진 구조이다.

 

데이터베이스 관리

▶ 생성 (CREATE)
    → CREATE DATABASE 데이터베이스명;
         예) CREATE DATABASE database_a;

▶ 삭제 (DROP)
    → DROP DATABASE 데이터베이스명;
         예) DROP DATABASE database_a;

▶ 표시 (SHOW)
    → 생성된 데이터베이스들의 목록 확인    
    → SHOW DATABASES;

▶ 선택 (USE)
    → 해당 데이터베이스에서 작업을 하겠다.
    → USE 데이터베이스명;
         예) USE database_a;

 

테이블 관리

▶ 생성 (CREATE)
    → CREATE TABLE 테이블명 (컬럼명 데이터타입, 컬렴명 데이터타입, ...);
         예) CREATE TABLE menus (id INT, name VARCHAR(20));

▶ 삭제 (DROP)
    → DROP TABLE 테이블명;
         예) DROP TABLE menus;

▶ 표시 (SHOW)
    → 생성된 테이블들의 목록 확인       
    → SHOW TABLES
??
테이블 생성 시 무조건 컬럼정보도 넣어줘야하나?
테이블 생성 후 컬럼 추가/삭제/변경은 안 되나?

 

항상 헷갈리는 명칭들... (참고용)

 

레코드 관리

▶ 삽입 (INSERT INTO)
    → INSERT INTO 테이블명 (컬럼명, 컬럼명, ...) VALUES (값1, 값2, ...);
         예) INSERT INTO numes (id, name) VALUES (1, '카레');
    → 이때, 데이터타입을 잘 맞춰주어야한다. (오류 발생 혹은 의도치 않은 값이 반환 될 수 있다.)

▶ 검색 (SELECT)
    → SELECT 컬렴명 FROM 테이블명;
         예) SELECT name FROM menus;
    → 모든 데이터 검색하기 (별(*)을 사용한다.)
         예) SELECT * FROM menus;
    → 여러 컬럼 검색하기 (쉼표(,)로 구분한다.)
         예) SELECT id, name FROM menus;

 

WHERE

▶ 검색 조건을 지정하여 조건에 맞는 데이터만 조회하도록 한다.
▶ 'if'의 느낌?

① =
   예) SELECT * FROM users WHERE age = 20;
          → age의 값이 20인 데이터만 취득

② AND
   예) SELECT * FROM users WHERE name = '홍길동' AND age = 20;
          → name의 값이 '홍길동'이고 age의 값이 20인 데이터만 취득

③ OR
   예) SELECT * FROM users WHERE name = '홍길동' OR age = 20;
          → name의 값이 '홍길동'이거나 age의 값이 20인 데이터만 취득

★ AND, OR를 조합하여 좀 더 복잡하게 사용할 수도 있다.


④ 연산자 (!=, >, >=, <, <=)

⑤ BETWEEN
   예) SELECT * FROM users WHERE age BETWEEN 21 AND 25
          → age의 값이 21 ~ 25 사이인 데이터만 취득

⑥ IN, NOT IN
   예) SELECT * FROM users WHERE age IN (21, 30)
          → age의 값이 21이나 30에 해당하는 데이터 취득
   예) SELECT * FROM users WHERE age NOT IN (21, 30);
          → age의 값이 21이나 30에 해당하지 않는 데이터 취득

⑦ LIKE
   예) SELECT * FROM users WHERE name LIKE '홍%';
          → name의 값이 '홍'으로 시작하는 데이터만 취득
★ '홍%' : 시작단어  //  '%홍' : 끝단어  //  '%홍%' : 해당 단어 포함
★ _ 의 의미


⑧ IS NULL, IS NOT NULL
   예) SELECT * FROM users WHERE age IS NULL;
          → age의 데이터 중 NULL값을 가지는 데이터 조회

 

데이터 관리

▶ 갱신 (UPDATE)
   → UPDATE 테이블명 SET 갱신할내용 (WHERE 조건)
      예) UPDATE menus SET name = '스튜' WHERE id = 1;
      예) UPDATE users SET status = 1 WHERE age >= 30;

▶ 삭제 (DELETE)
   → DELETE FROM 테이블명 WHERE 조건; (☆)
      예) DELETE FROM menus WHERE id = 1;
★ 데이터베이스 및 테이블 삭제 시 'DROP' 명령어 사용
    예) DROP DATABASE dabatase_a;
    예) DROP TABLE table_a;
★ 데이터 삭제 전, 해당 쿼리문을 SELECT로 확인한 후 DELETE 해주면 부주의한 사고를 예방할 수 있다.
??
데이터 삭제 시 조건이 무조건 있어야하나?

 

▶ 정렬 (ORDER BY)
   → ORDER BY 정렬기준컬럼   
   → 기본옵션은 오름차순(ASC)이다. 내림차순(DESC)는 명시해주면 된다.
      예) SELECT * FROM users ORDER BY age (ASC);   * 생략가능
      예) SELECT * FROM users ORDER BY age DESC;

▶ LIMIT, OFFSET
    예) SELECT * FROM users LIMIT 2;
       → 상위 2개의 데이터만 취득
    예) SELECT * FROM users LIMIT 2 OFFSET 2;
       → 인덱스 2(3행 째) 데이터 부터 2개의 데이터만 취득
       → 아래의 표에 적용하면 유리, 맹구 레코드가 출력된다.
레코드는 0부터 시작한다. 인덱스를 생각하면 된다. (↓ 아래 표 참고)
     예) 그래서 OFFSET 2는 인덱스 2번 즉, 3번째 행이다.

LIMIT, OFFSET 예시

 

▶ COUNT
   → 레코드의 건수를 카운트 한다.
   → SELECT COUNT(컬럼명 or *) FROM 테이블명;
       예) SELECT COUNT(*) FROM users;
   → 조건문(WHERE)과 조합하여 사용할 수 있다.
       예) SELECT COUNT(name) FROM users WHERE age > 20;

▶ MIN, MAX
   → 데이터의 최소, 최대값을 구한다.
   → SELECT MIN(컬럼명) FROM 테이블명;
       예) SELECT MIN(age) FROM users;
   → SELECT MAX(컬럼명) FROM 테이블명;
       예) SELECT MAX(age) FROM users;

▶ SUM, AVG
   → 데이터의 합, 평균을 구한다.
   → SELECT SUM(컬럼명) FROM 테이블명;
       예) SELECT SUM(age) FROM users;
   → SELECT AVG(컬럼명) FROM 테이블명;
       예) SELECT AVG(age) FROM users;

 

▶ GROUP BY
   → 값이 동일한 레코드를 그룹으로 묶어서 출력한다.
   → COUNT, MIN, MAX, SUM, AVG 등을 조합하여 사용할 수 있다.
   → SELECT 컬럼명 FROM 테이블명 GROUP BY 컬럼명;
       예) SELECT author FROM Books GROUP BY author;

▶ HAVING
   → 그룹화된 후의 결과로 부터 필요한 데이터만 추려서 취득 (일종의 조건문 WHERE과 유사)
   → SELECT ~ GROUP BY 컬럼명 HAVING 조건
      예) SELECT author, COUNT(*) FROM Books GROUP BY author HAVING COUNT(*) >= 2;

★ WHERE vs. HAVING
 - WHERE : 그룹화 수행
 - HAVING : 그룹화 수행
 예) SELECT author, COUNT(*) FROM Books
       WHERE ranking >= 10
       GROUP BY author
       HAVING COUNT(*) >= 2;

GROUP BY, HAVING 예시
WHERE, HAVING 비교 예시

 

테이블 결합 (JOIN)

▶ 개념
  → 2 개 이상의 테이블을 결합해서 한 번에 데이터를 얻는 것이다.
  → 관계형 데이터베이스의 경우, 밀접한 데이터들끼리 테이블화되어있고
       각 테이블마다 연결 되어있다. (연결이 되지 않는 경우도 있다.)
  → 이때, 연결(관계)을 위해서는 공통되는 키(Key)를 가지고 있다.

▶ 종류
  ① 내부결합 (☆)
    ⓐ INNER JOIN
  ② 외부결합
    ⓐ LEFT JOIN
    ⓑ RIGHT JOIN
??
INNER JOIN과 그냥 Join의 차이?

테이블 결합의 예 (위 2개의 테이블은 productCode로 연결되어있다.)

 

★ 실습 

※ SQL 작성해보기


 

반응형

'Backend > Database' 카테고리의 다른 글

[DB스터디] 2_데이터의 보존 형식  (0) 2025.02.04
[DB스터디] 1_데이터베이스의 기본  (0) 2025.02.03

댓글