[데이터조작어 - 검색(SELECT)]

 

이곳에 작성되는 예제와 내용은 학교 수업의 내용으로 구성된 내용입니다. 다소 내용이 부족하더라도 양해부탁드립니다.

 

* SELECT 기본 문법

 

SELECT [ALL | DISTINCT] 속성 이름(들)
FROM 테이블 이름(들)
[WHERE 검색조건(들]
[GROUP BY 속성이름]
[HAVING 검색조건(들)]
[ORDER BY 속성이름 [ASC | DESC]]

 

SQL문(질의문) 작성 시 처음 접하시는 분들은 위의 기본문법의 형태나 예제와 같이 SELECT, FROM 등의 절로 줄을 나누어 작성하시는 것을 추천합니다.

 

 

* 예제

 

1. 모든 도서의 이름과 가격을 검색하시오.

SELECT bookname, price
FROM Book;

 

2. 모든 도서의 도서번호, 도서이름, 출판사, 가격을 검색하시오.

SELECT bookid, bookname, publisher, price
FROM Book;

 

3. 도서 테이블에 있는 모든 출판사를 검색하시오.

SELECT pulbisher
FROM Book;

 

* WHERE 조건 연산자

술어 연산자
비교 =, < >, <, <=, >, >=
범위 BETWEEN
집합 IN, NOT IN
패턴 LIKE
NULL IS NULL, IS NOT NULL
복합조건 AND, OR, NOT

 

 

4. 가격이 20,000원 미만인 도서를 검색하시오.

SELECT *
FROM Book
WHERE price < 20000;

 

5. 출판사가 '굿스포츠' 혹은 '대한미디어' 인 도서를 검색하시오.

SELECT * 
FROM Book
WHERE publisher NOT IN ('굿스포츠', '대한미디어');

 

6. 가격이 10,000원 이상 20,000 이하인 도서를 검색하시오.

SELECT *
FROM Book
WHERE price >= 10000 AND 20000;
SELECT * 
FROM Book
WHERE price >= 10000 AND price <= 20000;

 

 

6번은 2개 질의문으로 둘다 가능합니다.

7. '축구의 역사'를 출간한 출판사를 검색하시오.

SELECT bookname, publisher
FROM Book
WHERE bookname LIKE '축구의 역사';

 

8. 도서 이름에 '축구'가 포함된 도서를 출간한 출판사를 검색하시오.

SELECT bookname, publisher
FROM Book
WHERE bookname LIKE '%축구%';

 

9. 도서 이름의 왼쪽 두 번째 위치에 '구'라는 문자를 갖는 도서를 검색하시오.

SELECT *
FROM Book
WHERE bookname LIKE '_구%';

 

* 와일드 문자의 종류

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

  - _ : 특정 위치의 1개의 문자와 일치

 

[SQL 기초]

 

* MySQL 접속 및 비밀번호 변경

 

  - 접속 및 사용법

  

    1. mysql -p Enter 후 Password 입력

 

    2. 데이터베이스 선택 : use DB명;

 

  - 패스워드 변경

 

    1. set password for ID@localhost = password('새암호');

 

  - LINUX 명령 실행 시

 

    1. system '명령어'

 

  - 종료 : \q

 

 

* SQL의 분류

 

  1. 데이터 정의어(DDL)

    

    - 테이블이나 관계의 구조를 생성 (CREATE, ALTER, DROP)

 

  2. 데이터 조작어(DML)

 

    - 테이블에 데이터를 검색, 삽입, 수정, 삭제 (SELECT, INSERT, DELETE, UPDATE)

 

  3. 데이터 제어어(DCL)

 

    - 데이터의 사용 권한을 관리하는 데 사용 (GRANT, REVOKE)

 

* 테이블 관련 명령어

 

  - 생성

  

 CREATE TABLE 테이블명 (
속성명 자료형,

 ...   );

  - 테이블 리스트 보기

    : show tables;

 

  - 테이블 구조 보기

    : desc 테이블명; (또는 explain 테이블명;)

[관계 대수]

 

* (셀렉션, Selection)

  - 릴레이션의 투플을 추출하기 위한 연산

  - 형식 :  (R은 릴레이션)

 

 

* 더블클릭을 하시면 수식을 수정할 수 있습니다.(프로젝션, Projection)

  - 릴레이션의 속성을 추출하기 위한 연산

  - 형식 : 더블클릭을 하시면 수식을 수정할 수 있습니다. (R은 릴레이션)

 

* 합집합

  - 두 개의 릴레이션을 합하여 하나의 릴레이션을 반환

  - 형식 :  (R, S는 릴레이션)

 

* 교집합

  - 두 릴레이션이 공통으로 가지고 있는 투플을 반환

  - 형식 :  (R, S는 릴레이션)

 

* 차집합

  - 첫번째 릴레이션에는 속하고 두번째 릴레이션에는 속하지 않는 투플을 반환

  - 형식 :  (R, S는 릴레이션)

 

* 카티전 프로덕트 

  - 두 릴레이션을 연결시켜 하나로 합칠 때 사용하며, 결과 릴레이션은 첫번째 릴레이션의 오른쪽에 두 번째 릴레이션의 모든 투플을 순서대로 배열하여 반환.

  - 결과 릴레이션의 차수 : 두 릴레이션 속성의 합

  - 결과 릴레이션의 카디날리티 : 두 릴레이션 투플의 곱

  - 형식 : (R, S는 릴레이션)

 

* 조인(Join)

  - 종류 : 기본연산(세타조인, 동등조인, 자연조인), 확장된 조인 연산(세미조인, 외부조인)

 

  1. 세타조인(Theta Join)

    - 조인에 참여하는 두 릴레이션의 속성 값을 비교하여 조건을 만족하는 투플만 반환

    - 형식 :  (R, S는 릴레이션, r, s는 각각의 R, S의 속성)

 

  2. 동등조인(Equi Join)

    - 세타조인에서 = 연산자를 사용한 조인을 말함. 보통 조인 연산이라고 하면 동등조인을 지칭함.

    - 형식 :  (R, S는 릴레이션, r, s는 각각의 R, S의 속성)

 

  3. 자연조인(Natural Join)

    - 동등조인에서 중복된 속성을 제거한 결과를 반환

    - 형식 :  (R, S는 릴레이션, r, s는 각각의 R, S의 속성)

 

  4. 외부조인

    - 자연조인 시 조인에 실패한 투플을 모두 보여주되 값이 없는 대응 속성에는 NULL 값을 채워서 반환함.

    - 종류 : 왼쪽 외부조인(Left outer join), 오른쪽 외부조인(Right outer join), 완전 외부조인(Full outer join)

 

    1) 왼쪽 외부조인(Left outer join)

       - 형식 :  (R, S는 릴레이션, r, s는 각각의 R, S의 속성)

 

    2) 오른쪽 외부조인(Right outer join)

       - 형식 :  (R, S는 릴레이션, r, s는 각각의 R, S의 속성)

 

    3) 완전 외부조인(Full outer join)

       - 형식 :  (R, S는 릴레이션, r, s는 각각의 R, S의 속성)

 

  5. 세미조인

    - 자연조인을 한 후 두 릴레이션 중 한쪽 릴레이션의 결과만 반환함.

    - 닫힌 쪽의 릴레이션 투플만 반환함.

    - 형식 : 더블클릭을 하시면 수식을 수정할 수 있습니다., 더블클릭을 하시면 수식을 수정할 수 있습니다. (R, S는 릴레이션, r, s는 각각의 R, S의 속성)

 

