음 아마 비둘기보단 똑똑할꺼야

2018/05/15 - [방송통신대학교/컴퓨터과학과 [3학년 1학기]] - [데이터베이스] 5강 정규화 기초

2018/03/21 - [방송통신대학교/컴퓨터과학과 [3학년 1학기]] - [데이터베이스] 4강 데이터베이스 언어

2018/03/19 - [방송통신대학교/컴퓨터과학과 [3학년 1학기]] - [데이터베이스] 3강 관계형 모델

2018/03/16 - [방송통신대학교/컴퓨터과학과 [3학년 1학기]] - [데이터베이스] 2강 데이터베이스 모델링

2018/03/16 - [방송통신대학교/컴퓨터과학과 [3학년 1학기]] - [데이터베이스] 1강 데이터베이스의 이해

1. 데이터베이스 언어의 개념

1) 데이터베이스 언어의 필요

DBMS 의 역할은 데이터의 관리와 데이터의 사용을 분리 시키는 역할을 한다.
DBMS에게 우리가 원하는것을 부탁하고 청원해야 우리가 원하는것을 얻을 수 있다.
DBMS에게 요청할때 사용하는 도구가 데이터베이스 언어이다.

2) SQL의 개요

SQL(Structured Query Language)은 관계대수에 기초하여 관계형 데이터베이스의 데이터를 관리하기 위해 설계된 언어
1986년 ANSI, 1987년 ISO에서 표준으로 제정

특징

    - 비절차적 언어, 필요한 데이터만 기술
    - 인간의 언어와 매우 유사하고 간단, 명료

3) SQL의 구분

3-1) 데이터 정의 언어 (DDL: Data Definition Language)
    - 데이터베이스 내의 객체를 생성 및 삭제하고 그 구조를 조작하는 명령어의 집합
    - 데이터가 준수해야 하는 제약조건을 기술
    - CREATE, ALTER, DROP 문 등

3-2) 데이터 조작 언어 (DML: Data Mainpulation Language)
    - DDL에 의해 정의된 테이블에 데이터를 조작하는 명령어의 집합
    - 데이터에 대한 CRUD(생성, 검색, 삭제, 수정) 명령을 포함
    - INSERT, UPDATE, DELETE, SELECT 문 등

4) 데이터 타입의 개념

컬럼이 가질 수 있는 값의 범위 즉 도메인을 결정
기본 데이터타입
    - 문자: CHAR(n), VARCHAR(n), CLOB [n은 길이를 의미함]
    - 숫자: INT, FLOAT, DOUBLE, DECIMAL(m,n) [DECIMAL은 정수(m), 소수(n)을 지정할 수 있음]
    - 날짜/시간: DATE, TIME, DATETIME, TIMESTAMP


2. 데이터의 정의

1) 테이블 생성
    새로운 2차원 형태의 테이블을 생성
    구문형식
        CREATE TABLE <테이블이름> ( <컬럼이름1> <데이터타입1> [제약조검1] ... ]

(그림 테이블 생성 질의의 사용)


2) 테이블 수정
    테이블에 새로운 컬럼을 추가, 삭제 및 수정하여 구조를 변경
    구문형식
        컬럼추가: ALTER TABLE <테이블이름> ADD <컬럼이름><데이터타입><제약조건>
        컬럼삭제: ALTER TABLE <테이블이름> DROP <컬럼이름>
        컬럼수정: ALTER TABLE <테이블이름> CHANGE <컬럼이름><데이터타입>
(그림 테이블 수정 질의의 사용1) 컬럼 추가


3) 테이블 삭제
    테이블을 데이터베이스에서 삭제
    구문형식
        DROP TABLE <테이블이름>


3. 데이터의 조작

1) 데이터 삽입

1-1) INSERT문
    - 테이블에 새로운 레코드를 삽입
    - 모든 속성 또는 부분 속성에 대한 속성값을 삽입
    구문형식
        INSERT INTO <테이블이름> VALUES ( v1, v2 ... Vn)
        INSERT INTO <테이블이름>(컬럼1, 컬럼2, ... 컬럼n) VALUES (V1, V2, ... Vn)
        VALUES 에 문자 입력시 값의 양쪽에 작은 따옴표를 붙여야하고 숫자의 경우 붙이지 않아도 된다.

2) 데이터 수정

2-1) UPDATE문
    - 조건을 만족하는 레코드의 특정 컬럼을 수정
    구문형식
        UPDATE <테이블이름> SET <컬럼1> = <값> [, <컬럼2> = <값2] , <컬럼3> = <값3>] <WHERE> 조건

3) 데이터 삭제

3-1) DELETE문
    - 조건을 만족하는 레코드를 삭제
    구문형식
        DELETE FROM <테이블이름> <WHERE> 조건

4) 데이터 검색

4-1) 기본 SELECT 질의
    - 테이블에서 조건을 만족하는 전체 또는 특정 레코드를 검색
    - 한 개 또는 그 이상의 테이블에서 데이터 검색 가능

JOIN문 사용
    SELECT 이름, 교수.학과명, 캠퍼스 FROM 교수, 학과 WHERE 교수.학과명 = 학과.학과명

4-2) 집계함수를 사용한 SELECT 질의
    - 복수개의 레코드에 존재하는 특정 컬럼값에 집계함수를 통해 다양한 계산을 수행할 수 있는 기능
    - 집계함수의 종류
        COUNT, SUM, AVG, MAX, MIN

