정조제
CREATE TABLE 테이블명(
);
-- 테이블 생성
CREATE TABLE PLAYER(
PLAYER_ID CHAR(7) NOT NULL,
PLAYER_NAME VARCHAR2(20) NOT NULL
);
-- 테이블 구조 변경(컬럼 추가)
ALTER TABLE 테이블명 ADD 컬럼명 데이터타입;
-- 테이블 구조 변경(컬럼 삭제)
ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
-- 테이블 구조 변경(컬럼 수정)
-- 여러 컬럼 동시수정 X, 한번에 한개의 컬럼만 수정
ALTER TABLE 테이블명 MODIFY 컬럼명 제약조건;
-- 제약조건 삭제
DROP CONSTRAINT 제약조건명;
-- 제약조건 추가
ADD CONSTRAINT 제약조건명 조건(컬럼명);
-- 테이블 이름 변경
RENAME 이전테이블명 TO 이후테이블명;
-- 컬럼 이름 변경
RENAME COLUMN 이전컬럼명 TO 이후컬럼명;
-- 테이블 삭제
DROP TABLE 테이블명;
-- 테이블 데이터 삭제
TRUNCATE TABLE 테이블명;
-- 데이터 삽입
INSERT INTO 테이블명(컬럼1, 컬럼2) VALUES (값1, 값2);
-- 데이터 변경
UPDATE 테이블명 SET 컬럼명 = 값;
-- 데이터 삭제
DELETE FROM 테이블명;
-- 데이터 선택
SELECT 컬럼1, 컬럼2 FROM 테이블명;
SELECT 컬럼1 AS ~~ FROM 테이블명;
* : 모든
% : 모든
_ : 한 글자
|| : oracle
+ : sql server
| 종류 | 타입 | ROLLBACK 여부 | COMMIT | 초기화 | 삭제여부 | 로그 |
|---|---|---|---|---|---|---|
| DROP | DDL | ROLLBACK 불가 | AUTO COMMIT | 용량 초기화 | 테이블 정의 자체 삭제 | 로그X |
| TRUNCATE | DDL | ROLLBACK 불가 | AUTO COMMIT | 최초용량 제외 초기화 | 최초 생성된 초기상태 | 로그X |
| DELETE | DML | ROLLBACK 가능 | 사용자 COMMIT | 초기화 X | 데이터만 삭제 | 로그O |
-- ORACLE
SAVEPOINT S1;
ROLLBACK TO S1;
COMMIT;
-- SQL SERVER
SAVE TRANSACTION SVTR1;
ROLLBACK TRANSACTION SVTR1;
ACID
BETWEEN A AND B
-- A와 B사이에 있으면 됨(A, B포함)
IN (LIST)
-- 리스트에 있는 값 중 어느 하나라도 일치
NOT IN (LIST)
-- 리스트의 값과 일치하지 않음
LIKE '비교문자열'
-- 비교문자열과 형태가 일치(%, _)
IS NULL
-- NULL값인 경우
IS NOT NULL
-- NULL값이 아닌 경우
!=, ^=, <>
-- 같지 않다
INSERT INTO 서비스 VALUES('999', '');
-- ORACLE에서는 ''를 NULL로 인식
-- SQL SERVER에서는 공백으로 인식
SELECT * FROM 서비스 WHERE 서비스명 IS NULL; -- ORACLE
SELECT * FROM 서비스 WHERE 서비스명 = ''; -- SQL SERVER
-- ORACLE
SELECT NAME FROM PLAYER WHERE ROWNUM = 1;
-- SQL Server
SELECT TOP(1) NAME FROM PLAYER;
-- 문자열을 소문자로
LOWER(문자열)
-- 문자열을 대문자로
UPPER(문자열)
-- 문자의 ASCII 값 반환
ASCII(문자)
-- ASCII 값에 해당하는 문자 반환
CHR / CHAR(ASCII번호)
-- 문자열 1, 2를 연결(||, +와 동일)
CONCAT('DBMS', ' SQL') -> 'DBMS SQL'
-- 문자열 중 m위치에서 n개의 문자 반환
SUBSTR / SUBSTRING('SQL Expert', 5, 3) -> 'Exp'
-- 문자열 길이를 숫자값으로 반환
LEN / LENGTH(문자열)
-- 해당 문자열 제거
LTRIM('xxxYYZZXYZxx', 'x') -> 'YYZZXYZxx'
RTRIM('xxxYYZZXYZxx', 'x') -> 'xxxYYZZXYZ'
TRIM('x' FROM 'xxxYYZZXYZxx') -> 'YYZZXYZ'
SIGN(숫자) -- 양수면 1, 음수면 -1, 0이면 0 반환
MOD(숫자1, 숫자2) -- 숫자1을 숫자2로 나눈 나머지 반환
CEIL(숫자) -- 크거나 같은 최소 정수 반환(올림)
FLOOR(숫자) -- 작거나 같은 최대 정수 반환(내림)
ROUND(숫자) -- 반올림
ABS(숫자) -- 절대값
ROUND(38.5235, 3) -> 38.524 -- 반올림
ROUND(38.5235, 1) -> 38.5
ROUND(38.5235) -> 39
TRUNC(38.5235, 3) -> 38.523 -- 소수점 버림(내림)
TRUNC(38.5235, 1) -> 38.5
TRUNC(38.5235) -> 38
SYSDATE, GETDATE() : 현재 날짜와 시간 출력
EXTRACT, DATEPART : 날짜에서 데이터 출력
TO_NUMBER(TO_CHAR(d, 'YYYY')) : 연도를 숫자로 출력
1 = 하루
1/24 = 1시간
1/24/60 = 1분
1/24/(60/10) = 10분
NVL(식1, 식2) -- 식1의 값이 NULL이면 식2 출력, 아니면 식1
ISNULL(식1, 식2) -- 식1의 값이 NULL이면 식2 출력, 아니면 식1
NULLIF(식1, 식2) -- 식1, 식2가 같다면 NULL 출력, 아니면 식1
COALESCE(식1, 식2, 식3, ...) -- NULL이 아닌 최초의 표현식 출력, 모두 NULL이면 NULL반환
COUNT(*) -- NULL 포함 행의 개수
COUNT(컬럼) -- NULL 제외 행의 개수
SUM, AVG -- NULL 제외 합계, 평균
STDDEV -- 표준편자
VARIAN -- 분산
MAX, MIN -- 최대, 최소
-- SEARCHED_CASE_EXPRESSION
CASE WHEN LOC = 'A' THEN 'B'
-- SIMPLE_CASE_EXPRESSION
CASE LOC WHEN 'A' THEN 'B'
DECODE(LOC, 'A', 'B')
-- ELSE NULL이 생략되있음
-- 위 문장들은 같은의미이다.
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
SELECT TOP(2) WITH TIES ENAME, SAL
FROM EMP
ORDER BY SAL DESC;
-- 급여가 높은 2명을 내림차순으로 출력하는데 같은 급여를 받는 사원은 같이 출력(2명이상 나올수도있음)
N-1)개의 JOIN 조건이 필요하다.SELECT *
FROM EMP, DEPT
WHERE EMP.DNAME = DEPT.DNAME;
SELECT *
FROM EMP INNER JOIN DEPT
ON EMP.DNAME = DEPT.DNAME;
SELECT *
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;