sqlite3 실습 - DELETE 활용

DB 2016. 4. 29. 20:46

sqlite3 실습을 위한 초기 설정 (http://jwprogramming.tistory.com/90)


드디어 마지막 DELETE 질의문입니다. 삭제에 대한 부분을 살펴보도록 합시다.


<삭제>

1. 학번 100인 학생을 삭제하라.

- STUDENT테이블의 학번이 100인 학생데이터를 삭제하게 됩니다.


삭제 후 제대로 삭제되었는지 확인해주는 화면입니.


 

2. 등록(ENROL) 테이블의 모든 행을 삭제하라.


삭제 후, ENROL을 검색하였을 때, ENROL테이블 자체가 삭제된 것이 아니라, 투플이 없는 빈상태로 남아있음을 확인할 수 있습니다.


 

3. 과목 ‘C413'의 기말 성적이 60점 미만인 컴퓨터과 학생을 등록 테이블에서 삭제하라.


삭제 후, 확인해주는 화면입니. 하지만 조건에서 기말성적이 60점 미만인 부분인 학생이 없으므로 학생들은 11명 그대로 남게 되는 것을 확인할 수 있습니다.

'DB' 카테고리의 다른 글

sqlite3 실습 - INSERT 활용  (0) 2016.04.29
sqlite3 실습 - UPDATE 활용  (0) 2016.04.29
sqlite3 실습 - SELECT 활용  (2) 2016.04.29
Sqlite3 설치 및 사용  (0) 2016.04.27
시스템 카탈로그(System Catalog)  (0) 2016.04.24

WRITTEN BY
SiriusJ

,

sqlite3 실습 - INSERT 활용

DB 2016. 4. 29. 20:40

sqlite3 실습을 위한 초기 설정 (http://jwprogramming.tistory.com/90)


지난 UPDATE 활용에 이은 이번에는 INSERT를 살펴보겠습니다.


[INSERT]

1. 학번 : 600, 이름;‘박상철’, 학년;1, 학과;‘컴퓨터인 학생을 삽입하라.

- STUDENT 테이블에 Sno, Sname, Year, Dept 각각에 대하여 VALUES값을 지정하여 삽입해주는 부분입니다.

이때, 만약 INTO STUDENT(Sno, Sname, Year, Dept)를 일일이 써주기 귀찮다면, 생략해도 문제는 없으나

VALUES에서 값을 지정해줄 때 순서를 각각에 맞게 지켜주어야 합니다.

1) INSERT INTO STUDENT VALUES (600, '박상철', 1, '컴퓨터'); (O) 

2) INSERT INTO STUDENT VALUES ('박상철', 600, '컴퓨터', 1); (X) -> 순서를 지켜주어야 함

 

삽입 후 확인한 모습입니다.

 

 

2. 학생 테이블에서 컴퓨터과 학생의 학번, 이름, 학년을 검색하여 테이블 컴퓨터(COMPUTER)에 삽입하라.

------------------>안됨 COMPUTER 테이블이 없으므로.

 

따라서, COMPUTER 테이블을 생성해 준 후, 다시 데이터를 삽입해줍니다.


삽입 후, COMPUTER 테이블이 잘 생성되었는지 확인해준 화면입니.

'DB' 카테고리의 다른 글

sqlite3 실습 - DELETE 활용  (0) 2016.04.29
sqlite3 실습 - UPDATE 활용  (0) 2016.04.29
sqlite3 실습 - SELECT 활용  (2) 2016.04.29
Sqlite3 설치 및 사용  (0) 2016.04.27
시스템 카탈로그(System Catalog)  (0) 2016.04.24

WRITTEN BY
SiriusJ

,

sqlite3 실습 - UPDATE 활용

DB 2016. 4. 29. 20:33