4-3) 그룹질의
    - 특정 기준으로 레코드를 그룹화하고 각 레코드 그룹에 대해 집계함수를 적용하는 질의
    구문형식
        SELECT 질의 GROUP BY 컬럼
            - 주의: 출력되는 컬럼에 그룹의 기준과 집계 함수 이외의 어떠한 값도 포함될 수 없음
        SELECT 학과명, COUNT(과목명) AS 개설_강의수 FROM 과목 GROUP BY 학과명

4-4) 중첩질의
    - SELECT문 내부에서 독립적으로 실행 가능한 또 다른 SELECT문이 내포되어 있는 질의
    종류
        - FROM 절에서의 중첩 질의 활용
            FROM절에서의 결과집합을 SELECT에서 재검색
        - WHERE 절에서의 중첩 질의 활용
            WHERE절에서의 결과 집합을 활용하여 외부 질의에서 레코드의 출력 여부를 결정
            IN, NOT IN, EXISTS, NOT EXSISTS 사용

4-5) 뷰의 정의


    - 하나 이상의 원본테이블로부터 유도되어 일반 테이블처럼 조작 할 수 있는 가상 테이블
    - 물리적으로 저장되지 않음
구문형식
    CREATE VIEW 뷰이름 AS [질의]

준돌 Jundol / 2016.05.19 16:44 / SQL

1. GROUP BY

말 그대로 그룹으로 묶어주는 역할을 한다.
한 테이블에서 사용자(userid)가 구매한 물품의 개수(amount)를 보려면 각각의 행이 출력된다.

하지만 해당 사용자가 총 구매한 물품의 개수로 묶어서 출력해 보이고 싶다면 sum 함수를 사용하면 된다.

1
SELECT userid, SUM(amount) FROM buyTbl GROUP BY userid
cs

이렇게 되면 열 이름 없음으로 나오는데 이럴때는 별칭(alias)를 사용해서 결과를 보기 편하도록 한다.

1
SELECT userid AS [사용자 아이디], SUM(amount) AS [총 구매 개수] FROM buyTbl GROUP BY userid
cs

구매액의 총 합을 출력해 본다. 구매액은 가격 * 개수이므로 총 합은 SUM()을 사용한다.

1
SELECT userid AS [사용자 아이디], SUM(amount * price) AS [총 구매 액] FROM buyTbl GROUP BY userid
cs


2. 집계함수

함수명 

설명 

AVG() 

평균 

MIN() 

최소값 

MAX() 

최대값 

COUNT() 

행의 개수 

COUNT_BIG() 

행의 개수. 단, 결과값이 bigint형 

STDEV() 

표준편차 



3. HAVING

위의 구매액의 총 합을 구하는 쿼리문에서 총 구매액이 1000 이상인 사용자만 출력하려고 한다.

그러면 보통 지금까지 학습했을 경우 WHERE절을 이용해서 출력하려고 할 것이다.

1
2
3
4
SELECT userid as [사용자], SUM(price * amount) as [총 구매액]
FROM buyTbl
WHERE SUM(price * amount) > 1000
GROUP BY userid
cs

위와같이 오류가 발생한다.

이럴 때 사용하는게 HAVING 이다. HAVING은 WHERE와 비슷한 개념으로 조건을 제한하는 것으로 집계 함수에 대해서 조건을 거는 것이라고 생각하면 된다. 그리고 HAVING 절은 꼭 GROUP BY 절 다음에 나와야 한다!!

1
2
3
4
SELECT userid as [사용자], SUM(price * amount) as [총 구매액]
FROM buyTbl
GROUP BY userid
HAVING SUM(price*amount) > 1000
cs


준돌 Jundol / 2016.05.19 15:38 / SQL

1. 테이블에서 전체의 100분의 1 즉, 1%만 보겠다는 쿼리문

1
2
3
4
5
6
SELECT TOP(SELECT COUNT(*)/100 FROM Sales.CreditCard)
CreditCardID
FROM Sales.CreditCard
WHERE CardType = 'Vista'
ORDER BY ExpYear, ExpMonth
 
cs


COUNT(*)는 행의 개수를 반환하는 함수이다.


2. 다른 예로 전체 상위 건수의 0.1%만 출력하는 쿼리문이다.

그럴경우 TOP(N)PERCENT 를 사용하면 된다.

1
2
3
4
SELECT TOP(0.1)PERCENT CreditCardID FROM Sales.CreditCard
WHERE CardType = 'Vista'
ORDER BY ExpYear, ExpMonth
 
cs


3. WITH TIES 옵션

마지막 출력값과 동일한 값이 있는데 N%가 넘더라도 출력하는 옵션에는 WITH TIES 옵션이 있다.
만약 내가 출력하고싶은 조건에 해당하는 값이 5개인데 0.1프로가 4개라면 5개째는 출력되지않을 것이다. 그럴때 사용한다.

1
2
3
4
SELECT TOP(0.1)PERCENT WITH TIES CreditCardID, ExpMonth, ExpYear FROM Sales.CreditCard
WHERE CardType = 'Vista'
ORDER BY ExpYear, ExpMonth
 
cs



© 2015 Jundol in 음 아마 비둘기보단 똑똑할꺼야
Designed by DH / Powered by Tistory
141 / 31 / 88,151