kang's study
SQL server 명령어 본문
< 데이터 베이스 구축 >
1> 테이블 생성
데이터 형식 (SQL server)
문자 ① CHAR(n) – 고정형 ② VARCHAR(n) – 가변형
숫자 ① INT ② DECIMAL(자리수, 소수점)
날짜 ① DATE ② DATETIME
use bookstore; # 데이터 베이스 연결
CREATE TABLE 고객 (열_이름, 데이터_형식);
▶ 괄호 안에 제약 조건: 1. NULL 2. PRIMARY KEY 3. FOREIGN KEY 4. other than
1. NULL값
2. 기본키 (① NOT NULL, ② no duplication) PRIMARY KEY
● 기본키 이름 지정:
① 열_이름 INT CONSTRAINT PK_고객_고객번호 PRIMARY KEY
or ② 열_이름 INT NOT NULL
,PRIMARY KEY(고객번호)
테이블 수정: ALTER TABLE 고객
● 기본키 삭제:
ALTER TABLE 고객
DROP CONSTRAINT PK_고객_고객번호;
● 기본키 추가:
ALTER TABLE 고객
ADD CONSTRAINT PK_고객_고객번호 PRIMARY KEY(고객번호);
3. 외래키:
,FOREIGN KEY(고객번호) REFERENCES 고객(고객번호)
4. 기타 제약 조건:
① UNIQUE
CONSTRAINT U_고객_주민등록번호 UNIQUE
*IDENTITY – 기본 키 제약조건과 함께 사용되어 고유한 행 식별자 역할
하나의 테이블에 하나의 IDENTITY
열_이름 INT IDENTITY(1,1)
② DEFAULT – 하나의 기본값
CONSTRAINT DF_고객_고객명 DEFAULT ‘무명’
③ CHECK – 데이터 범위나 조건을 지정
CONSTRAINT CK_고객_상태 CHECK (상태 IN (‘신규’, ‘기존’, ‘이탈’))
④ RULE – CHECK와 같으나 바인딩 해야함
CREATE RULE r상태
AS
@상태 IN (‘신규’, ‘기존’, ‘이탈’);
sp_bindrule r상태, ‘고객.상태’
2> 테이블 구조 변경
1. 열 추가
ALTER TABLE 고객
ADD 주소 VARCHAR(50);
단, NULL 대신 다른 기본값을 할당하려면
ALTER TABLE 고객
ADD 입력일자 DATETIME NULL
CONSTRAINT 입력일자_기본값 DEFAULT getData() WITH VALUES;
2. 열 삭제 (완전 삭제)
기본 값이 있다면 먼저 삭제 해야함
ALTER TABLE 고객
DROP CONSTRAINT 입력일자_기본값;
ALTER TABLE 고객
DROP COLUMN 입력일자;
3. 열 변경
ALTER TABLE 테이블_이름
ALTER COLUMN (열_이름 데이터_형식 [DEFAULT] [NULL]);
3> 테이블 제거 (복구 안 됨)
DROP TABLE 테이블_이름;
< 데이터 관리 >
1> 데이터 입력
1. 정보를 확인: (실무에서 잘 사용하진 않음)
SELECT COLUMN_NAME, ORDINAL_POSITION, DATA_TYPE, IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = ‘테이블_이름’;
2. 데이터 입력:
INSERT INTO 출판사(출판사명, 출판사번호, 전화번호, 담당자)
VALUES (‘로드북출판’, 1, ‘031-200-0000’, ‘홍길동’);
데이터 확인:
SELECT * FROM 출판사;
여러 행을 동시에 입력:
INSERT INTO 출판사_경기
SELECT * FROM 출판사 WHERE 전화번호 LIKE ‘031%’;
2> 데이터 수정
UPDATE 출판사
SET 담당자 = ‘이승기’
WHERE 출판사번호=2;
3> 데이터 삭제
DELETE FROM 출판사
WHERE 출판사번호=1;
< 데이터 검색 >
1> SELECT 명령문: 질의어(query)
1. 모든 열을 검색: SELECT * FROM 회원;
2. 특정 열만 검색: SELECT 회원명, 등급, 주소 FROM 회원;
3. 별명을 기술: SELECT 회원명 AS 회원이름, 주소 AS ‘현 주소지’ FROM 회원;
4. 중복 행 제거: SELECT DISTINCT 등급 FROM 회원;
2> WHERE절 (조건)
SELECT 회원명, 등급, 키 FROM 회원
WHERE 등급 = ‘정회원’ AND 키 ≥ 160;
WHERE절 명령어:
WHERE 열_이름 BETWEEN … AND
WHERE 열_이름 IN / NOT IN
WHERE 열_이름 LIKE ‘와일드 카드’ → _: 임의의 한 개, %: 0개 이상, []: 범위의 한 개, [^]: 범위에 없는 한 개
WHERE 열_이름 IS NULL, IS NOT NULL
3> ORDER BY절 (정렬)
SELECT * FROM 회원
ORDER BY 키 DESC;
4> 서브 쿼리
서브 쿼리에 ORDER BY절을 사용할 수 없다는 점을 꼭 기억
SELECT 회원번호, 회원명, 주소, 몸무게
FROM 회원
WHERE 회원번호 IN (SELECT 회원번호 FROM 회원 WHERE 몸무게 = 45)
5> 요약정보
1. 집단함수: COUNT(), SUM(), AVG(), MAX(), MIN()
2. 그룹화: 동일한 값의 행들을 한 그룹으로 묶음
GROUP BY절에 명시하지 않은 열을 SELECT절에 혼자 포함되거나 집단함수와 함께 명시하여 사용하면 에러 발생
3. 그룹 검색 조건: 반드시 GROUP BY절과 함께 사용
GROUP BY절의 결과인 그룹을 제한한다.
GROUP BY 주문 번호
HAVING COUNT(*) ≥ 2
● WHERE절은 FROM절에서 지정한 테이블을 대상
● HAVING절은 GROUP BY절에 의해 생성된 그룹을 대상
6> join: 여러 개 테이블에서의 데이터 검색
N개의 테이블을 조인하기 위해서는 WHERE절에 반드시 N-1개의 조인 조건절을 필요
SELECT a.출판사명 AS ‘출판사 이름’, b.도서명 AS ‘책 이름’
FROM 출판사 AS a, 도서 AS b
WHERE a.출판사번호 = b.출판사번호
ORDER BY a.출판사번호;