* 디비전(Division)

  - 릴레이션의 속성 값의 집합으로 연산을 수행(연산은 차집합과 유사)

  - 형식 :  (R, S는 릴레이션)

 

 

[예제]

 

1. 마당 서점에서 판매하는 도서 중 8,000원 이하인 도서를 검색하시오.

 

     

 

2. 신간도서 안내를 위해 카달로그 발송 주소록을 만드시오.

   

 

3. 마당서점은 지점A와 지점B가 있다. 두 지점의 도서는 각 지점에서 관리하며 릴레이션 이름은 각각 도서A, 도서B이다. 마당 서점의 도서를 하나의 릴레이션으로 보이시오.

   

 

4. 마당 서점의 두 지점에서 동일하게 보유하고 있는 도서 목록을 보이시오.

   

 

5. 마당 서점의 두 지점에서 동일하게 보유하고 있는 도서 목록을 보이시오.

   

 

6. 도서 릴레이션과 고객 릴레이션의 카티전 프로덕트를 구하시오.

   

 

7. 고객과 고객의 주문사항을 모두 보이시오.

   

 

8. 마당 서점의 고객과 고객의 주문 내역을 보이시오.

   (단, 고객 기준으로 주문 내역이 없는 고객도 모두 보이시오.)

    고객(고객.고객번호,주문.고객번호)주문

 

