🧑💻/SQL
SQL) Oracle vs SQL Server 명령어 전체 비교 (1)
유리맥
2021. 3. 6. 17:21
반응형
SQLD 공부 중 Oracle과 SQL Server 명령어 둘 다 알고있어야 해서 여간 헷갈리는게 아닙니다. 이론서에서 /로 구분해놓으니까 더 모르겠음
내가 보려고 만드는 비교 표 !! 🔥
명령어가 다르면 진하게 표시했습니다.
예제로 보는 DDL 명령어
Oracle Database | SQL Server | |
테이블 생성 | CREATE TABLE PLAYER ( PLAYER_ID CHAR(7) NOT NULL, PLAYER_NAME VARCHAR2(20) NOT NULL, TEAM_ID CHAR(3) NOT NULL, POSITION VARCHAR2(10), BACK_NO NUMBER(2), BIRTH_DATE DATE, CONSTRAINT PLAYER_PK PRIMARY KEY (PLAYER_ID), CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID) ); |
CREATE TABLE PLAYER ( PLAYER_ID CHAR(7) NOT NULL, PLAYER_NAME VARCHAR(20) NOT NULL, TEAM_ID CHAR(3) NOT NULL, POSITION VARCHAR(10), BACK_NO TINYINT, BIRTH_DATE DATE, CONSTRAINT PLAYER_PK PRIMARY KEY (PLAYER_ID), CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID) ); |
테이블 구조 확인 | DESCRIBE PLAYER; | exec sp_help 'dbo.PLAYER' go |
테이블 복사 | CREATE TABLE TEAM_TEMP AS SELECT * FROM TEAM; | SELECT * INTO TEAM_TEMP FROM TEAM; |
컬럼 생성 | ALTER TABLE PLAYER ADD (ADDRESS VARCHAR2(80)); | ALTER TABLE PLAYER ADD ADDRESS VARCHAR2(80); |
컬럼 삭제 | ALTER TABLE PLAYER DROP COLUMN ADDRESS; | ALTER TABLE PLAYER DROP COLUMN ADDRESS; |
컬럼 수정 - 데이터 유형, 디폴트, NOT NULL, 제약조건 | ALTER TABLE TEAM_TEMP MODIFY (ORIG_YYYY VARCHAR2(8) DEFAULT '20020129' NOT NULL); | ALTER TABLE TEAM_TEMP ALTER COLUMN ORIG_YYYY VARCAHR(8) NOT NULL; ALTER TABLE TEAM_TEMP ADD CONSTRAINT DF_ORIG_YYYY DEFAULT '20020129' FOR ORIG_YYYY; |
컬럼명 변경 | ALTER TABLE PLAYER RENAME COLUMN PLAYER_ID TO TEMP_ID; | sp_rename 'dbo.TEAM_TEMP.TEAM_ID', 'TEAM_TEMP_ID', 'COLUMN'; |
제약조건 생성 | ALTER TABLE PLAYER ADD CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID); | ALTER TABLE PLAYER ADD CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID); |
제약조건 삭제 | ALTER TABLE PLAYER DROP CONSTRAINT PLAYER_FK; | ALTER TABLE PLAYER DROP CONSTRAINT PLAYER_FK; |
테이블 TRUNCATE | TRUNCATE TABLE TEAM; | TRUNCATE TABLE TEAM; |
테이블 삭제 | DROP TABLE TEAM; | DROP TABLE TEAM; |
예제로 보는 DML 명령어
Oracle Database | SQL Server | |
데이터 추가 | INSERT INTO PLAYER (PLAYER_ID, PLAYER_NAME, TEAM_ID, POSITION, BACK_NO) VALUES ('2002007', '박지성', 'K07', 'MF', 7); | INSERT INTO PLAYER (PLAYER_ID, PLAYER_NAME, TEAM_ID, POSITION, BACK_NO) VALUES ('2002007', '박지성', 'K07', 'MF', 7); |
데이터 수정 | UPDATE PLAYER SET BACK_NO = 99; | UPDATE PLAYER SET BACK_NO = 99; |
데이터 삭제 | DELETE FROM PLAYER; | DELETE FROM PLAYER; |
데이터 조회 | SELECT POSITION FROM PLAYER; | SELECT POSITION FROM PLAYER; |
예제로 보는 TCL 명령어
Oracle Database | SQL Server | |
COMMIT | INSERT 문 / UPDATE 문 / DELETE 문 수행 ... COMMIT; - DCL 자동 COMMIT / DML 수동 COMMIT |
INSERT 문 / UPDATE 문 / DELETE 문 수행 ... COMMIT; - AUTO COMMIT 모드 True면 DCL/DML 자동 COMMIT - AUTO COMMIT 모드 False면 DCL/DML 수동 COMMIT |
ROLLBACK | INSERT 문 / UPDATE 문 / DELETE 문 수행 후 ... ROLLBACK; |
BEGIN TRAN .... INSERT 문 / UPDATE 문 / DELETE 문 수행 ... ROLLBACK; |
SAVEPOINT | SAVEPOINT SVPT1; ROLLBACK TO SVPT1; |
SAVE TRANSACTION SVTR1; ROLLBACK TRANSACTION SVTR1; |
데이터 유형
Oracle Database | SQL Server | |
고정 길이 문자열; 길이만큼 공간 채움 | CHAR(바이트) | CHAR(바이트) |
가변 길이 문자열 | VARCHAR2(바이트) | VARCHAR(바이트) |
정수, 실수 등 숫자 | NUMBER(정수자릿수, 소수자릿수) | INT, FLOAT, NUMERIC, ... |
날짜, 시각 정보 | DATE | DATETIME (DATE는 날짜만) |
연산자 종류
Oracle Database | SQL Server | |
같다 | = | = |
보다 크다 | > | > |
보다 크거나 같다 | >= | >= |
보다 작다 | < | < |
보다 작거나 같다 | <= | <= |
a 이상 b 이하 | BETWEEN a AND b | BETWEEN a AND b |
값 중에 어느 하나라도 일치 | IN (값1, 값2, ...) | IN (값1, 값2, ...) |
비교 문자열과 형태가 일치(%, _) | LIKE 비교문자열 | LIKE 비교문자열 |
NULL 인 경우 | 조건 IS NULL | 조건 IS NULL |
조건1, 조건2가 참이면 참 | 조건1 AND 조건2 | 조건1 AND 조건2 |
조건1, 조건2 중 하나라도 참이면 참 | 조건1 OR 조건2 | 조건1 OR 조건2 |
조건의 반대 결과를 되돌려줌 | NOT 조건 | NOT 조건 |
같지 않다 | != ^= <> |
!= ^= <> |
~와 같지 않다 | NOT 컬럼 = | NOT 컬럼 = |
~보다 크지 않다 | NOT 컬럼 > | NOT 컬럼 > |
ROWNUM vs TOP
구문 | 예제 | 결과 | |
Oracle Database : 인라인뷰 생성하여 정렬 후 WHERE절 수행해야 오류가 없음 |
ROWNUM | SELECT ENAME, SAL FROM ( SELECT ENAME, SAL FROM EMP ORDER BY SAL DESC) WHERE ROWNUM<4; |
ENAME SAL ------- ---- KING 5000 SCOTT 3000 FORD 3000 |
SQL Server : ORDER BY 정렬 후 원하는 행 수 출력 : WITH TIES 사용시 마지막 행과 데이터 같은 행도 출력 |
TOP(숫자) [PERCENT] [WITH TIES] | SELECT TOP(2) WITH TIES ENAME, SAL FROM EMP ORDER BY SAL DESC; |
ENAME SAL ------- ---- KING 5000 SCOTT 3000 FORD 3000 |
단일행 문자열 함수
Oracle Database | SQL Server | Oracle 예제 | 결과 | |
문자열을 소문자로 | LOWER(문자열) | LOWER(문자열) | LOWER('SQL Expert') | 'sql expert' |
문자열을 대문자로 | UPPER(문자열) | UPPER(문자열) | UPPER('SQL Expert') | 'SQL EXPERT' |
문자/숫자를 ASCII 코드로 | ASCII('문자') | ASCII('문자') | ASCII('A') | 65 |
ASCII 코드를 문자/숫자로 | CHR(코드) | CHAR(코드) | CHR(65) | 'A' |
문자열 합치기 | CONCAT(문자열1, 문자열2) 문자열1 || 문자열2 |
문자열1 + 문자열2 | CONCAT('RDBMS', 'SQL') | 'RDBMS SQL' |
m번째부터 n개만큼 출력 | SUBSTR(문자열, m[, n]) | SUBSTRING(문자열, m[, n]) | SUBSTR('SQL Expert', 5, 3) | 'Exp' |
문자열 개수 출력 | LENGTH(문자열) | LEN(문자열) | LENGTH('SQL Expert') | 10 |
첫문자부터 지정문자 제거 | LTRIM(문자열[, 지정문자]) | LTRIM(문자열) 공백제거 | LTRIM('xxYYZZx', 'x') | 'YYZZx' |
마지막문자부터 지정문자 제거 | RTRIM(문자열[, 지정문자]) | RTRIM(문자열) 공백제거 | RTRIM('XXzzYYzz', 'z') | 'XXzzYY' |
머리/꼬리/양쪽 지정문자 제거 | TRIM([leading|trailing|both] 지정문자 FROM 문자열) | TRIM(문자열) 공백제거 | TRIM('x' FROM 'xxYZxYx') | 'YZxY' |
단일행 문자형 함수
Oracle Database | SQL Server | Oracle 예제 | 결과 | |
절대값 출력 | ABS(숫자) | ABS(숫자) | ABS(-15) | 15 |
양수, 음수, 0 구분 | SIGN(숫자) | SIGN(숫자) | SIGN(-3), SIGN(0), SIGN(3) | -1, 0, 1 |
숫자1/숫자2 나머지 값 | MOD(숫자1, 숫자2) | MOD(숫자1, 숫자2) | MOD(7,3) | 1 |
크거나 같은 최소 정수 | CEIL(숫자) | CEILING(숫자) | CEIL(38.12), CEIL(-38.12) | 39, -38 |
작거나 같은 최대 정수 | FLOOR(숫자) | FLOOR(숫자) | FLOOR(38.12), FLOOR(-38.12) | 38, -39 |
소숫점 m자리까지 반올림 | ROUND(숫자[, m]) | ROUND(숫자[, m]) | ROUND(38.5235, 3) | 38.524 |
소숫점 m자리 밑으로 버림 | TRUNC(숫자[, m]) | 없음 | TRUNC(38.5235, 0) | 38 |
단일행 날짜형 함수
Oracle Database | SQL Server | Oracle 예제 | 결과 | |
현재 날짜 시각 | SYSDATE | GETDATE() | SELECT SYSDATE FROM DUAL; | 2021/03/04 18:52:34 |
날짜 데이터에서 연/월/일시간/분/초 출력 | EXTRACT(YEAR | MONTH | DAY FROM d) | DATEPART(YEAR | MONTH | DAY, d) | SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL; | 2021 |
날짜 데이터에서 연/월/일 출력 | TO_NUMBER( TO_CHAR(d, 'YYYY' | 'MM | 'DD'')) |
YEAR(d) MONTH(d) DAY(d) |
SELECT TO_NUMBER(TO_CHAR(SYSDATE, 'YYYYMMDD')) FROM DUAL; | 20210304 |
단일행 데이터 타입 변환형 함수
Oracle Database | SQL Server | Oracle 예제 | 결과 | |
문자열을 숫자로 | TO_NUMBER(문자열) | CAST (expression AS data_type [(length)]) CONVERT (data_type [(length)], expression[, style]) |
SELECT TO_NUMBER('30') FROM DUAL; | 30 |
숫자/날짜를 FORMAT 형태 문자열로 | TO_CHAR(숫자|날짜[, FORMAT]) | SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') FROM DUAL; |
'20210304' | |
문자열을 FORMAT 형태 날짜로 | TO_DATE(문자열[, FORMAT]) | SELECT TO_DATE('20200324', 'YYYYMMDDHH24MISS') FROM DUAL; |
20/03/24 |
단일행 CASE 함수
Oracle Database | SQL Server | Oracle 예제 | |
SIMPLE_CASE_EXPRESSION 컬럼이 해당값이면 표현절1을 아니면 표현절2를 수행 |
CASE 컬럼 WHEN 값 THEN 표현절1 ELSE 표현절2 END DECODE(컬럼, 값1, 표현절1[, 값2, 표현절2, ... 디폴트]) |
CASE 컬럼 WHEN 값 THEN 표현절1 ELSE 표현절2 END | SELECT LOC CASE LOC WHEN 'NEW YORK' THEN 'EAST' ELSE 'ETC' END FROM DEPT; |
SEARCHED_CASE_EXPRESSION 컬럼이 해당값이면 표현절1을 아니면 표현절2를 수행 |
CASE WHEN 컬럼 = 값 THEN 표현절1 ELSE 표현절2 END | CASE WHEN 컬럼 = 값 THEN 표현절1 ELSE 표현절2 END | SELECT LOC CASE WHEN LOC = 'NEW YORK' THEN 'EAST' ELSE 'ETC' END FROM DEPT; |
단일행 NULL 함수
Oracle Database | SQL Server | Oracle 예제 | 결과 | |
표현식1이 NULL이면 표현식2 출력. 데이터타입 같아야 함 | NVL(표현식1, 표현식2) | ISNULL(표현식1, 표현식2) | SELECT NVL(NULL, 'NVL-OK') FROM DUAL; | 'NVL-OK' |
표현식1, 표현식2 같으면 NULL, 아니면 표현식1 | NULLIF(표현식1, 표현식2) | NULLIF(표현식1, 표현식2) | SELECT NULLIF('Not Null', 'Null') FROM DUAL; | 'Not Null' |
NULL이 아닌 최초의 표현식 출력 | COALESCE(표현식1, 표현식2, ...) | COALESCE(표현식1, 표현식2, ...) | SELECT COALESCE(NULL, NULL, 'abc') | 'abc' |
NULL 크기 | 가장 큰 값 | 가장 작은 값 | - | - |
다중행 집계 함수
Oracle Database | SQL Server | |
NULL 포함 행의 수 | COUNT(*) | COUNT(*) |
NULL 제외 행의 수 | COUNT(표현식) | COUNT(표현식) |
NULL 제외 합계 | SUM([DISTINCT|ALL] 표현식) | SUM([DISTINCT|ALL] 표현식) |
NULL 제외 평균 | AVG([DISTINCT|ALL] 표현식) | AVG([DISTINCT|ALL] 표현식) |
NULL 제외 최대값 | MAX([DISTINCT|ALL] 표현식) | MAX([DISTINCT|ALL] 표현식) |
NULL 제외 최소값 | MIN([DISTINCT|ALL] 표현식) | MIN([DISTINCT|ALL] 표현식) |
NULL 제외 표준 편차 | STDDEV([DISTINCT|ALL] 표현식) | STDEV([DISTINCT|ALL] 표현식) |
NULL 제외 분산 | VARIANCE([DISTINCT|ALL] 표현식) | VAR([DISTINCT|ALL] 표현식) |
📌 다음편
[🧑💻/SQL] - SQL) Oracle vs SQL Server 명령어 전체 비교 (2) - 집합연산자, 서브쿼리, DCL, ...
🌈 참고
반응형