개발/Database

[MSSQL]기본 CRUD 쿼리 예제 및 기본 개념 이해

재근이 2021. 10. 13. 23:57
반응형

❕이 글을 통해...

CRUD : Create Read Update Delete
  • CRUD 쿼리를 예제이해하고 사용할 수 있다.
  • 쿼리다양한 조건(WHERE)정렬이해하고 사용할 수 있다.

❔주석

실행되지는 않으며, 설명을 작성하는 글

-- 앞에 '--'를 붙이면 뒤에 쓰는 글자는 인식하지 않습니다.

❔대소문자 구분

SQL대소문자구분하지 않습니다. 아무거나 사용해도 됩니다. 이 글에서는 가시성을 혼합했지만 구분 안 하고 사용해도 됩니다.


🚀기본 CRUD 쿼리

예제를 통해 기본 CRUD 쿼리Insert, Select, Update, Delete에 대해 알아보자.

 

CREATE, INSERT ➡ 추가 (CRUD의 Create)

DB 생성

-- 포맷: CREATE DATABASE [Database 이름]
CREATE DATABASE myDB

* DB를 생성했으면 선택해주자.

-- 포맷: USE [Database 이름]
USE myDB

Table 생성

-- 포맷: CREATE TABLE [Table 이름] (
--			[Column1 이름] [타입](크기),
--			[Column2 이름] [타입],
--			...)
CREATE TABLE myTable (
	myAge INT,
	myName VARCHAR(10),
	mySize INT
)

테이블 생성 결과

INSERT ➡ 데이터 생성

테이블에 데이터를 추가할 수 있는 형식이 3가지가 있다.

-- 포맷 : INSERT INTO [Table 이름] VALUES([value1], [value2], [value3])
-- Values의 개수가 Table의 Column개수와 동일해야 합니다.
INSERT INTO myTable VALUES(10, 'ojg', 100)

-- 포맷 : INSERT INTO [Table 이름] ([Column1 이름, Column2 이름]) VALUES([value1], [value2])
INSERT INTO myTable (myAge, myName) VALUES(11, 'ojg1')

-- 포맷 : INSERT [Table 이름] SET [Column1 이름] = [value1], [Column1 이름] = [value2]
INSERT myTable SET myAge = 13, myName = 'ojg2'

SELECT ➡ 검색(CRUD의 Read)

기본 포맷

SELECT [Column 이름] FROM [검색 위치, Table 또는 Database] [조건들]
-- Column 이름이 여러개 올 수 있으며,
-- *는 모든 Column을 검색하라는 의미
-- [조건]은 필수가 아닌 옵션

Database 검색

-- 모든 Database 리스트 출력
SELECT * FROM sys.sysdatabases

Database 검색 결과

Table 검색

-- 모든 Table의 모든 정보 출력
SELECT * FROM sys.tables

-- 모든 Table 이름만 출력
SELECT name FROM sys.tables

테이블 검색 결과

Column 검색

--포맷 : SELECT * FROM [Table 이름]
SELECT * FROM myTable

--포맷 : SELECT [필드 이름] FROM myTable
SELECT myName FROM myTable

UPDATE ➡ 수정 (CRUD의 Update)

Column 수정

-- 포맷 : UPDATE [Table 이름] SET [Column 이름] = [값] WHERE {조건}

-- Column의 특정 조건일 때 수정
UPDATE myTable SET myAge = 3 WHERE myAge > 30

-- !주의! 조건이 없으면 Table의 해당 Column의 값이 전부 동일하게 수정된다.
UPDATE myTable SET myAge = 3

DELETE ➡ 삭제 (CRUD의 Delete)

Database 삭제

Database 사용중이라서 삭제안되다른 Database를 use 한 후 해야 한다.

-- DROP DATABASE [DB 이름]
DROP DATABASE myDB

데이터 행(Row) 삭제

-- 포맷 : DELETE FROM [Table 이름] WHERE {조건}

-- Column의 특정 조건일 때 삭제
DELETE FROM myTable WHERE myAge > 30

-- !주의! 조건이 없으면 Table의 해당 데이터들이 전부 삭제된다.
DELETE FROM myTable

테이블 삭제

-- DROP TABLE [Table 이름]
DROP TABLE myTable

 

Column 추가, 삭제, 수정

Column 추가

-- 포맷: ALTER [Table 이름] ADD [Column 이름] [데이터형] [제약사항 등...]
ALTER TABLE myTable ADD myDescription VARCHAR(100)