9. 마당 서점의 고객과 고객의 주문 내역을 보이시오.

   (단, 주문 내역이 없는 고객과 고객 릴레이션에 고객번호가 없는 주문을 모두 보이시오.)

    고객(고객.고객번호,주문.고객번호)주문

 

10. 마당 서점의 고객과 고객의 주문 내역을 보이시오.

   (단, 주문 내역 기준으로 고객 릴레이션에 고객번호가 없는 주문도 모두 보이시오.)

    고객(고객.고객번호,주문.고객번호)주문

 

11. 마당 서점의 고객 중 주문 내역이 있는 고객의 고객 정보를 보이시오.

   

  

 

12. 마당 서점의 도서 중 가격이 8,000원 이하인 도서 이름과 출판사를 모두 보이시오.

   

 

13. 마당 서점의 박지성 고객의 거래 내역 중 주문 번호, 이름, 가격을 보이시오. (카티전프로덕트, 조인)

    - 카티전프로덕트 :

 

    - 조인 :

 

 

 

  

 

 

 

 

 

 

 

 

 

 

[관계 데이터 모델]

 

* 용어 정리

 

  - 릴레이션(Relation) : 행과 열로 구성된 테이블

  - 관계 (Relationship)

     1. 릴레이션 내에서 생성되는 관계

     2. 릴레이션 간에 생성되는 관계

  - 릴레이션의 구성요소

    1. 스키마 : 관계 데이터베이스의 릴레이션이 어떻게 구성되는지 어떤 정보를 담고 있는지에 대한 기본적인 구조를 정의

    2. 인스턴스 : 정의된 스키마에 따라 테이블에 실제로 저장되는 데이터의 집합

  - 릴레이션 스키마 : 릴레이션에 어떤 정보가 담길지를 정의

  - 릴레이션 인스턴스 : 릴레이션 스키마에 실제로 저장된 데이터의 집합

  - 속성(Attribute) : 릴레이션 스키마의 열

  - 도메인(Domain) : 속성이 가질 수 있는 값의 집합

  - 차수(Degree) : 속성의 개수

  - 투플(Tuple) : 릴레이션의 행

  - 카디날리티(Cardinality) : 투플의 수

  - 관계 데이터 모델 : 데이터를 2차원 테이블 형태인 릴레이션으로 표현하며, 릴레이션에 대한 제약조건과 관계 연산을 위한 관계대수를 정의

 

※ 테이블과 릴레이션은 같은 의미이지만, 테이블은 데이터베이스 상에서 쓰이는 용어이며, 릴레이션은 우리가 이론적으로 말할 때 쓰는 용어임.

 

* 릴레이션의 특징

 

  - 속성은 단일 값을 가짐.

  - 속성은 서로 다른 이름을 가짐

  - 한 속성의 값은 모두 같은 도메인 값을 가짐.

  - 속성의 순서는 상관없음.

  - 릴레이션 내의 중복된 투플은 허용하지 않음

  - 투플의 순서는 상관없음.

 

