SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
FROM WHERE
GROUP BY
HAVING
SELECT
DISTINCT
ORDER BY
LIMIT/OFFSET
SELECT empno, ename
CASE WHEN deptno=10 THEN 'ACCOUNTING'
WHEN deptno=20 THEN 'RESEARCJ'
END AS dname
FROM emp;
// ELSE 사용
SELECT studno, total
CASE WHEN 90<=total THEN 'A'
CASE WHEN 80<=total THEN 'B'
ELSE 'C'
END AS grade
FROM exam_01;
: 원하는 위치부터 일정 길이만큼 잘라냄
SELECT name, jumin
CASE WHEN SUBSTR(jumin,7,1)=1 THEN 'MAN'
WHEN SUBSTR(jumin,7,1)=3 THEN 'MAN'
WHEN SUBSTR(jumin, 7,1)=2 THEN 'WOMAN'
WHEN SUBSTR(jumin, 7,1)=4 THEN 'WOMAN'
END AS gender
FROM student;
// SUBSTR 한 번만 사용
SELECT name, jumin
CASE SUBSTR(jumin,7,1) when 1 THEN 'MAN'
WHEN 3 THEN 'MAN'
WHEN 2 THEN 'WOMAN'
WHEN 4 THEN 'WOMAN'
END AS gender
FROM student;
: 특정 문자의 위치 찾음
SELECT name, tel
CASE SUBSTR(tel, 0, INSTR(tel, ')'-1)
WHEN '02' THEN '서울'
WHEN '031' THEN '경기'
END AS local
FROM student;
SELECT name, MONTH(birthday) 달,
CASE WHEN MONTH(birthday) BETWEEN 1 AND 3 THEN '1/4분기'
WHEN MONTH(birthday) BETWEEN 4 AND 6 THEN '2/4분기'
END AS MONTH
FROM student;
단위 : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, QUARTER 등
: 날짜/시간 데이터에서 특정 부분을 추출
SELECT name, MONTH(birthday) 달,
CASE EXTRACT(QUARTER FROM birthday)
WHEN 1 THEN '1/4분기'
WHEN 2 THEN '2/4분기'
END 분기
FROM student;
: 문자열을 이어붙임
SELECT name, MONTH(birthday) 달,
CASE CONCAT(EXTRACT(QUARTER FROM birthday), '/4분기') 분기
FROM student;
: 현재 날짜(Current Date)를 반환하는 함수
SELECT
두 날짜의 차이(일단위) 계산, 정수
DEFAULT : ASC 오름차순
CREATE TABLE tmp (
id INT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
age INT DEFAULT 1 CHECK(age>0)
);
INSERT INTO tmp (name, age) VALUES ('hong', -1); // 에러
: 숫자 컬럼에 자동으로 1씩 증가하는 값을 넣어줌
: 외래키에서 사용, 다른 테이블의 특정 컬럼을 참조
CREATE TABLE article(
num INT AUTO_INCREMENT PRIMARY KEY,
writer VARCHAR(20) REFERENCES USER(id)
UPDATE USER SET id='gong' WHERE 'id=hong'; // 참조무결성위반
UPDATE USER SET name='길동이' WHERE id='hong'; // 다른 컬럼 가능
: 조건이 없으면 모두 삭제 (구조는 남음)
DELETE FROM article WHERE writer='hong';
: 테이블 자체를 완전히 삭제
컬럼 추가
제약조건 추가
제약조건 이름 지정 추가
[ CONSTRAINT 제약조건명 ] 붙여야 함
외래키 제약조건 이름 지정 추가
컬럼 삭제
NULL이나 NOT NULL은 컬럼 속성으로,
MODIFY COLUMN 데이터타입 NOT NULL 으로 수정
col1에서 col2로 이름 변경
// 변경해보기
CREATE TABLE tcons(
NO INT, -- primary key
NAME VARCHAR(20), -- not null
jumin VARCHAR(13),-- not null, unique
AREA INT, -- check 1,2,3,4
deptno VARCHAR(6) -- foreign key
);
// 변경
ALTER TABLE tcons ADD PRIMARY KEY (NO);
ALTER TABLE tcons MODIFY COLUMN name VARCHAR(20) NOT NULL;
ALTER TABLE tcons MODIFY COLUMN jumin VARCHAR(13) NOT NULL;
ALTER TABLE tcons ADD CONSTRAINT jumin_uk UNIQUE (jumin);
ALTER TABLE tcons ADD CONSTRAINT area_uk CHECK(AREA IN(1,2,3,4));
ALTER TABLE tcons ADD CONSTRAINT deptno_uk FOREIGN KEY(deptno) REFERENCES dept3(dcode);
//삭제
ALTER TABLE tcons DROP PRIMARY KEY;
ALTER TABLE tcons MODIFY COLUMN name VARCHAR(20);
ALTER TABLE tcons DROP CONSTRAINT jumin_uk;
ALTER TABLE tcons DROP CONSTRAINT area_uk;
ALTER TABLE tcons DROP CONSTRAINT deptno_fk;
CREATE DATABASE mydb;
복사
CREATE TABLE emp_cp AS SELECT empno FROM emp where empno=10;
CREATE TABLE emp_dept AS SELECT emp.*, d.dname FROM emp JOIN dept USING(deptno);
양쪽 테이블에 동일한 컬럼명이 있을 때, 그 기준으로 조인
CREATE TABLE emp_cp AS SELECT * FROM emp WHERE 1=2;
항상 거짓의 조건으로 데이터의 구조만 복사
ADD 추가, MODIFY 변경, RENAME 이름변경
ALTER TABLE persons MODIFY COLUMN address VARCHAR(300);
변경
ALTER TABLE persons RENAME COLUMN city TO area;
이름변경
TRUNCATE TABLE emp_dept;
테이블 비우기
자동 COMMMIT, ROLLBACK 불가능
WHERE 불가능
테이블 자체를 완전히 삭제
INSERT INTO user (id, name) VALUES ('hong' '홍길동');
INSERT INTO user VALUES ('song', '송길동');
// 모든 컬럼 삽입 시 컬럼명 생략 가능
autocommit=0; 수동커밋-> ROLLBACK 가능, COMMIT; 으로 확정
autocommit=1; 자동커밋
데이터만 삭제, 구조는 삭제x
: 여기서부터 COMMIT/ROLLBACK 전까지 하나의 트랜잭션
없으면 ROLLBACK -> 되돌릴 게 없음, COMMIT -> 확정할 게 없음
: 조인 조건 직접 작성 -> 공통 컬럼 한번만 표시
: 양쪽 테이블에 같은 이름의 컬럼이 있을 때만 -> 여러 컬럼 출력
합쳐진 후에 조건 필터링