[DB-1]

데이터베이스 CRUD

  • 생성
1
2
> create database 데이터베이스명;
> create database 데이터베이스명 default character set  collate ;
1
2
create database dbtest
default character set utf8mb3 collate utf8mb3_general_ci;
  • 변경
1
> alter database 데이터베이스명 defualt character set  collate ;
1
2
alter database dbtest
defualt character set utf8mb4 collate utf8mb4_general_ci;
  • 삭제
1
> drop datatbase 데이터베이스명;
1
drop database dbtest;
  • 사용
1
> use 데이터베이스명;
1
use ssafydb;

Data Type

  • CHAR vs VARCHAR
    • CHAR : 고정 길이를 갖는 문자열, CHAR(20)인 컬럼에 10자만을 저장해도, 20자 만큼의 기억장소를 차지
    • VARCHAR : 가변 길이를 갖는 문자열, VARCHAR(20)인 컬럼에 10자만을 저장하면, 실제로도 10자 만큼의 기억장소를 차지
  • TEXT, INT, FLOAT
  • DATETIME : YYYY-MM-DD HH:MM:SS
  • TIMESTAMP : 1970-01-01~2037년의 임의 시간 (1970-01-01 00:00:00 를 0으로 해서 1초 단위로 표기)

테이블 생성

1
2
3
4
5
> create table table_name(
    column_name Type [optional attributes],
    column_name Type,
    ...
);
  • optional attributes
    • NOT NULL : NULL값은 허용되지 않음
    • DEFAULT VALUE : 값이 전달되지 않을때 추가되는 기본 값 설정
    • UNSIGNED : TYPE이 숫자인 경우, 숫자가 0 또는 양수로 제한
    • AUTO INCREMENT : 새 레코드가 추가 될 때마다 필드 값을 자동으로 1 증가시킴.
    • PRIMARY KEY
1
2
3
4
5
6
7
8
CREATE TABLE member(
    idx INT NOT NULL AUTO INCREMENT,
    userid VARCHAR(16) NOT NULL,
    username VARCHAR(20),
    userpwd VARCHAR(16),
    joindate TIMESTAMP NOT NULL DEFAULT current_timestamp,
    PRIMARY KEY (idx)
);

DML

  • INSERT
1
2
INSERT INTO member (user_id, username, userpwd, joindate)
VALUES ('kim','김','1234',now());
  • UPDATE
1
2
3
4
UPDATE member
SET userpwd = 9876
WHERE userid='kim';
-- WHERE 절 생략 시 모든 데이터가 바뀐다.
  • DELETE
1
2
3
DELETE FROM member
WHERE userid='kim';
-- WHERE 절 생략 시 모든 데이터가 삭제된다.
  • SELECT
1
2
3
4
SELECT * FROM employees;
SELECT DISTINCT employee_id FROM employees;
-- DISTINCT : 선택된 모든 행 중에서 중복 제거
SELECT employee_id, salary FROM employees;
  • CASE
1
2
3
4
5
6
SELECT employee_id, first_name, salary,
    CASE WHEN salary > 15000 THEN '고액연봉'
        WHEN salary > 8000 THEN '평균연봉'
        ELSE '저액연봉'
    END "연봉등급"
FROM employess;
  • IN
1
2
3
SELECT employee_id, first_name, salary
FROM employees
WHERE department_id IN (50,60,70);
  • BETWEEN
1
2
3
SELECT employee_id, first_name, salary
FROM employees
WHERE salary BETWEEN 6000 AND 10000;
  • NULL
1
2
3
SELECT employee_id, first_name, salary
FROM employees
WHERE department_id IS NULL;
  • NULL과 논리 연산

    • FALSE AND NULL 을 제외, NULL과의 연산은 모두 NULL
  • ORDER BY (default : asc)

1
2
3
SELECT employee_id, first_name, salary
FROM employees
ORDER BY salary DESC;