[문과 코린이의 IT 기록장] MSSQL - 데이터베이스 변경 (Datatype Alteration, Table Structure , UPDATE, 제약조건, ISNULL example, 데이터베이스 생성/삭제, 유니코드 형식 데이터 입력)
[문과 코린이의 IT 기록장] MSSQL - 데이터베이스 변경 (Datatype Alteration, Table Structure , UPDATE, 제약조건, ISNULL example, 데이터베이스 생성/삭제, 유니코드 형식 데이터 입력)
< 참고 강의 영상 >
MSSQL Server 2016 기반의 데이터베이스 입문에서 활용까지 Part.2 대시보드 - 인프런 | 강의 (inflearn.com)
2022.01.19 - [문과 코린이의, [SQL] 기록] - [문과 코린이의 IT 기록장] MSSQL - DB & Table 생성 (데이터베이스 만들기, 테이블 만들기)
1. Datatype Alteration
- 데이터 형식을 변경한다.
ALTER TABLE dbo.memberTbl
ALTER COLUMN mem_point smallint;
-- 데이터타입을 smallint로 바꿈
2. Table Structure
- 테이블 구조 확인 : 테이블의 컬럼명, 데이터 형식 등을 살펴볼 수 있다.
1) 테이블 구조 확인 방법 1. EXEC sp_columns / EXEC sp_help
EXEC sp_columns 테이블명;
-- sp : 저장 프로시저 , EXEC : 실행해라
-- 테이블에 대한 모든 정보들이 출력됨
EXEC sp_help 테이블명;
-- 좀 더 세부적으로 정보들이 나옴.
2) 테이블 구조 확인 방법 2. sys.columns / sys.tables
SELECT * FROM sys.columns; -- DB 내에 모든 열들이 나옴 (조건 및 정렬을 걸어주는것이 좋음)
ex. SELECT * FROM sys.columns ORDER BY name ASC;
SELECT * FROM sys.tables; -- 이 DB 내에 모든 테이블들이 나옴
* 이것들은 뷰(조회용 가상테이블)에 있음 (시스템 테이블 X)
3) 테이블 구조 확인 방법 3. Information_schema.columns
information_schema.columns 사용한 테이블 정보 확인
- 시스템 뷰(조회용 가상 테이블) 쪽에서 확인이 가능하다.
* 이를 활용해서 필요한 정보를 골라내 테이블 정보를 확인할 수 있다.
SELECT table_name, column_name, column_default, data_type, character_maximum_length
FROM INFORMATION_SCHEMA.COLUMNS
ORDER BY character_maximum_length DESC; -- 이를 기준으로 내림차순 정렬
3. UPDATE
- 데이터(값)를 조작, 변경하는 쿼리문
- 여러 행의 값을 동시에 수정 가능하다.
1) 기본 구조
UPDATE [테이블명] SET [컬럼명] = 값[, 컬럼 = 값, ...][WHERE 조건];
-- 조건은 생략 가능
: WHERE조건절을 생략하면 모든 행의 값이 수정되므로 매우 주의해야 한다.
: 값 대신에 DEFAULT를 적으면, 테이블에 정의된 DEFAULT값으로 변경된다.
2) NULL값 UPDATE
- 기존 레코드들에 존재하는 NULL값을, 한번에 변경하고자 할 때 사용한다.
ex. 총 8개의 레코드 중, 2개의 레코드는 EXPERT라는 값이 입력되어 있는 경우. 나머지 6개 레코드의 NULL값을 변경해야 할 때 (그렇지만 8개의 레코드 모두 영향을 받음. 변화를 하지 않았을 뿐)
UPDATE [테이블명] SET [컬럼명] = ISNULL([컬럼명], '변경할 값');
-- ISNULL(컬럼명, 컬럼이 NULL값일 경우 대체값)
< ISNULL이란? > - SQL Server 내장 함수 - 컬럼이 NULL값을 가지고 있는 경우, 다른 값으로 대체할 수 있음. |
3) UPPER(), LOWER() UPDATE
- 대소문자 변경 함수
cf) 참고
4) INITCAP()
- 영문 앞글자만 대문자로 바꿔주는 함수 ex. korea seoul -> Korea Seoul
- DBMS마다 지원 여부가 다름. (Oracle에는 존재O , but SQL Server에서는 존재 X)
- 따라서 SQL Server에서는, 사용자 정의 함수로 만들어서 사용하는 경우가 많다.
4. 제약조건
1) 제약조건 설정 (디폴트값)
2) 이 테이블(memberTbl)에 존재하는 제약조건들에 대해 확인.
EXEC sp_helpconstraint memberTbl;
* 제약조건이 있으면 해당 컬럼은 삭제가 안됨 (제약조건을 먼저 삭제해준 후, 해당 컬럼을 삭제해줘야 함.
3) 제약조건 삭제
4) 해당 컬럼 삭제
5. ISNULL example
- 특정 컬럼 검색시 NULL값이면, '값없음'으로 표시하여 검색하기. * 업데이트 X
SELECT ISNULL(컬럼명, '값없음') AS 컬럼별칭 FROM 테이블명;
-- 지정한 컬럼명 하나만 결과창에 나온다.
SELECT ISNULL(*, '값없음') AS 컬럼별칭 FROM 테이블명;
-- *(asterisk)와 함께 사용시 다른 컬럼들도 나오게 할 수 있다.
6. 데이터베이스 생성/삭제
1) 생성
a) AAA라는 데이터베이스를 생성
CREATE DATABASE AAA;
b) AAA라는 데이터베이스에서 작업
USE AAA;
c) AAATABLE 생성
CREATE TABLE AAATABLE (ID varchar(16) NULL, PW varchar(16) NULL, AGE TINYINT NULL);
d) AAATABLE 자료입력
INSERT INTO DBO.AAATABLE VALUES ('hongkildong', '123abc', 30);
e) AAATABLE 자료출력
SELECT ID AS 아이디, PW AS 비밀번호, AGE AS 나이 FROM DBO.AAATABLE;
2) 삭제
f) AAATABLE 삭제
DROP TABLE DBO.AAATABLE;
g) AAA 데이터베이스 삭제
DROP DATABASE AAA;
-- ERROR 발생 이유
-- AAA DB에 들어가있는데, AAA데이터베이스를 삭제하려고 하면 에러가 발생함.
-- 따라서 AAA DB에서 벗어나야 함 (바로 다음의 USE MASTER;를 사용하면 해결!)
h) 사용가능 DB영역을 MASTER로 변경
USE MASTER;
i) 다시 AAA 데이터베이스 삭제
DROP DATABASE AAA;
7. 유니코드 형식 데이터 입력
/* 데이터베이스 생성 */
CREATE DATABASE TestDB2;
/* 해당 데이터베이스에서 작업 */
USE TestDB2;
/* 테이블 생성 */
CREATE TABLE dbo.testTable(
mem_num smallint NOT NULL,
mem_nation nvarchar(25) NOT NULL,
mem_name nvarchar(30) NOT NULL,
mem_birthday date,
mem_income_tzx money -- money라는 데이터 타입 또한 존재
);
/* 테이블에 데이터 입력 */
INSERT TestDB2.dbo.testTable
VALUES
(1, N‘한국', N’홍길동★', ‘1977-07-07', 1500.00),
(2, N‘미국', N’Jackson❤', ‘1980-08-08', 2500.00),
(3, N’태국', N’สวัสดี', ‘1982-12-25', 1700.00),
(4, N’베트남', N’chào', ‘1990-11-11', 1400.00),
(5, N’중국', N’你好', ‘1985-10-25', 1100.00),
(6, N’일본', N’こんにちは', ‘1992-10-25', 2200.00);
-- 유니코드 지원 컬럼으로 데이터타입을 만듦.
/* 테이블의 데이터 출력 */
SELECT * FROM TestDB2.dbo.testTable;
* 유니코드 형식의 SQL을 저장할 경우에는, 유니코드 형식으로 저장을 해줘야함. (저장할 때 안내 창 나옴)
* 유의사항 - 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다. - 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다. - 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :) |