sqlite3 실습을 위한 초기 설정 (http://jwprogramming.tistory.com/90)


SELECT를 이용한 검색에 이어 이번에는 UPDATE를 이용한 수정을 살펴보겠습니다. 


<UPDATE - 갱신/수정>

1. 학번이 300인 학생의 학년을 2로 변경하라.

- UPDATE문을 이용하여 STUDENT테이블에 Sno가 300인 데이터들에 한하여 Year을 2로 변경해주는 부분입니다.

 

변경 후, STUDENT테이블에서의 학년이 바뀐 모습입니.



2. '컴퓨터과 과목의 학점(Credit) 1학점씩 증가시켜라.

- Credit = Credit+1로 하여 단순히 1씩 증가해주는 부분입니다.


변경 후, 확인한 모습입니다.


 

3. ‘컴퓨터과 학생의 기말 성적을 5점씩 가산하라.

- WHERE조건절 안에 SELECT문을 삽입하여 조건문을 이루는 모습입니다.

위의 Credit부분과 중복되므로 설명은 생략합니다.

 

변경 후, 확인한 모습입니.

 

 

4. 모든 4학년 학생의 학과를 데이타베이스과목을 개설한 학과로 갱신하라.

 

- Year이 4인 학생데이터들에 대하여 

SELECT문을 SET에 두어, -> 데이타베이스과목을 개설한 Dept(학과)를 검색하여 갱신해주는 부분입니다. 


변경 후, 4학년 학생들에 대해서 확인한 모습입니다.(Dept(학과)가 전부 컴퓨터로 바뀐 모습을 확인할 수 있습니다.)

'DB' 카테고리의 다른 글

sqlite3 실습 - DELETE 활용  (0) 2016.04.29
sqlite3 실습 - INSERT 활용  (0) 2016.04.29
sqlite3 실습 - SELECT 활용  (2) 2016.04.29
Sqlite3 설치 및 사용  (0) 2016.04.27
시스템 카탈로그(System Catalog)  (0) 2016.04.24

WRITTEN BY
SiriusJ

,

sqlite3 실습 - SELECT 활용

DB 2016. 4. 29. 20:23

지난번에, sqlite3를 설치 한 후, 메모장을 이용하여 DB table을 구성하도록 하였습니다.

(http://jwprogramming.tistory.com/90)

오늘은 DB의 여러 질의문(검색, 삽입, 삭제, 수정) 중에 '검색(SELECT)' 부분을 다루도록 하겠습니다.


1. 학생(STUDENT) 테이블에 어떤 학과(Dept)들이 있는지 검색하라.

->먼저, test.db라는 Sqlite3 데이터베이스 파일명으로 지정하여 sqlite3를 실행합니다.

그 후, 사용자가 보기 편하도록 하기 위하여 아래의 명령을 입력해 주면 기존 Oracle의 인터페이스와 유사하게 표현됩니다.

>.header on

>.mode column

그 후, SELECT DISTINCT Dept FROM STUDENT; 명령을 통하여 중복된 결과는 제거하고(DISTINCT) STUDENT테이블로부터 Dept를 전부 출력해줍니다.

결과로 보면 컴퓨터, 전기, 산공이 표현되는 것을 알 수 있습니다.


2. 학생(STUDENT) 테이블 전부를 검색하라.

전부라는 키워드는 ' * '로써 표현할 수 있습니다. 

따라서 SELECT * FROM STUDENT; 

를 통하여 STUDENT테이블의 전부를 확인할 수 있습니다.

  

3. 학생(STUDENT) 테이블에서 학과(Dept)컴퓨터이고 학년(Year)4인 학생의 학번(Sno)과 이름(Sname)을 검색하라.

- DB의 검색에서 조건에 대한 부분은 WHERE 절을 통해 설정할 수 있습니다.

Dept = '컴퓨터' -> 학과가 컴퓨터를 전부 조회

Year = 4  -> 학년이 4 를 전부 조회

-> AND조건이므로 둘 다 만족하는 데이터를 검색하게 되면, 결과로 나수영과 송병길이 해당되고,

그에 대한 학번과 이름을 조회해야하므로 

SELECT Sno, Sname FROM STUDENT WHERE Dept='컴퓨터' AND Year=4; 

 학번과 이름만을 출력하게 합니다.

 

4. 등록(ENROL) 테이블에서 중간 성적(Midterm)90점 이상인 학생의 학번(Sno)과 과목번호 (Cno)를 검색하되 학번(Sno)에 대해서는 내림차순으로, 또 같은 학번에 대해서는 과목 번호 (Cno)의 오름차순으로 검색하라.

- WHERE절까지는 위의 부분과 유사하므로 생략하도록 하겠습니다. 추가적으로 살펴볼 부분은 ORDER BY 를 통하여 내림차순으로 볼 것인지, 오름차순으로 볼 것인지에 대한 부분입니다.

Sno는 내림차순으로, Cno는 오름차순으로 검색할 것이므로

ORDER BY Sno DESC, Cno ASC;

(DESC -> 내림차순,  ASC -> 오름차순)

을 통하여 데이터를 보여주게 됩니다.

>SELECT Sno, Cno FROM ENROL WHERE Midterm >= 90 ORDER BY Sno DESC, Cno ASC;



5. 등록(ENROL) 테이블에서 과목 번호(Cno)‘C312'인 중간 성적(Midterm)3점을 더한 점수를 학번‘, ’중간성적 = ‘이란 텍스트 내용을 시험‘, 그리고 점수라는 열 이름으로 검색하라.

- AS란 앨리어스를 사용할 때 이용하게 됩니다.

SELECT 필드 AS A FROM 테이블; 과 같은식으로 사용하게 되며

이때, 문제에서 Cno가 'C312'이라는 것이 조건이기 때문에,

WHERE Cno='C312' 가 됩니다.

Sno를 학번으로, 바꿔준 후, 두번째 칼럼에는 시험, 세번째 칼럼은 점수로 AS를 통해 설정을 해줍니다.

그 후 각각의 값은 Sno는 그대로, 시험 칼럼에는 '중간시험 =' 을, 점수칼럼에는 Midterm의 값 + 3 을 해준 상태로 검색을 하게 해주는 부분입니다.

SELECT Sno AS 학번, '중간시험 =' AS 시험, Midterm+3 AS 점수 FROM ENROL WHERE Cno='C312';



6. 과목번호(Cno) 'C413'에 등록한 학생의 이름(Sname), 학과(Dept), 성적(Grade)를 검색하라.

- 이번에는 테이블에 대한 제한이 없습니다. 즉 과목번호 'C413'에 해당한다면 STUDENT건, ENROL이건 관계없이 전부 출력해주어야 하는 부분입니다.

따라서 FROM STUDENT S, ENROL E 라 하여 STUDENT테이블의 데이터에 대해서는 S.xxx로, ENROL테이블의 데이터에 대해서는 E.xxx 로 접근하게 됩니다.

이름,학과,성적에 대한 검색이므로 SELECT S.Sname, S.Dept, E.Grade 이며,

조건으로 설정된 부분 S.Sno = E.Sno AND E.Cno='C413'; 을 살펴보겠습니다.

WHERE 조건절을 이용하여 STUDENT테이블과 ENROL테이블 사이에 S.Sno = E.Sno 의 관계를 맺어주고, 

ENROL테이블 내에 과목번호가 있으므로( STUDENT테이블에는 없습니다!), E.Cno = 'C413'; 부분을 추가해줍니다.

>SELECT S.Sname, S.Dept, E.Grade FROM STUDENT S, ENROL E WHERE S.Sno = E.Sno AND E.Cno='C413';


 

7. 같은 학과 학생들의 학번을 쌍으로 검색하라. , 첫 번째 학번은 두 번째 학번보다 작게 하라.

- 어려운 내용이 아니므로 위의 부분들을 참고하면 이해할 수 있을것이라 생각되어 설명은 생략하도록 하겠습니다.


 

8-1. 학생 테이블에 학생 수가 얼마인가를 검색하라.

- 단순히 COUNT 키워드를 이용하여 학생수가 얼마인지를 검색하는 부분입니다.


 8-2. 학번(Sno)300인 학생이 등록한 과목(Cno)은 몇 개인가?

 

- 위의 내용들과 중복되므로 생략합니다.

 

 

8-3. 과목 ‘C413'에 대한 중간 성적의 평균은 얼마인가?

- AVG키워드를 이용하여 중간성적의 평균을 계산해주는 부분입니다.


9. 과목별 기말성적(Final)의 평균을 검색하라.

-  과목별에 대하여 GROUP BY 절을 이용하여 검색하는 부분입니다.

GROUP BY절은 데이터들을 원하는 그룹으로 나눌 수 있고,

나누고자 하는 그룹의 컬럼명을 SELECT절과 GROUP BY절 뒤에 추가하면 됩니다.

집계함수와 함께 사용되는 상수는 GROUP BY절에 추가하지 않아도 됩니다.

 

10. 3명 이상 등록한 과목의 기말 평균 성적을 검색하라.

- HAVING 절을 이용하여 3명 이상 등록한 과목에 대하여 기말평균 성적을 검색하는 부분입니다.

HAVING절은 WHERE절에서는 집계함수를 사용할 수 없으므로, GROUP BY절과 함께 사용이 되며 집계함수를 가지고 조건비교를 할 때 사용하게 됩니다. 

 

 

11-1. 과목 번호(Cno) 'C413' 등록한 학생이름(Sname)을 검색하라.

- 조건절안에 SELECT가 삽입된 중첩 SELECT 문입니다. 복잡해보이지만 해석하면 단순한 내용이므로 생략하도록 하겠습니다.

이때, 조건절에 SELECT문을 추가로 해주기 위해서 WHERE Sno IN 을 사용하는 것에 주의하시면 되겠습니다.


 

11-2. 과목 번호 ‘C413'에 등록하지 않은 학생의 이름을 검색하라.

- 위와 유사한 내용입니다. 생략합니다.


11-3. 학생 정기태와 같은 학과에 속하는 학생의 이름과 학과를 검색하라.

- 위와 유사한 내용이므로 생략합니다.


 

11-4. 등록(ENROL) 테이블에서 학번이 500인 학생의 모든 기말 성적보다 좋은 학기말 성적을 받은 학생의 학번과 과목번호를 검색하라.

 


12. 과목번호(Cno)C로 시작하는 과목의 과목번호와 과목이름(Cname)을 검색하라.

- C로 시작하는 부분에 대하여 LIKE 키워드를 이용하여 'Cx' 와 같이 설정해주면, x에 대한 부분에 관계없이 과목번호(Cno)중에 첫글자가 C로 시작되는 과목번호는 전부 검색하게 됩니다.

 


13. 학과(Dept)NULL인 학생의 학번과 이름을 검색하라.

------> Dept(학과)NULL인 학생이 없으므로 아무 값도 검색되지 않습니.(아래 그림은 참고)


따라서 학생테이블에 학번이 600, 이름이 김길동’, 학과가 NULL인 투플을 삽입하고 다시 검색하면,

아래와 같이 원하는 화면을 검색할 수 있게 됩니다.

 

 

14-1. 과목 ‘C413'에 등록한 학생의 이름을 검색하라.

- 과목번호 'C413'에 등록한 학생을 검색하기 위한 조건으로 EXISTS를 사용하였으며 

WHERE조건절 안의 SELECT문에서, Sno = STUDENT.Sno 를 통해 밖의 STUDENT테이블과 ENROL테이블의 관계를 맺어주고, Cno='C413'과 AND조건으로 묶어주면 됩니다.

 

14-2. 과목 ‘C413'에 등록하지 않은 학생의 이름을 검색하라.

- 등록되지 않은 부분은 EXITSTS앞에 NOT을 붙여주어 NOT EXISTS로 조건을 정해주면 됩니다.

 

 

15. 3학년이거나 또는 과목 'C324'에 등록한 학생의 학번을 검색하라.

- UNION을 이용하여 SELECT문 두 개를 '또는' 으로 이어주게 됩니다.

 

다음에는 UPDATE에 대해 다뤄보겠습니다.

'DB' 카테고리의 다른 글

sqlite3 실습 - INSERT 활용  (0) 2016.04.29
sqlite3 실습 - UPDATE 활용  (0) 2016.04.29
Sqlite3 설치 및 사용  (0) 2016.04.27
시스템 카탈로그(System Catalog)  (0) 2016.04.24
커서(Cursor)의 개념과 관련 명령어  (0) 2016.04.24

WRITTEN BY
SiriusJ

,

Sqlite3 설치 및 사용

DB 2016. 4. 27. 16:52

간단한 DB 실습으로 sqlite3를 설치한 후, 사용해보도록 하겠습니다.


먼저 SQlite는 https://www.sqlite.org/ 에서 다운로드 받을 수 있습니다.

- 위의 화면메뉴에서 Download를 클릭한 후, 아래로 내리다보면 아래 그림과 같이 Windows환경에서 설치하여 사용할 수 있습니다.


- sqlite-tools 를 선택하여 다운로드받고, 압축을 풀어주면 


- 다음과 같이 3개의 실행파일이 있습니다.

Windows환경에서 Sqlite3 를 사용하기 위해 cmd를 이용합니다.

Windows키 + R을 눌러서 실행창을 띄우고, cmd 를 입력하여 실행한 후, 위의 sqlite3.exe가 존재하는 디렉토리로 이동한 후 사용합니다.


사용해보기 이전에, 위의 디렉토리(sqlite3.exe가 존재하는)에 텍스트파일을 하나 만들어서 텍스트파일 내의 데이터를 이용하는 실습을 해보도록 해보겠습니다.

저는 ch6 이라는 이름의 텍스트파일을 만들어 준 후, 해당 내용에 아래의 내용을 입력한 후, 저장해주었습니다.

CREATE TABLE STUDENT   

( Sno INT NOT NULL,

     Sname CHAR(10) NOT NULL,

     Year INT,

     Dept CHAR(20),

     PRIMARY KEY(Sno));


CREATE TABLE COURSE

   ( Cno CHAR(6) NOT NULL,

     Cname CHAR(20) NOT NULL,

     Credit INT,

     Dept CHAR(20),

     PRname CHAR(10),

     PRIMARY KEY(Cno));


CREATE TABLE ENROL

   ( Sno INT NOT NULL,

     Cno CHAR(6) NOT NULL,

     Grade CHAR(1),

     Midterm INT,

     Final INT,

     PRIMARY KEY(Sno, Cno),

     FOREIGN KEY(Sno) REFERENCES STUDENT(Sno)

         ON DELETE CASCADE

         ON UPDATE CASCADE,

     FOREIGN KEY(Cno) REFERENCES COURSE

         ON DELETE CASCADE

         ON UPDATE CASCADE,

     CHECK(Midterm>=0 AND Midterm<=100 AND Final>=0 AND Final<=100));


BEGIN;


INSERT INTO STUDENT VALUES(100, '나수영', 4, '컴퓨터');

INSERT INTO STUDENT VALUES(200, '이찬수', 3, '전기');

INSERT INTO STUDENT VALUES(300, '정기태', 1, '컴퓨터');

INSERT INTO STUDENT VALUES(400, '송병길', 4, '컴퓨터');

INSERT INTO STUDENT VALUES(500, '박종화', 2, '산공');


INSERT INTO COURSE VALUES('C123', '프로그래밍', 3, '컴퓨터', '김성국');

INSERT INTO COURSE VALUES('C312', '자료구조',   3, '컴퓨터', '황수관');

INSERT INTO COURSE VALUES('C324', '화일구조',   3, '컴퓨터', '이규찬');

INSERT INTO COURSE VALUES('C413', '데이타베이스', 3, '컴퓨터', '이일로');

INSERT INTO COURSE VALUES('E412', '반도체',     3, '전자', '홍봉진');


INSERT INTO ENROL VALUES(100, 'C413', 'A', 90, 95);

INSERT INTO ENROL VALUES(100, 'E412', 'A', 95, 95);

INSERT INTO ENROL VALUES(200, 'C123', 'B', 85, 80);

INSERT INTO ENROL VALUES(300, 'C312', 'A', 90, 95);

INSERT INTO ENROL VALUES(300, 'C324', 'C', 75, 75);

INSERT INTO ENROL VALUES(300, 'C413', 'A', 95, 90);

INSERT INTO ENROL VALUES(400, 'C312', 'A', 90, 95);

INSERT INTO ENROL VALUES(400, 'C324', 'A', 95, 90);

INSERT INTO ENROL VALUES(400, 'C413', 'B', 80, 85);

INSERT INTO ENROL VALUES(400, 'E412', 'C', 65, 75);

INSERT INTO ENROL VALUES(500, 'C312', 'B', 85, 80);


COMMIT;


위 내용을 정리하면, STUDENT, COURSE, ENROL이라는 테이블을 만들어 준 뒤, 테이블 내부에 각각 인스턴스들을 지정해주는 모습입니다.

대표적으로 STUDENT 테이블로 예시를 들면,

--------------------------------

 Sno INT NOT NULL,

 Sname CHAR(10) NOT NULL,

 Year INT,

 Dept CHAR(20),

 PRIMARY KEY(Sno));

--------------------------------

-> Sno를 INT형에 NULL이 아닌 값으로 지정해주겠다는 뜻이고, Sname은 크기가 10인 CHAR형에 NULL이 아닌 값을, Year는 INT형, ... 과 같이 설정해주는 모습입니다.

마지막으로 PRIMARY KEY를 통해 Sno를 기본키로 설정해주는 모습입니다. 

(이때, Sno는 기본키가 되므로 NULL이 들어가서는 안됩니다.)


다른 테이블들도 유사한 모습이라 생략하도록 하고, 특별히 ENROL 테이블에서는 Foreign Key(외래 키)를 통해 STUDENT 테이블의 Sno를 외래 키로 설정해주는 부분입니다.


보기와 같이 설정을 마쳐준 후, 이제 데이터들을 삽입해주는 부분은

BEGIN ~ COMMIT 사이입니다.

----------------------------------------------------------------

...

INSERT INTO STUDENT VALUES(100, '나수영', 4, '컴퓨터');

...

----------------------------------------------------------------

 -> 'STUDENT 테이블에 ( 100, '나수영', 4, '컴퓨터' ) 의 값을 삽입해주겠다' 라는 뜻입니다.

이때, 값을 입력해주는 순서는 위에서 테이블 내에 인스턴스를 정의해준 순서대로 입력해주어야합니다.!


차례로 STUDENT와 COURSE, ENROL 테이블에 데이터를 삽입해주는 모습입니다.

다음 포스팅에서는 질의문을 사용하는 실습을 해보겠습니다.

'DB' 카테고리의 다른 글

sqlite3 실습 - UPDATE 활용  (0) 2016.04.29
sqlite3 실습 - SELECT 활용  (2) 2016.04.29
시스템 카탈로그(System Catalog)  (0) 2016.04.24
커서(Cursor)의 개념과 관련 명령어  (0) 2016.04.24
키(Key)의 개념과 종류  (0) 2016.04.24

WRITTEN BY
SiriusJ

,

데이터베이스 카탈로그데이터베이스의 개체들에 대한 정의를 담고 있는 메타데이터들로 구성된 데이터베이스 내의 인스턴스입니다. 기본 테이블, 뷰 테이블, 동의어(Synonym)들, 값 범위들, 인덱스들, 사용자들, 사용자 그룹 등등 과 같은 데이터베이스의 개체들이 저장됩니다.


일반적으로, DBMS는 특정 데이터베이스의 구조를 파악하기 위해 데이터의 타입이나 포맷과 같은 정보를 데이터베이스 카탈로그로부터 얻게 됩니다.


파일 처리 방식이 특정 데이터베이스만을 접근할 수 있음에 비해, DBMS카탈로그로부터 데이터베이스에 대한 정의를 가져와서 데이터베이스를 접근하므로 다양한 데이터베이스를 접근 할 수 있게 됩니다.

'DB' 카테고리의 다른 글

sqlite3 실습 - SELECT 활용  (2) 2016.04.29
Sqlite3 설치 및 사용  (0) 2016.04.27
커서(Cursor)의 개념과 관련 명령어  (0) 2016.04.24
키(Key)의 개념과 종류  (0) 2016.04.24
릴레이션(Relation)의 특징  (0) 2016.04.24

WRITTEN BY
SiriusJ

,

커서는 내장 SQL문의 수행결과로 반환 될 수 있는 복수의 튜플들을 액세스 할 수 있도록 해주는 개념입니다.


[내장 SQL문이란?]

- 내장 SQL은 응용 프로그램 내에 데이터베이스에서 사용하는 데이터를 정의하거나 질의하는 SQL문장을 내포하여 프로그램이 실행될 때 함께 실행되도록 호스트 프로그램 언어(PASCAL, COBOL, C, Visual Basic..)로 만든 프로그램에 삽입된 SQL입니다.


- 커서는 질의 수행결과로 반환되는 첫 번째 튜플에 대한 포인터로 생각할 수 있습니다.

- 커서를 사용하여 질의 결과로 반환될 수 있는 튜플들을 한 번에 하나씩 차례로 처리할 수 있습니다.


[관련 명령어]

- DECLARE : 커서를 정의하는 등 커서에 관련된 선언을 하는 명령

- OPEN : 커서가 질의 결과의 첫 번째 튜플을 포인트하도록 설정하는 명령

- FETCH : 질의 결과의 튜플들 중 현재의 다음 튜플로 커서를 이동시키는 명령

- CLOSE : 질의 수행 결과에 대한 처리 종료 시 커서를 닫기 위해 사용하는 명령


'DB' 카테고리의 다른 글

Sqlite3 설치 및 사용  (0) 2016.04.27
시스템 카탈로그(System Catalog)  (0) 2016.04.24
키(Key)의 개념과 종류  (0) 2016.04.24
릴레이션(Relation)의 특징  (0) 2016.04.24
데이터베이스 언어의 정의와 종류(DDL, DML, DCL)  (0) 2016.04.24

WRITTEN BY
SiriusJ

,

키(Key)의 개념과 종류

DB 2016. 4. 24. 18:24

[키(Key) 란?]

: 키는 데이터베이스에서 조건에 만족하는 튜플을 찾거나, 순서대로 정렬할 때 튜플들을 서로 구분할 수 있는 기준이 되는 애트리뷰트를 말합니다


[키의 종류]

1) 기본 키(Primary Key)

