독학/[책 + 인강] SQL

[SQL Server] Do it SQL 입문 3장 SQL 시작하기

최연재 2024. 1. 29. 01:58

교재 : Do it SQL 입문 (이지스퍼블리싱, 강성욱)

 

 

3.1 SELECT문으로 데이터 검색하기

- SELECT 문

  • 데이터베이스에서 데이터를 검색
  • 시스템 성능에 많은 영향을 미치므로 주의해서 사용

 

1) 주석 작성 방법과 쿼리 실행 방법

- 한 줄 주석은 -- 으로, 여러 줄 주석은 /* 과 */ 사이에 내용을 입력한다.

- 여러 줄 쿼리를 작성한 채 실행하면 전체 쿼리가, 특정 쿼리를 드래그한 후 실행하면 특정 쿼리만 실행된다.

 

2) SELECT문으로 특정 열 검색하기

SELECT [열] FROM [테이블]
  • [열]에는 검색하려는 데이터의 열을 입력한다. 여러 열을 검색할 때는 , 로 구분해 연결한다. 전체 열을 검색하기 위해 *을 사용한다.

 

- 전체 열 검색은 자원을 많이 소비하므로 유의해야 한다.

 

3) SSMS에서 테이블의 열 정보 확인하기

- 아래와 같이 확장해 확인 가능

- 테이블 열 목록을 확인하는 시스템 함수 사용

- 쿼리 편집기에서 테이블 이름에 블록을 지정한 상태에서 alt + f1 실행

 

 

3.2 WHERE 문으로 조건에 맞는 데이터 검색하기

SELECT [열] FROM [테이블] WHERE [열] = [조건값]

 

1) WHERE문으로 특정 값 검색하기

- SQL Server가 제공하는 연산자 종류 

연산자 설명
< 필터링 조건보다 작은 값 검색
<= 필터링 조건보다 작거나 같은 값 검색
= 필터링 조건과 같은 값 검색
> 필터링 조건보다 큰 값 검색
>= 필터링 조건보다 크거나 같은 값 검색
<> != 필터링 조건보다 같지 않은 값 검색
!< 필터링 조건보다 작지 않은 값 검색
!> 필터링 조건보다 크지 않은 값 검색

- 크기 비교 연산자는 숫자에만 사용 권장

 

2) WHERE문에서 비교 연산자 사용하기 - 예시

 

3) WHERE문에서 논리 연산자 사용하기 

- 논리 연산자의 종류

연산자 설명
ALL 모든 비교 집합이 TRUE이면 TRUE
AND 두 부울 표현식이 모두 TRUE이면 TRUE
ANY 비교 집합 중 하나라도 TRUE이면 TRUE
BETWEEN 피연산자가 범위 내에 있으면 TRUE
EXISTS 하위 쿼리에 행이 포함되면 TRUE
IN 피연산자가 리스트 중 하나라도 포함되면 TRUE
LIKE 피연산자가 패턴과 일치하면 TRUE
NOT 부울 연산자를 반대로 실행
OR 하나의 부울식이 TRUE이면 TRUE
SOME 비교 집합 중 일부가 TRUE이면 TRUE

- 사용 예시 : BETWEEN

- 사용 예시 : AND, OR

  • 여러 데이터를 검색하기 위해 OR을 반복해서 사용 : 비효율적이므로 IN을 사용하면 된다.

- 논리연산자의 우선순위를 고려해야 한다. 소괄호로 먼저 실행되어야 하는 커리에 우선순위를 부여할 수 있다. 

- NULL데이터 검색

  • NULL : 아예 정의되지 않은 값
  • = 연산자를 이용하지 않고 IS NULL을 사용해 찾는다. 

 

 

3.3 ORDER BY 문으로 데이터 정렬하기

- ORDER BY

SELECT [열] FROM [테이블] WHERE [열] = [조건값] ORDER BY [열] [ASC, DESC]

 

1) ORDER BY문으로 열 기준 정렬하기

- 열을 두 개 이상 기준으로 정렬할 때는 정렬 순서에 따라 쉼표를 사용해 열 이름을 나열한다.

 

2) ASC, DESC

- ASC : 오름차순 정렬로 기본 값이다.

- DESC :  내림차순 정렬

- 각 열 이름 뒤에 ASC, DESC를 붙여 쉼표로 연결하면 오름차순과 내림차순을 각 열에 적용한 다음 조합해 정렬할 수 있다.

 

 

3) TOP으로 상위 N개 데이터 검색하기

 

4) OFFSE ... FETCH NEXT로 지정한 개수만큼 행 건너뛰고 검색하기

1000개의 열을 건너뜀.

- FETCH NEXT은 반드시 OFFSET과 함께 사용한다.

1001번째 데이터부터 10개의 데이터 출력

 

 

3.4 와일드 카드로 문자열 검색하기

- LIKE

SELECT [열] FROM [테이블] WHERE [열] LIKE [조건값]

 

1) LIKE와 %로 특정 문자열을 포함하는 문자열 검색하기

- % : 0개 이상의 문자열과 대치

