728x90
MySQL과 SQL Server는 모두 관계형 데이터베이스 관리 시스템(RDBMS)이지만, 두 시스템 간에는 SQL 쿼리 사용 방식에서 여러 차이점이 있습니다. 아래 표에서 주요 쿼리 구문과 기능의 차이점을 정리하였습니다.
기능 / 쿼리 유형 | MySQL | SQL Server |
---|---|---|
데이터베이스 생성 | CREATE DATABASE db_name; |
CREATE DATABASE db_name; |
데이터베이스 선택 | USE db_name; |
USE db_name; |
테이블 생성 | CREATE TABLE table_name (...); |
CREATE TABLE table_name (...); |
AUTO_INCREMENT | AUTO_INCREMENT |
IDENTITY(1,1) |
기본 키 설정 | PRIMARY KEY (column_name) |
PRIMARY KEY (column_name) |
데이터 형식 | VARCHAR(n) |
NVARCHAR(n) |
날짜 데이터 형식 | DATE , DATETIME |
DATE , DATETIME , DATETIME2 |
문자열 결합 | CONCAT(column1, column2) |
column1 + column2 |
현재 날짜/시간 | NOW() |
GETDATE() |
문자열 길이 | CHAR_LENGTH(column) |
LEN(column) |
서브쿼리 | 지원 | 지원 |
IF 문 | IF(condition, true_value, false_value) |
CASE WHEN condition THEN true_value ELSE false_value END |
IFNULL/NULL 처리 | IFNULL(column, value) |
ISNULL(column, value) |
문자열 부분 추출 | SUBSTRING(column, start, length) |
SUBSTRING(column, start, length) |
LIMIT | SELECT * FROM table LIMIT offset, count; |
SELECT * FROM table ORDER BY column OFFSET offset ROWS FETCH NEXT count ROWS ONLY; |
TOP N 행 선택 | 지원되지 않음 | SELECT TOP N * FROM table; |
인덱스 생성 | CREATE INDEX index_name ON table_name(column); |
CREATE INDEX index_name ON table_name(column); |
고유 인덱스 | CREATE UNIQUE INDEX index_name ON table(column); |
CREATE UNIQUE INDEX index_name ON table(column); |
클러스터드 인덱스 | 지원되지 않음 | CREATE CLUSTERED INDEX index_name ON table(column); |
트랜잭션 시작 | START TRANSACTION; |
BEGIN TRANSACTION; |
트랜잭션 커밋 | COMMIT; |
COMMIT; |
트랜잭션 롤백 | ROLLBACK; |
ROLLBACK; |
연결 문자열 | jdbc:mysql://hostname:port/dbname |
jdbc:sqlserver://hostname:port;databaseName=dbname; |
암시적 커밋 | 기본적으로 AUTO_COMMIT 모드 |
기본적으로 AUTO_COMMIT 모드 |
저장 프로시저 호출 | CALL procedure_name(parameters); |
EXEC procedure_name parameters; |
변수 선언 | SET @variable_name = value; |
DECLARE @variable_name datatype; SET @variable_name = value; |
열의 데이터 타입 변경 | ALTER TABLE table MODIFY column_name new_data_type; |
ALTER TABLE table ALTER COLUMN column_name new_data_type; |
외래 키 설정 | FOREIGN KEY (column) REFERENCES other_table(column) |
FOREIGN KEY (column) REFERENCES other_table(column) |
배열 지원 | 지원되지 않음 | 지원되지 않음 |
JSON 지원 | JSON 데이터 타입과 JSON 함수 지원 | JSON 데이터 타입은 없지만, JSON 함수 지원 |
스트링 비교 | 기본적으로 대소문자 구분 | 기본적으로 대소문자 구분하지 않음 |
비교 연산자 | = (같음), < (작음), > (큼) |
= (같음), < (작음), > (큼) |
문자열 비교 | LIKE 'pattern' |
LIKE 'pattern' |
불린 자료형 | TINYINT(1) |
BIT |
패턴 일치 | LIKE , REGEXP |
LIKE , PATINDEX |
케이스 민감 | 기본적으로 대소문자 구분 (COLLATE 설정 가능) | 기본적으로 대소문자 구분하지 않음 (COLLATE 설정 가능) |
트리거 | 지원 | 지원 |
테이블 복사 | CREATE TABLE new_table AS SELECT * FROM existing_table; |
SELECT * INTO new_table FROM existing_table; |
분석 함수 | OVER() , RANK() , DENSE_RANK() , ROW_NUMBER() |
OVER() , RANK() , DENSE_RANK() , ROW_NUMBER() |
조건부 갱신 | UPDATE table SET column = value WHERE condition; |
UPDATE table SET column = value WHERE condition; |
테이블 삭제 | DROP TABLE table_name; |
DROP TABLE table_name; |
인덱스 삭제 | DROP INDEX index_name ON table_name; |
DROP INDEX index_name ON table_name; |
열 삭제 | ALTER TABLE table_name DROP COLUMN column_name; |
ALTER TABLE table_name DROP COLUMN column_name; |
서브쿼리 사용 | 가능 | 가능 |
부서리 정렬 | ORDER BY |
ORDER BY |
그룹화 | GROUP BY |
GROUP BY |
HAVING 절 | HAVING |
HAVING |
집계 함수 | COUNT() , SUM() , AVG() , MIN() , MAX() |
COUNT() , SUM() , AVG() , MIN() , MAX() |
일치 검사 | LIKE , RLIKE (정규 표현식) |
LIKE , PATINDEX (정규 표현식은 X) |
반응형
주요 차이점 분석
- 데이터 형식과 제약조건:
- MySQL은
VARCHAR
와AUTO_INCREMENT
를 사용하여 자동 증가 속성을 설정합니다. - SQL Server는
NVARCHAR
와IDENTITY
를 사용합니다.
- MySQL은
- 날짜/시간 함수:
- MySQL은
NOW()
를 사용하여 현재 날짜와 시간을 가져옵니다. - SQL Server는
GETDATE()
를 사용합니다.
- MySQL은
- 문자열 처리:
- 문자열 결합은 MySQL에서
CONCAT
함수로, SQL Server에서는+
연산자로 수행합니다.
- 문자열 결합은 MySQL에서
- 쿼리 결과 제한:
- MySQL에서는
LIMIT
을 사용하여 결과 행의 수를 제한합니다. - SQL Server에서는
OFFSET
및FETCH
절을 사용합니다.
- MySQL에서는
- 트랜잭션 처리:
- 두 시스템 모두 트랜잭션을 지원하며, 명령어는 매우 유사합니다 (
BEGIN TRANSACTION
,COMMIT
,ROLLBACK
).
- 두 시스템 모두 트랜잭션을 지원하며, 명령어는 매우 유사합니다 (
- 인덱스:
- MySQL에서는 클러스터드 인덱스를 명시적으로 생성할 수 없습니다.
- SQL Server는 클러스터드 인덱스를 명시적으로 생성할 수 있습니다.
- JSON 지원:
- MySQL은 JSON 데이터 타입과 JSON 함수를 지원합니다.
- SQL Server는 JSON 함수를 지원하지만 JSON 데이터 타입을 명시적으로 제공하지는 않습니다.
- 스트링 비교 및 케이스 민감성:
- MySQL은 기본적으로 문자열 비교에서 대소문자를 구분하지만, COLLATE 설정으로 변경 가능합니다.
- SQL Server는 기본적으로 대소문자를 구분하지 않지만, COLLATE 설정으로 대소문자 구분을 적용할 수 있습니다.
- 패턴 일치:
- MySQL은 정규 표현식 지원(
REGEXP
)을 제공하며, SQL Server는 정규 표현식을 지원하지 않습니다.
- MySQL은 정규 표현식 지원(
이 표와 설명은 MySQL과 SQL Server 간의 주요 차이점을 이해하고 두 시스템에서 SQL 쿼리를 효과적으로 사용할 수 있도록 도와줍니다.
반응형
'MS SQL Server (MSSQL)' 카테고리의 다른 글
재귀 쿼리로 조직 구조 조회하기 (WITH 사용, Recursive Query) (0) | 2024.07.12 |
---|---|
CTE (WITH 문)과 TEMP 테이블 비교 (0) | 2024.07.10 |
Procedure History 남기는 방법 (0) | 2024.07.04 |
SQL Server - Lock 과 Latch 란? (0) | 2022.09.02 |
T-SQL을 사용하여 쉼표 또는 기타 구분 기호를 SQL Server의 테이블 또는 목록으로 변환 (0) | 2021.03.10 |