- 기본 키는 후보 키 중에서 특별히 선정된 키로 중복된 값을 가질 수 없습니다.

- 기본 키는 후보 키의 성질을 갖습니다.

- 유일성과 최소성을 가지며 튜플을 식별하기 위해 반드시 필요한 키입니다.

- 기본 키는 NULL값을 가질 수 없습니다. (즉, 튜플에서 기본 키로 설정된 속성에는 NULL값이 있어서는 안됩니다.)


2) 후보 키(Candidate Key)

- 릴레이션을 구성하는 속성들 중에서 튜플을 유일하게 식별하기 위해 사용되는 속성들의 부분집합입니다.

- 후보 키는 유일성과 최소성을 모두 만족합니다.


* 유일성(Unique) : 하나의 키 값으로 하나의 튜플만을 유일하게 식별할 수 있어야 합니다.

* 최소성(Minimality) : 모든 레코드들을 유일하게 식별하는 데 꼭 필요한 속성으로만 구성되어야 합니다.

예시) <학생>릴레이션에서 '학번'이나 '주민번호'는 다른 레코드를 유일하게 구별할 수 있는 기본 키로 사용할 수 있으므로 후보 키입니다. '학과' 등은 다른 레코드와 중복 될 가능성이 있으므로 기본 키로 사용할 수 없습니다.


