기본적인 SQL 문법을 다룬다. 예시만 적어두고 필요할 때 참고하기 위함


DML (Data Manipulation Language, 데이터 조작어)


SELECT

/*모든 데이터 조회*/
Select * from {table}

/*특정 데이터 조회 - 조건 설정*/
Select * from {table} where {column} {조건}

ex) Select * from Student where Name = 'JPK'

INSERT

/*테이블에 새로운 row 삽입*/
Insert Into {table} ({column1, column2, ...}) Values ({set value1, set value2, ...})

ex) Insert Into Student (Age, Name, Rank) Values (set 15, set 'ABC', set 4.5)

UPDATE

/*테이블에서 특정 값을 수정*/
Update {table} set {column} = '{new value}' where {column} = '{before value}'

ex) Update Student set Name = 'JPK2' where Name = 'JPK'

DELETE

/*특정 value 값을 가지고 있는 Column의 row를 삭제*/
Delete from {table} where {column} = '{value}'

ex)Delete from Student where Name = 'JPK'

DDL (Data Definition Language, 데이터 정의어


CREATE

/*테이블을 생성하는 쿼리*/
CREATE Table {table} ({column1} {type}, {column2} {type}, ...)

ex) CREATE Table Student (Age int, Name varchar(50), Rank Float)

ALTER

/*테이블을 수정하는 쿼리*/
ALTER Table {table} Add ({new column} {type} {type value})

ex) ALTER Table Student Add (Address varchar (100))

DROP

/*테이블 혹은 데이터베이스를 삭제하는 쿼리*/
DROP Table {table / Database}

/*테이블 삭제*/
ex) DROP Table Student

/*데이터베이스 삭제*/
ex) DROP Database School

TRUNCATE

/*데이터를 자르기 하는 쿼리*/
/*테이블을 남겨두지만 테이블 내 모든 row를 비워버린다.*/
/*한 번 자르면 복구가 불가능하다. 데이터 뿐만 아니라 공간과 인덱스까지 삭제하기 때문*/
/*로그를 남기지 않기 때문에 속도가 빠르다.*/
DROP Table {table / Database}

ex) Truncate Table Student

DCL (Data Control Language, 데이터 제어어)


GRANT

/*데이터베이스 객체에 대한 특정 권한을 사용자에게 부여한다.*/
GRANT {QUERY COMMANDS} ON {table} TO {user}

/*user10에게 select, insert, delete 권한을 준다.*/
ex) GRANT SELECT, INSERT, DELETE ON Student TO user10

/*데이터베이스 객체에 대한 특정 권한을 사용자에게 부여한다.*/
GRANT {QUERY COMMANDS} ON {table} TO {user}

/*user10에게 select, insert, delete 권한을 준다.*/ 
ex) GRANT SELECT, INSERT, DELETE ON Student TO user10

REVOKE

/*데이터베이스 객체에 대한 특정 권한을 사용자에게 취소한다.*/
REVOKE {QUERY COMMANDS} ON {table} TO {user}

/*user10에게 select, insert, delete 권한을 취소한다.*/
ex) REVOKE SELECT, INSERT, DELETE ON Student TO user10

TCL(Transaction Control Language , 트랜잭션 제어어)


COMMIT

/*트랜잭션(작업 단위)에 이상이 없을 때 commit하는 쿼리이다.*/
ex) 
/*트랜잭션 시작을 알린다.*/
BEGIN TRAN (or TRANSACTION)

/*필요한 쿼리문을 수행한다. 이 때 변경된 사항은 메모리에만 저장된다*/
UPDATE Student set Name = 'JPPPPK' where Name = 'JPK'

/*쿼리문에 문제가 없다면 COMMIT을 통해 DB 혹은 디스크에 저장한다.*/
COMMIT TRAN

ROLLBACK

/*트랜잭션 실행에 이상이 있을 때 데이터를 원복하는 쿼리이다.*/
/*트랜잭션이 이미 커밋되었다면(디스크에 등재되었다면) 실행할 수 없다.*/

ex) 
/*트랜잭션 시작을 알린다.*/
BEGIN TRAN (or TRANSACTION)

/*BookCount라는 int type을 가진 변수를 정의한다.*/
DECLARE @BookCount int

/*AddBook이라는 이름의 트랜잭션을 시작한다.*/
BEGIN TRANSACTION AddBook

/*Books 테이블에 아래와 같은 Values를 가진 row를 생성한다.*/
INSERT INTO Books VALUES (20, 'Book15', 'Author1', 3000)

/*Books 테이블에서 책 이름이 Book15라는 이름을 가진 데이터들을 집계한다.*/
SELECT @BookCount = COUNT(*) FROM Books WHERE name = 'Book15'

/*만약 동일한 이름의 책이 2권 이상 발견되었다면 AddBook 트랜잭션을 ROLLBACK하여, 디스크에 등재하지 않고 작업을 종료한다.*/
F @BookCount > 1 BEGIN ROLLBACK TRANSACTION AddBook PRINT 'A book with the same name already exists' END

/*그렇지 않다면 COMMIT하여 디스크에 등재시킨다.*/
ELSE BEGIN COMMIT TRANSACTION AddStudent PRINT 'New book added successfully' END 

SAVEPOINT

/*트랜잭션을 일시저장하여 필요한 지점으로 롤백할 수 있도록 하게 해준다.*/
/*SAVEPOINT 이름은 중복될 수 없으며 트랜잭션 작업 도중 문제가 생긴다면 작업이 돌아갈 지점을 설정하거나 전체 rollback, 작업이 성공한 지점까지의 commit 등 여러가지 작업이 가능하다.*/

ex)
/*AA의 급여는 7000원으로 업데이트한다.*/
UPDATE employees SET salary = 7000 WHERE last_name = 'AA';

/*BB의 급여는 12000원으로 업데이트한다.*/
UPDATE employees SET salary = 12000 WHERE last_name = 'BB';

/*이 시점에 SAVEPOINT AA를 저장한다.*/
SAVEPOINT AA;

/*이 시점에 SAVEPOINT BB를 저장한다.*/
SAVEPOINT BB;

/*급여의 총 금액을 구한다. 이 구문에는 없지만 어떤 조건에 의해 BB의 급여를 다시 설정해야하는 상황이 생겼다고 가정하자.*/
SELECT SUM (salary) FROM employees;

/*SAVEPOINT AA 시점으로 되돌아간다.*/
ROLLBACK TO SAVEPOINT AA;

/*BB의 급여를 11000원으로 업데이트한다.*/
UPDATE employees SET salary = 11000 WHERE lase_name = 'BB';

/*디스크에 등재한다.*/
COMMIT;

'Server > MSSQL' 카테고리의 다른 글

MSSQL Server / SSMS(SQL Server Management Studio) 설치하기  (0) 2024.08.25

+ Recent posts