-
SQL) Oracle vs SQL Server 명령어 전체 비교 (1)🧑💻/SQL 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 수동 COMMITINSERT 문 / UPDATE 문 / DELETE 문 수행
...
COMMIT;
- AUTO COMMIT 모드 True면 DCL/DML 자동 COMMIT
- AUTO COMMIT 모드 False면 DCL/DML 수동 COMMITROLLBACK 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 3000SQL 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, ...
🌈 참고반응형