DDL (Data Definition Language) 데이터 정의 언어
- CREATE
- ALTER
- DROP
- RENAME
- TRUNCATE
🚩 CREATE
CREATE DATABASE 데이터베이스명;
CREATE TABLE 테이블명
(
컬럼명1 컬럼타입1 제약조건,
컬럼명2 컬럼타입2 제약조건,
...
[CONSTRAINT FK제약조건이름
FOREIGN KEY (컬럼명)
REFERENCES 참조테이블명(참조컬럼명)]
);
❓제약 조건
NOT NULL : 항상 NULL 이 아닌 값
UNIQE : 중복된 값이 있으면 안됨
PRIMARY KEY : NOT NULL 과 UNIQE 의 특성을 모두 가짐
FOREIGN KEY : 다른 테이블의 PRIMARY KEY 와 연결
DEFAUL : 기본값 설정
CHECK() : 값에 대한(조건)
CREATE TABLE food (
id BIGSERIAL NOT NULL,
name TEXT NOT NULL,
content TEXT NOT NULL,
price INT DEFAULT 5000,
CHECK(price>1000),
course_id BIGINT,
PRIMAEY KEY (id),
FOREIGN KEY (course_id) REFERENCES course
);
🚩 ALTER
컬럼 추가, 삭제, 속성 변경
ALTER TABLE 테이블명 ADD COLUMN 컬럼명 컬럼타입;
ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
ALTER TABLE 테이블명 MODIFY COLUMN 컬럼명 컬럼타입;
ALTER TABLE 테이블명 CHANGE COLUMN 컬럼명 변경컬럼명 컬럼타입;
🚩 DROP
데이터베이스 / 테이블 삭제
DROP DATABASE 데이터베이스명;
DROP TABLE 테이블명;
🚩 RENAME
테이블명 변경
ALTER TABLE 테이블명 RENAME 변경테이블명;
🚩 TRUNCATE
테이블의 모든 데이터를 완전히 삭제 ( 테이블은 남아있다 )
테이블 자체를 DROP 실행 후 재생성
TRUNCATE TABLE user
조건 줄 수 없고 복구가 불가능, DELETE보다 더 빠른 수행속도
DML (Data Manipulation Language) 데이터 조작 언어
- INSERT
- UPDATE
- DELETE
- SELECT
🚩 INSERT
데이터 삽입
INSERT INTO 테이블명(컬럼..) VALUES 값
// 컬럼에 차례대로 저장
INSERT INTO user VALUES (1, '홍길동', '길똥', 10)
// 특정 컬럼
INSERT INTO user(nickname, age) VALUSE ('길똥', 10)
🚩 UPDATE
데이터 수정
WHERE 조건 없이 적용하면 전체 데이터에 적용된다.
UPDATE 테이블명 SET 컬럼 = 값, 컬럼2 = 값2,... WHERE 조건
// score 값이 0인 행들의 score 를 100, grade 를 'A' 로 변경
UPDATE student SET score = 100, grade = 'A' WHERE score = 0
🚩 DELETE
조건을 걸고 데이터 삭제
조건이 없다면 모든 행이 삭제된다.
DELETE FROM 테이블명 WHERE 조건
// student 테이블에서 name 이 '영'으로 시작하는 데이터 삭제
DELETE FROM student WHERE name LIKE '영&'
🚩 SELECT
SELECT 열이름
FROM 테이블이름
WHERE 조건식
GROUP BY 열이름
HAVING 조건식
ORDER BY 열이름
LIMIT 숫자
SELET 열이름(컬럼명) FROM 테이블명
// 여러개의 컬럼 지정 가능
SELECT id, name FROM user
// 컬럼명에 * 을 넣으면 모든 컬럼을 조회
SELECT * FROM user
WHERE
관계/논리 연산자 활용
// 일반적인 프로그램에서 사용하는 비교연산자와 동일한 기능
SELECT * FROM user WHERE id >= 2
// AND OR NOT
SELECT * FROM 테이블명 WHERE 조건1 AND 조건2
SELECT * FROM 테이블명 WHERE NOT 조건
// AND 가 OR 보다 우선순위
SELECT * FROM 테이블명 WHERE TRUE OR FALSE AND FALSE // 1
SELECT * FROM 테이블명 WHERE (TRUE OR FALSE) AND FALSE // 0
// BETWEEN
SELECT * FROM user WHERE id BETWEEN 2 AND 4;
// IN
SELECT * FROM user WHERE id IN (1, 2, 3);
// LIKE
SELECT * FROM comment WHERE content LIKE '%가%';
SELECT * FROM comment WHERE content LIKE '가__';
SELECT * FROM comment WHERE content LIKE '가%';
// 서브 쿼리
SELECT id, name FROM user WHERE id > (select id from user where name like '가나')
GROUP BY
지정한 컬럼이 같은 데이터끼리 그룹화
SELECT grade, AVG(score) AS "평균" FROM student GROUP BY grade
grade | score | ➡️ | grade | 평균 |
5 | 12 | 2 | 46.25 | |
4 | 65 | 3 | 54 | |
2 | 25 | 4 | 71.5 | |
4 | 78 | 5 | 12 | |
2 | 36 | |||
2 | 69 | |||
2 | 55 | |||
3 | 54 |
❓집계 함수
SUM() AVG() MIN() MAX() COUNT()
집계 함수 내에서 연산도 가능하다.
COUNT(*)
: 모든 row 를 대상으로 이루어지기 때문에 NULL 값도 포함하여 카운트됨
COUNT(name)
: name 값에 NULL 이 있을 경우 카운트하지 않음
COUNT(DISTINCT)
: 중복 데이터 제거
// 컬럼 이름 앞에 붙여서 중복된 name 은 1개만 출력된다.
SELECT DISTINCT name FROM user
HAVING
그룹화된 데이터에 대해서 조건 -> GROUP BY 뒤에 온다.
SELECT SUM(score) AS "총점수"
FROM student
GROUP BY grade
HAVING SUM(score) >= 60
ORDER BY
생략시 기본값 : ASC
콤마로 여러 정렬 조건 지정 가능
SELECT * FROM student ORDER BY score (ASC), grade
LIMIT
출력 개수 제한
// 상위 5건만 조회
SELECT * FROM user LIMIT 5
// 5번째 데이터부터 10건만 조회
SELECT * FROM user LIMIT 5, 10
SELECT * FROM user LIMIT 5 OFFSET 10
아래 하기 전에 데이터베이스 공부 먼저
DCL (Data Control Language) 데이터 제어 언어
- GRANT
- REVOKE
🚩 GRANT
사용자를 생성하고 권한을 부여
GRANT 권한 ON 데이터베이스명.테이블명 TO '아이디'@'호스트' IDENTIFIED BY '비밀번호'
호스트 : 접속자가 사용하는 머신의 IP
🚩 REVOKE
사용자의 권한을 제거
REVOKE 권한 ON 데이터베이스명.테이블명 FROM 사용자
TCL (Transaction Control Language) 트랜잭션 제어 언어
- COMMIT
- ROLLBACK
- SAVEPOINT
🚩 COMMIT
🚩 ROLLBACK
🚩 SAVEPOINT
내장 함수