% 내용
A% A로 시작하는 모든 문자열
%A A로 끝나는 모든 문자열
%A% A를 포함하는 모든 문자열

 

- 특수 문자를 포함한 문자열 검색하기

① 임시 테이블 생성

② ESCAPE와 #을 이용해 검색 

  • 쿼리 실행 시 #을 제거해 쿼리 명령 단계에서는 %#%%이 호출된다.
  • 실제 실행 시에는 %%%로 해ㅓ괸다.
  • ESCAPE에 사용되는 문자는 !, / 등 다른 문자도 가능하다.

 

2) _로 특정 문자열을 포함하는 특정 길이의 문자열 검색하기

- _의 사용방법 : _에 오는 글자는 무엇이든 상관없다.

_ 내용
A_ A로 시작하며 전체 글자는 2개인 문자열
_A A로 끝나며 전체 글자는 2개인 문자열
_A_ 세 글자 중 가운데 글자가 A인 문자열

 

3) _와 %을 조합해 문자열 검색하기

 

4) []로 문자나 문자 범위를 지정해 문자열 검색하기

- [] 사용방법 

표현 내용
[A, B, C]% [A-C]% 첫 글자가 A, B, C 중 하나로 시작하는 모든 문자열
%[A, B, C] %[A-C] 마지막 글자가 A, B, C 중 하나로 끝나는 모든 문자열

- 문자나 문자 범위를 제외한 문자열 검색하기 : ^ 

 

 

3.5 데이터 그룹화 다루기

- GROUP BY문과 HAVING문

SELECT [열] FROM [테이블] WHERE [열] = [조건값] GROUP BY [열] HAVING [열] = [조건문]

 

1) GROUP BY문으로 데이터 그룹화하기

- GROUP BY문에 사용한 열 이름이 SELECT문에 그대로 사용된다.

- 데이터를 그룹화할 때는 그룹 기준이 되는 열이 필요하므로 GROUP BY문에 사용한 열을 반드시 SELECT문에도 사용해야 한다.

- 중복 데이터를 제거한다.

1개 열 기준으로 그룹화
2개 이상의 열 기준으로 그룹화하기 : 전체결과는 같다.

- 집계 함수 COUNT로 그룹화한 열의 데이터 개수 확인하기

AS cnt는 개수를 센 결과를 출력할 때 열 이름을 cnt로 한다는 뜻이다.
sector, industry 열 기준으로 그룹화한 각 행의 개수 검색

 

2) HAVING 문으로 그룹화한 데이터 필터링하기

- SELECT나 GROUP BY문에 사용한 열에만 적용할 수 있다.

 

3) DISTINCT문으로 중복 데이터 제거하기

- DISTINCT

  • 지정한 열의 중복 데이터를 제거한다.
  • 집계나 계산이 필요할 때는 GROUP BY문을 사용해야 한다.
SELECT DISTINCT [열 이름] FROM [테이블 이름]

 

 

3.6 테이블 생성하고 데이터 조작하기

1) 데이터 조작 언어 (data manipulation langauge, DML)

  • 테이블에 데이터를 검색(SELECT), 삽입(INSERT), 수정(UPDATE), 삭제(DELETE)하는 데 사용한다.
  • 테이블을 대상으로 한다.

 

2) 데이터 정의언어 (data defination language, DDL)

  • 테이블을 조작하는 언어
  • 데이터베이스, 테이블, 뷰, 인덱스 등의 개체를 생성(CREATE), 삭제(DROP), 변경(ALTER)한다.

 

3) 데이터베이스 생성하고 삭제하기

- 생성

CREATE DATABASE [데이터베이스 이름]

- 삭제

DROP DATEBASE [데이터베이스 이름]

 

4) 테이블 생성하고 삭제

- 데이터베이스 선택하기

USE 데이터베이스 이름

 

- CREATE 문으로 테이블 생성하기

CREATE TABLE 테이블이름 (
열1 자료형,
열2 자료형,
...
)

- DROP문으로 테이블 삭제

  • 즉시 실행되니 유의해야 한다.
  • 현재 삭제하려는 테이블이 다른 테이블과 종속 관계이면서 부모 테이블일 경우 삭제에 실패한다.

 

5) 테이블에 데이터 삽입, 수정, 삭제하기

- INSERT문으로 데이터 삽입하기

  • 열 이름을 생략하고 테이블에 데이터를 삽입할 수 있다.
  • 대상 열과 삽입할 데이터를 맞춰 소괄호에 나열하면 삽입하는 데이터의 순서를 바꿀 수 있다.
  • 삽입할 값을 소괄호로 묶어 쉼표로 구분하면 여러 데이터를 한 번에 삽입할 수 있다.
INSERT INTO 테이블 [열1, 열2, ...] VALUES [값1, 값2, ...]

열 이름 생략
특정 열에만 데이터 삽입
삽입하는 데이터의 순서 변경
여러 데이터를 한 번에 삽입

 

- NULL을 허용하지 않도록 테이블 생성하기

- UPDATE문으로 데이터 수정하기

  • WHERE을 생략하면 테이블의 전체 데이터를 수정한다.