* 키의 종류

 

  - 슈퍼키 : 투플을 유일하게 식별할 수 있는 하나의 속성 혹은 속성의 집합.

  - 후보키 : 투플을 유일하게 식별할 수 있는 속성의 최소 집합.

  - 기본키 : 여러 후보키 중 하나를 선정하여 대표로 삼는 키 (유일성과 최소성을 만족해야 함.).

  - 대리키 : 가상의 속성을 만들어 기본키로 삼는 경우 이러한 키를 대리키라고 함.

  - 대체키 : 기본키로 선정되지 않은 후보키.

  - 외래키 : 다른 릴레이션의 기본키를 참조하는 속성.

 

 

 

* 외래키의 특징

 

  - 관계데이터모델의 릴레이션 간의 관계를 표현함.

  - 다른 릴레이션의 기본키를 참조하는 속성

  - 참조하고(외래키) 참조되는(기본키) 양쪽 릴레이션의 도메인은 서로 같아야 함.

  - 참조되는(기본키) 값이 변경되면 참조하는(외래키) 값도 변경됨.

  - NULL 값과 중복 값 등이 허용됨.

  - 자기 자신의 기본키를 참조하는 외래키도 가능함.

  - 외래키가 기본키의 일부가 될 수 있음.

 

* 무결성 제약조건

 

  1. 데이터 무결성(Integrity)

     : 데이터베이스에 저장된 데이터의 일관성과 정확성을 지키는 것.

  2. 도메인 무결성 제약조건(Domain Integrity Constraint)

     : 릴레이션 내의 투플들이 각 속성의 도메인에 지정된 값만을 가져야 한다는 조건.

  3.  개체 무결성 제약조건(Entity Integrity Constraint)

     : 릴레이션은 기본키를 지정하고 그에 따른 무결성 원칙 즉, 기본키는 NULL 값을 가져서는 안되며 릴레이션 내에 오직 하나의 값만 존재해야 한다는 조건.

  4. 참조 무결성 제약조건(Referential Integrity Constraint)

     : 외래키 제약이라고도 하며, 자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 도메인이 동일해야 하며, 자식 릴레이션의 값이 변경될 때 부모 릴레이션의 제약을 받는다는 것.

 

* 외래키 옵션

 

  - RESTRICTED : 자식 릴레이션에서 참조하고 있을 경우 부모 릴레이션의 삭제 작업을 거부함.

  - CASCADE : 자식 릴레이션의 관련 투플을 같이 삭제함.

  - DEFAULT : 자식 릴레이션의 관련 투플을 미리 설정해둔 값을 변경함.

  - NULL : 자식 릴레이션의 관련 투플을 NULL 값으로 설정함 (NULL 값을 허용한 경우)

 

[ 데이터베이스 시스템(DBMS, DataBase Management Systme) ]

 

* 용어 정리

 

  - 정보 : 데이터에 의미를 부여한 것. (예) 에베레스트 산이 가장 높은 산이다.

  - 지식 : 사물이나 현상에 대한 이해. (예) 에베르스트 산의 높이는 8,848m 이다.

  - 데이터베이스 : 조직에 필요한 정보를 얻기 위해 논리적으로 연관된 데이터를 모아 구조적으로 통합해 놓은 것.

  - 데이터베이스 시스템 : 각 조직에서 사용하던 데이터를 모아서 통합하고 서로 공유하여 생기는 장점을 이용하는 시스템.

  - 데이터 모델 : 데이터가 저장되는 기법에 관한 내용으로, 눈에 보이지 않는 논리적인 개념.

  - 데이터베이스의 베이스 : 물건의 밑 부분이나 개념의 토대를 의미하는 것.

 

