SQL 데이터베이스 입문_ 2. 데이터 생성, 조회, 수정, 삭제하기

olongun·2025년 4월 8일

2.1 데이터 CRUD란

데이터 CRUD의 정의

데이터 CRUD란 DB의 데이터를 관리하기 위한 기본 동작

  • 생성(Create)
  • 조회(Read)
  • 수정(Update)
  • 삭제(Delete)

2.2 데이터베이스 만들기

2.2.1 데이터베이스 목록 조회하기

  1. SQL 워크벤치를 실행하고 코드를 SQL 스크립트 파일(*.sql)로 저장
  2. 서버에 저장된 데이터베이스 목록 조회
    • MySQL서버에 저장된 데이터베이스 목록을 조회하는 쿼리
    SHOW DATABASES;
  3. 결과창에 시스템 데이터베이스 목록 4개가 조회되는것을 확인
    각 시스템 베이스의 역할은 다음과 같다.
  • information_schema: MySQL 서버의 메타데이터(데이터베이스 구조에 대한 정보)를 제공
  • mysql: MySQL 서버의 사용자 계정 정보, 권한 그리고 다른 시스템 레벨의 정보를 저장
  • performance_schema: MySQL 서버의 성능을 진단하고 모니터링하는 데 관련된 데이터를 저장
  • sys: performance_schema의 데이터를 단순화해 사용자가 더 쉽게 성능을 분석할 수 있도록 도움

2.2.2 새 데이터베이스 만들고 진입하기

새 데이터베이스인 맵도날드DB를 만들어 보겠다.

  1. 쿼리 편집기에 CREATE DATABASE mapdonalds; 입력

    • 새 데이터베이스를 만들기 위한 쿼리
    CREATE DATABASE 데이터베이스명;
  2. USE mapdonalds; 로 데이터베이스 진입

    • 데이터베이스에 진입하는 쿼리
    USE 데이터베이스명;

2.2.3 데이터베이스 삭제하기

  1. 맵도날드DB를 삭제하는 SQL 문을 실행
    • 데이터베이스를 삭제하기 위한 쿼리
    DROP DATABASE 데이터베이스명;

2.2.4 주석

  • 한 줄 주석: --주석내용
  • 블록 주석: /**/

2.3 데이터 삽입 및 조회하기

맵도날드DB에 버거 테이블을 만들고 데이터를 삽입, 조회해 보겠다.

2.3.1 테이블 만들기

테이블명은 burgers, 칼럼 6개, 튜플 5개로 구성
각 칼럼의 의미는 다음과 같다.

  • id(기본키): 저장된 모든 버거를 구분하기 위한 칼럼으로 중복되지 않은 유일한 값

    id처럼 테이블의 각 튜플을 식별하는 데 사용하는 칼럼을 기본키(Primary Key, PK)라고 한다.

  • name: 버거의 이름
  • price: 버거의 가격
  • gram: 버거의 무게
  • kcal: 버거의 열량
  • protein: 버거의 단백질량
  1. mapdonalds DB 생성, 진입
CREATE DATABASE mapdonalds;
USE mapdonalds;
  1. burgers 테이블 생성
    • 테이블을 만들 때 쓰는 쿼리
    CREATE TABLE 테이블명 (
    	칼럼명1 자료형1,
        칼럼명2 자료형2,
        ...
        PRIMARY KEY (칼럼명)
    );

2.3.2 테이블의 구조 조회하기

  • 테이블의 구조를 조회할 떄는 DESC문을 사용
DESC 테이블명;

2.3.3 데이터 삽입 및 조회하기

  • 테이블에 데이터를 삽입
INSERT INTO 테이블명 (칼럼명1, 칼럼명2, ...)
VALUES (입력값1, 입력값2, ...)
  • 테이블의 데이터 조회
SELECT 칼럼명1, 칼럼명2, ...
FROM 테이블명
WHERE 조건;

2.4 데이터 수정 및 삭제하기

2.4.1 데이터 수정하기

  • 테이블의 데이터 수정 (조건은 생략 가능, 생략시 모든 칼럼이 수정)
UPDATE 테이블명
SET 칼럼명 = 입력값
WHERE 조건;

2.4.2 데이터 삭제하기

  • 테이블의 데이터 삭제 (조건은 생략 가능, 생략시 모든 튜플 삭제)
DELETE FROM 테이블명
WHERE 조건;