UPDATE [테이블 이름] SET [열1 = 값1, 열2 = 값2, ...]
WHERE [열] = [조건]

 

- DELETE문으로 데이터 삭제하기

DELETE [테이블 이름] WHERE [열] = [조건]

 

6) 외래키로 연결된 데이터 입력, 삭제하기

- 관계형 데이터베이스는 데이터의 무결성을 유지해야 하므로 부모 테이블에 없는 데이터를 자식 테이블이 가질 수 없다.

- 부모, 자식테이블 생성

- 데이터 입력 : 부모 테이블에 데이터를 입력하고 같은 값을 자식 테이블에 입력 

- 데이터 삭제: 자식 테이블의 데이터를 먼저 삭제 후 부모 테이블의 데이터 삭제  

- 테이블 삭제 : 자식 테이블, 부모 테이블 순서로 삭제해야 한다.

- 제약 조건 제거 : 자식 테이블의 데이터를 유지하면서 부모 테이블을 삭제하기 위함.

- 제약 조건과 제약 조건 이름 확인하기

  • sp_help [테이블 이름] 실행
  • 테이블 이름을 드래그한 상태에서 alt + f1
  • select * from information_shema, table_constraints 실행

 

7) 다른 테이블에 검색 결과 입력하기

INSERT 대상 테이블
SELECT 열 FROM 기존 테이블

 

8) 새 테이블을 생성하며 검색 결과 입력하기

SELECT 열 INTO 새로운 테이블 FROM 기존 테이블

 

 

3.7 SQL Server에서 다루는 자료형 정리하기

1) 숫자형

자료형 데이터 크기 (byte) 숫자 범위 설명
bit 1 0, 1, NULL 불리언 형식 : 참(True, 1) 혹은 거짓(False, 0)
tinyint 1 0 ~ 255 정수 데이터를 사용하는 정확한 숫자 자료형으로 숫자를 저장할 때 가장 많이 사용
smallint 2 -32768 ~ 32767
int 4 -2^31 ~ 2^31-1
bigint 8 -2^63 ~ 2^63-1
decimal(p, s) 5 ~ 17 -10^38+1 ~ 10^38-1  전체 자릿수의 소수 자리수가 고정된 숫자로 최대 38자리 사용
numberic(p, s) 5 ~ 17 -10^38+1 ~ 10^38-1 
float (n) 4 ~ 8 -1.79E+308 ~ 1.79E+308 
real 4 -3.40E+38 ~ 3.40E+38  부동 소수점 숫자 데이터에 사용하는 근사 숫자 자료형
smallmoney 4 약 -21억 ~ 21억 통화 단위에 주로 사용하며 1/10000까지 정확히 표현 가능
money 8 -2^63 ~ 2^63-1

- 암시적 형 변환 : 실행 환경에서 자동으로 형 변환

- 명시적 형 변환 

  • CASTINT, CONVERT 등의 함수 이용
  • 사용자가 직접 자료형 변경

 

2) 문자형

- 고정 길이 : 실제값을 입력하지 않아도 지정한 만큼의 저장 공간 사용

- 가변 길이 : 실제 입력한 크기만큼만 저장 공간 사용

자료형 데이터 크기(byte) 설명
char(n) 0 ~ 8000 고정 길이 문자열
nchar(n) 0 ~ 8000 유니코드 고정 문자열, 4000자 입력 가능
varchar(n|max) 0 ~ 2^31-1 (2GB) 가변 길이 문자열로 n만큼의 크기 지정 가능, max만큼 지정하면 2GB까지 가능
nvarchar(n|max) 0 ~ 2^31-1 유니코드 가변길이 문자열
binary(n) 0 ~ 8000 고정 길이의 이진데이터 값
varbinary(n|max) 0 ~ 2^31-1 가변 길이 이진 데이터 값, n을 사용하면 1~8000까지 크기를지정할 수 있고 max를 지정하면 2GB까지 크기 지정이 가능하다. 동영상 이미지 저장 등에 이용한다.

- 함수

  • LEN : 문자열 길이 확인
  • DATALENGTH : 문자열 크기 확인

- 유니코드

  • 한글이나 특수문자 저장
  • 한 글자에 2 바이트

 

3) 날짜형과 시간형

자료형 데이터 크기(byte) 정확도 설명
time 3 ~ 5 100나노초 00:00:00.0000000 ~ 23:59:59.9999999까지 저장
date 3 1일 0001-01-01 ~ 9999-12-31까지 저장되며 날짜만 저장
smalldatetime 4 1분 1900-01-01 00:00:00 ~ 2079-12-31 23:59:59까지 저장
datetime 8 0.00333초 1753-01-01 00:00:00.000 ~ 9999-12-31 23:59:59.997까지 저장
datetime2 6 ~ 8 100나노초 0001-01-01 00:00:00.0000000 ~ 9999-12-31 23:59:59.9999999 까지 저장 (datetime의 확장)
datetimeoffset 8 ~ 10 100나노초 0001-01-01 00:00:00.0000000 ~ 9999-12-31 23:59:59.9999999 까지 저장 + 타임존 시간을 함께 저장