3) 대체 키(Alternate Key)

- 대체 키는 후보키 중에서 선정된 기본 키를 제외한 나머지 후보 키를 의미합니다.


4) 슈퍼 키(Super Key)

- 복합 키 또는 연결 키라고 합니다.

- 기본 키로 사용되며 2개 이상의 열을 1개의 후보 키로 만들어 기본키로 활용되는 키입니다.

- 슈퍼 키는 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키를 말합니다.

- 릴레이션을 구성하는 모든 튜플 중 슈퍼 키로 구성된 속성의 집합과 동일한 값을 나타나지 않습니다.

- 슈퍼 키는 릴레이션을 구성하는 모든 튜플에 대해 유일성은 만족하지만, 최소성은 만족하지 못합니다.


5) 외래 키(Foreign Key)

- 외래 키는 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합을 의미합니다.

- 외래 키는 릴레이션 간의 관계를 표현할 때 사용합니다.

- 한 릴레이션에 속한 속성 A와 참조 릴레이션의 기본키인 B가 동일한 도메인상에서 정의 되었을 때의 속성 A를 외래 키라고 합니다.

- 외래 키는 참조 릴레이션의 기본 키와 동일한 키속성을 가집니다.

예시) <수강>이라는 릴레이션이 <학생>릴레이션을 참조하고 있을 때, <학생>릴레이션의 "학번"이 기본 키라고 가정하겠습니다. 이 때, <수강>릴레이션의 "학번"은 외래 키가 됩니다.


WRITTEN BY
SiriusJ

,