ANSI SQL과 ORACLE SQL 차이를 표로 정리해보았습니다.
특징 비교
— | ANSI SQL | Oracle SQL |
---|---|---|
문법 | ANSI SQL은 American National Standards Institute에서 정한 데이터베이스 관리 시스템의 표준 SQL로, 대부분의 데이터베이스 시스템에서 사용할 수 있습니다. | Oracle SQL은 Oracle 데이터베이스 시스템에서 사용되는 SQL 언어로, Oracle의 확장된 기능과 구문을 지원합니다. |
함수 | ANSI SQL은 기본적인 SQL 함수들을 포함하고 있으며, 데이터베이스 시스템에 따라 추가적인 함수를 제공할 수 있습니다. | Oracle SQL은 ANSI SQL 함수들에 더해서 Oracle의 고유한 함수들을 포함하고 있습니다. 예를 들어, TO_CHAR 함수를 사용하여 숫자를 문자열로 변환하는 기능을 제공합니다. |
날짜 및 시간 | ANSI SQL은 DATE, TIME, TIMESTAMP 데이터 유형을 지원하며, 표준 SQL 함수를 사용하여 날짜 및 시간 연산을 수행할 수 있습니다. | Oracle SQL은 DATE, TIME, TIMESTAMP 데이터 유형을 지원하며, Oracle 고유의 함수들을 사용하여 날짜 및 시간 연산을 수행할 수 있습니다. 예를 들어, SYSDATE 함수를 사용하여 현재 시간을 가져올 수 있습니다. |
테이블 | ANSI SQL은 CREATE TABLE 문을 사용하여 테이블을 생성하고, ALTER TABLE 문을 사용하여 테이블을 변경할 수 있습니다. | Oracle SQL은 CREATE TABLE 문과 ALTER TABLE 문을 사용하여 테이블을 생성하고 변경할 수 있습니다. 또한, Oracle 고유의 기능으로 테이블 파티셔닝, 클러스터링 등을 지원합니다. |
조인 | ANSI SQL은 INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN 등 다양한 조인 유형을 지원합니다. | Oracle SQL은 ANSI SQL의 조인 유형들에 더해서 Oracle 고유의 조인 유형들을 지원합니다. 예를 들어, EQUIJOIN, SELF JOIN, CROSS JOIN 등을 지원합니다. |
집계 함수 | ANSI SQL은 SUM, AVG, COUNT, MAX, MIN 등 다양한 집계 함수를 제공합니다. | Oracle SQL은 ANSI SQL의 집계 함수들에 더해서 Oracle 고유의 집계 함수들을 제공합니다. 예를 들어, RANK, DENSE_RANK, ROW_NUMBER 등을 사용하여 데이터를 순위 지정할 수 있습니다. |
윈도우 함수 | ANSI SQL은 윈도우 함수를 지원합니다. 윈도우 함수를 사용하면 행 그룹에 대한 계산을 수행할 수 있습니다. | Oracle SQL은 ANSI SQL의 윈도우 함수들에 더해서 Oracle 고유의 윈도우 함수들을 지원합니다. 예를 들어, LAG, LEAD, FIRST_VALUE, LAST_VALUE 등을 사용하여 이전 행, 다음 행의 값을 가져올 수 있습니다. |
저장 프로시저 | ANSI SQL은 저장 프로시저를 정의하고 호출하는 기능을 제공합니다. | Oracle SQL은 ANSI SQL의 저장 프로시저 기능에 더해서 Oracle 고유의 트리거, 함수, 패키지 등 다양한 객체를 제공합니다. |
시퀀스 | ANSI SQL은 시퀀스를 생성하고 사용할 수 있습니다. 시퀀스는 고유한 순차 번호를 생성하는 데 사용됩니다. | Oracle SQL은 시퀀스를 생성하고 사용할 수 있으며, 시퀀스를 사용하여 자동으로 값을 생성할 수 있습니다. 또한, 시퀀스의 속성을 변경하거나 시퀀스를 삭제하는 등 다양한 관리 작업을 수행할 수 있습니다. |
트랜잭션 | ANSI SQL은 트랜잭션 제어 문을 사용하여 데이터베이스 트랜잭션을 제어할 수 있습니다. | Oracle SQL은 ANSI SQL의 트랜잭션 제어 문에 더해서 SAVEPOINT, ROLLBACK TO SAVEPOINT 등의 기능을 제공합니다. SAVEPOINT를 사용하여 트랜잭션 내에서 일부 작업만 롤백할 수 있습니다. |
보안 | ANSI SQL은 기본적인 데이터베이스 보안 기능을 제공합니다. | Oracle SQL은 ANSI SQL의 데이터베이스 보안 기능에 더해서 Oracle 고유의 보안 기능을 제공합니다. 예를 들어, 사용자 계정의 암호화, 데이터 암호화, 데이터 마스킹 등을 지원합니다. |
SQL문 작성에 대한 차이
— | ANSI SQL | Oracle SQL |
---|---|---|
IF문 확인 | IFNULL(컬럼명, ‘’) | NVL(컬럼명, ‘’) |
날짜포맷 | ’%Y%m%d%H%i%s’ | ’YYYYMMDDHH24MISS’ |
시간타입을 문자열타입으로 변경 | DATE_FORMAT(컬럼,’%Y%m%d%H%i%s’) | TO_CHAR(컬럼,’YYYYMMDDHH24MISS’) |
문자열 합치기 | concat(‘A’,’k’,’47’) | ’A’ || ‘k’ || ‘47’ |
상위/하위 데이터 가져오기 | limit 0,10 | where rownum between 0 and 10 |
alias | as alias명 또는 alias명 | as ‘alias명’ 또는 alias명 또는 as alias명 |
저장프로시저 생성 | drop procedure if exists 프로시저명; create procedure 프로시저명 | create or replace procedure 프로시저명 |
조건문 | IF(조건식,참 반환 값, 거짓 반환 값) | DECODE(조건식,일치 조건 값, 참 반환 값,거짓 반환 값) |
현재날짜 | NOW() | SYSDATE |
요일숫자범위 | 일요일=0, 토요일=6 | 일요일=1, 토요일=7 |
숫자->문자형으로 변환 | CAST(632 AS CHAR) | TO_CHAR(632) |
시퀀스 다음번호 호출 | 시퀀스명.CURRVAL | 시퀀스명.NEXTVAL |
예약어가 컬럼명일경우 select 방법 | 컬럼명을 tab 위 로 감싼다 (select col` from tbl | 컬럼명을 큰 따옴표로 감싼다(select “col” from tbl) |
Join | select * from A inner join B on A.column1 = B.column1 inner join C on A.column2 = C.column2 | select * from I1, I2 where I1.column1 = I2.column1(+) |
총평
어쩌라 오라클은 ANSI 를 안쓰게 된것일까요..
개발자들 헷갈리게..
oracle,ansi,sql