* 데이터베이스의 개념

 

  1. 통합된 데이터 (Integrated Data)

     : 여러 곳에서 사용하던 데이터를 통합하여 하나로 저장한 데이터를 의미.

  2. 저장된 데이터 (Stored Data)

     : 문서로 보관된 데이터가 아니라 디스크, 테이프 같은 컴퓨터 저장장치에 저장된 데이터를 의미.

  3. 운영 데이터 (Operational Data)

     : 조직의 목적을 위해 사용되는 데이터를 의미.

  4. 공용 데이터 (Shared Data)

     : 한 사람 또는 한 업무를 위해 사용되는 데이터가 아니라 공동으로 사용되는 데이터를 의미.

 

* 데이터베이스의 특징

 

  1. 실시간 접근성 (Real-Time Accessibility)

     : 데이터베이스는 실시간으로 서비스됨.

       실시간이란? 사용자가 요청하는 순간에 실제 데이터를 서비스 하는 것을 말함.

  2. 계속적인 변화 (Continuous Change)

     : 데이터베이스에 저장된 내용은 어느 한 순가의 상태를 나타내지만, 데이터 값은 시간에 따라 항상 바뀜.

  3. 동시 공유 (Concurrent Sharing)

     : 데이터베이스는 서로 다른 업무 또는 여러 사용자에게 동시에 공유됨.

       동시는 병행이라고도 하며, 데이터베이스에 접근하는 프로그램이 여러개 있다는 의미.

  4. 내용에 따른 참조 (Reference by Content)

     : 데이터베이스에 저장된 데이터는 물리적인 위치가 아니라 데이터 값에 따라 참조됨.

 

* ANSI의 3단계 데이터베이스 구조

 

  - 외부단계 (외부스키마, 서브스키마, 뷰)

    : 일반 사용자나 응용 프로그래머가 접근하는 계층으로 전체 데이터베이스 중에서 하나의 논리적인 부분을 의미

ST
Sn INT
Name CHAR(10)
Grade INT
Dept CHAR(5)
STUDENT
Sno PIC 9(4)
Sname PIC X(10)
Year PIC 9(2)
Addr PIC X(44)

 

  - 개념 단계(개념 스키마)

    : 전체 데이터베이스의 정의를 의미

STUDENT
Snumber INTEGER
Name CHAR(10)
Year SMALLINT
Grade SMALLINT
Dept CHAR(5)
Address CHAR(44)

 

  - 내부 단계 (내부 스키마)

    : 물리적 저장 장치에 데이터베이스가 실제로 저장되는 방법의 표현

STORED_STUDENT LENGTH = 71
prefix BYTE(4) OFFSET = 0
Sno BYTE(4) OFFSET = 4 INDEX = STINDX
Sname BYTE(4) OFFSET = 8
Syear BYTE(4) OFFSET = 18
Sgrade BYTE(4) OFFSET = 20
Sdept BYTE(4) OFFSET = 22
Saddr BYTE(4) OFFSET = 27

 

 

 

* 외부/개념 & 개념/내부 매핑

 

  - 외부/개념 매핑

    : 사용자의 외부 스키마와 개념 스키마 간의 매핑(사상)으로 외부 스키마의 데이터가 개념 스키마의 어느 부분에 해당되는지 대응

 

  - 개념/내부 매핑

    : 개념 스키마의 데이터가 내부 스키마의 물리적 장치 어디에 어떤 방법으로 저장되는지 대응

 

 

* 3단계 데이터베이스 구조 특징 - 데이터 독립성

 

  1. 논리적 데이터 독립성 (Logical Data Independence)

     : 외부 단계와 개념 단계 사이의 독립성으로, 개념 스키마가 변경되어도 외부 스키마에는 영향을 미치지 않도록 지원함.

      논리적 구조가 변경되어도 응용프로그램에는 영향이 없도록 하는 개념

 

  2. 물리적 데이터 독립성 (Physical Data Independence)

     : 개념 단계와 내부 단계 사이의 독립성으로, 저장장치 구조 변경과 같이 내부 스키마가 변경되어도 개념 스키마에 영향을 미치지 않도록 지원함.

 

 

 

*** 본 내용물의 예시는 단순히 예시일 뿐입니다. 데이터베이스 프로그램에서 같은 형태로 보여지지 않을 수 있습니다. ***

+ Recent posts