2.4.3 테이블 삭제하기

  • 테이블 삭제
DROP TABLE 테이블명;

2.5 셀프체크

다음 데이터를 coffees 테이블에 담아 관리하려고 합니다. 각 칼럼에 대한 설명을 참고해 다음 1~7을 수행하는 쿼리를 작성하세요.

coffees

id(PK, 정수)name(최대 20자 문자)price(정수)
1아메리카노3800
2카페라떼4000
3콜드브루3500
4카페모카4500
5카푸치노5000
-- 1. starbuuks DB를 생상하고 진입하세요.
CREATE DATABASE starbuuks;
USE starbuuks;

-- 2. coffees 테이블을 만드세요.
CREATE TABLE coffees(
	id INTEGER,
    name VARCHAR(20),
    price INTEGER,
    
    PRIMARY KEY (id)
);

-- 3. 테이블에 모든 데이터를 삽입하세요.
INSERT INTO coffees (id, name, price)
VALUES
	(1, '아메리카노', 3800),
    (2, '카페라떼', 4000),
    (3, '콜드브루', 3500),
    (4, '카페모카', 4500),
    (5, '카푸치노', 5000);
    
-- 4. 테이블의 모든 커피 이름을 조회하세요.
SELECT name
FROM coffees;

-- 5. 카푸치노의 가격을 200원 인상하세요.
UPDATE coffees
SET price = price + 200
WHERE id = 5;

-- 6. 콜드브루를 삭제하세요.
DELETE FROM coffees
WHERE id = 3;

-- 7. 모든 데이터를 조회하세요.
SELECT *
FROM coffees;

연습문제

employees
id name department position salary
1 김철수 개발 사원 3500000
2 박영희 개발 대리 4200000
3 이민호 기획 팀장 5500000
4 최수진 기획 사원 3300000
5 정하늘 영업 사원 3100000
6 오준수 영업 대리 4000000
7 서지우 마케팅 팀장 6000000
8 이은지 마케팅 사원 3200000
9 안현준 개발 팀장 5800000
10 홍길동 영업 사원 3000000

-- 연습문제 1. 다음 데이터를 저장하는 employees 테이블을 만드세요.
-- id(ID), salary(급여) 칼럼은 정수형, name(직원명),
-- department(부서), position(직책)은 최대 50자를 저장하는 문자형으로 지정합니다.
CREATE TABLE employees(
	id INTEGER,
    name VARCHAR(50),
    department VARCHAR(50),
    position VARCHAR(50),
    salary INTEGER,
    
    PRIMARY KEY (id)
);

-- 연습문제 2. 테이블에 모든 직원 정보를 삽입하세요.
INSERT INTO employees (id, name, department, position, salary)
VALUES
	(1, '김철수', '개발', '사원', 3500000),
    (2, '박영희', '개발', '대리', 4200000),
	(3, '이민호', '기획', '팀장', 5500000),
	(4, '최수진', '기획', '사원', 3300000),
	(5, '정하늘', '영업', '사원', 3100000),
	(6, '오준수', '영업', '대리', 4000000),
	(7, '서지우', '마케팅', '팀장', 6000000),
	(8, '이은지', '마케팅', '사원', 3200000),
	(9, '안현준', '개발', '팀장', 5800000),
	(10, '홍길동', '영업', '사원', 3000000);

-- 연습문제 3. 새로운 직원 '장미희'를 '기획' 부서의 '사원'으로 추가하세요. 급여는 3,400,000원입니다.
INSERT INTO employees (id, name, department, position, salary)
VALUES (11, '장미희', '기획', '사원', 3400000);

-- 연습문제 4. '개발'부서 직원의 이름과 급여를 조회하세요.
SELECT name, salary
FROM employees
WHERE department = '개발';

-- 연습문제 5. '팀장' 직책을 가진 직원의 이름과 부서를 조회하세요.
SELECT name, department
FROM employees
WHERE position = '팀장';

-- 연습문제 6. '영업' 부서의 모든 직원 급여를 300,000원씩 인상하세요.
SET SQL_SAFE_UPDATES = 0;
UPDATE employees
SET salary = salary + 300000
WHERE department = '영업';

-- 연습문제 7. 급여가 3,000,000원 이하인 직원을 삭제하세요.
DELETE FROM employees
WHERE salary <= 3000000;
SET SQL_SAFE_UPDATES = 1;

0개의 댓글