Column 삭제

-- 포맷: ALTER TABLE [Table 이름] DROP [Column 이름]
ALTER TABLE myTable DROP column myName

PK, FK, UK, CK 등 제약 조건이 있는, 복사된, 인덱스로 사용하는 Column은 삭제할 수 없다

Column 수정

-- 포맷: ALTER TABLE [Table 이름] ALTER COLUMN [Column 이름] [데이터타입(크기)]
ALTER TABLE myTable ALTER COLUMN myAge int

 

WHERE ➡ 조건 검색

= ➡ 같을 때

-- 포맷: SELECT * FROM [Table 이름] WHERE [Column 이름] = 3
SELECT * FROM myTable WHERE myAge = 3

 

< 또는 > ➡ 크기 비교(>=, <= 도 가능)

-- 포맷: SELECT * FROM [Table 이름] WHERE [Column 이름] > 3
SELECT * FROM myTable WHERE myAge > 3
SELECT * FROM myTable WHERE myAge < 3

 

<> ➡ 다를 때

-- 포맷: SELECT * FROM [Table 이름] WHERE [column 이름] <> 3
SELECT * FROM myTable WHERE myAge <> 3

 

IS NULL ➡ NULL일 때 "= NULL"은 안되고 꼭 IS NULL을 써야 한다.

-- 포맷: SELECT * FROM [Table 이름] WHERE [Column 이름] is null
SELECT * FROM myTable WHERE myAge IS NULL

 

BETWEEN [A] AND [B] ➡ A보다 크거나 같고 B보다 작거나 같을 때

-- 포맷: SELECT * FROM [Table 이름] WHERE [Column 이름] BETWEEN [value1] AND [value2]
SELECT * FROM myTable WHERE myAge BETWEEN 3 AND 32

 

IN ➡ 여러 개 값 (OR과 비슷함)

-- 포맷: SELECT * FROM [Table 이름] WHERE [Column 이름] IN(value1, value2, ...)
SELECT * FROM myTable WHERE myAge IN(3, 5, 6)

 

OR, AND ➡ 여러 조건

-- 포맷: SELECT * FROM [Table 이름] WHERE {조건 1} OR/AND {조건2} OR/AND {조건 ...}
SELECT * FROM myTable WHERE myAge < 10 OR myAge = 30
SELECT * FROM myTable WHERE myAge > 3 AND myAge <> 10

 

%, _ LIKE ➡ 패턴 조건 (~로 시작, 포함, ~로 끝남)

"%" 하고 "_"의 차이 : "%"는 모든 길이를 포함하고, "_"는 "_"의 개수에 따라 해당 개수에 맞는 조건
같은 것을 찾는 게 아닌 비슷한 것을 찾는 것이므로 =이 아니라 LIKE이다.

%

-- 포맷: SELECT * FROM [Table 이름] WHERE [Column 이름] LIKE '%A'
-- 포맷: SELECT * FROM [Table 이름] WHERE [Column 이름] LIKE '%A%'
-- 포맷: SELECT * FROM [Table 이름] WHERE [Column 이름] LIKE 'A%'
SELECT * FROM myTable WHERE myName LIKE '123%'
-- => ex: 1234, 12345, 123456, 123456789101232112312312

_

-- 포맷: SELECT * FROM [Table 이름] WHERE [Column 이름] LIKE 'A_'
-- 포맷: SELECT * FROM [Table 이름] WHERE [Column 이름] LIKE '____A_'
-- 포맷: SELECT * FROM [Table 이름] WHERE [Column 이름] LIKE 'A_______'
SELECT * FROM myTable WHERE myName LIKE '_0_0_'
-- => ex: 10101, 10102, 30201

 

ORDER BY ➡ 정렬

기본이 오름 차순(ASC), 내림차순으로 변경하려면 DESC를 붙여준다.
(MSSQL에서 NULL이 가장 작은 값, ORACLE은 반대)

-- 포맷: SELECT * FROM [Table 이름] WHERE {조건} ORDER BY [Column 이름]
SELECT * FROM myTable WHERE myAge > 10 ORDER BY myName DESC
SELECT * FROM myTable WHERE myAge > 10 ORDER BY myName

복수 정렬 가능, 앞에 써줄수록 우선순위가 높다.

-- 포맷: SELECT * FROM [Table 이름] WHERE {조건} ORDER BY [Column1 이름], [Column2 이름]
SELECT * FROM myTable WHERE myAge > 10 ORDER BY myName, mySize ASC
반응형