DBMS 1

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

CUBRID2008 R2.0 Tutorial (Windows),CUBRID(Unix/Linux)

작성자
dataonair
작성일
2021-02-14 16:30
조회
579

CUBRID2008 R2.0 Tutorial (Windows)gee

소개: 본 문서는 CUBRID 제품을 처음 접하는 사용자가 제품 사용에 익숙해질 수 있도록 Database 생성, Database 구동/종료 등의 Database 운영에서부터 스키마 생성/변경 데이터 조작 및 검색 등 Database 조작에 이르는 일련의 기본적인 과정을 예제를 통해 살펴 볼 수 있도록 구성되어 있다.

본 문서는 CUBRID 사용을 위한 기본적인 내용들만 다루고 있기 때문에, 추가적인 사항은 CUBRID 매뉴얼의 참조를 권고한다

적용 대상: CUBRID2008 R2.0

  • 용어
  • CUBRID 시작하기
    • Database 생성하고 시작하기
  • CUBRID 조작하기
    • demodb Database Table 정보
    • 질의편집기 사용하기
    • 스키마 생성하기
    • 데이터 조작하기
    • 데이터 검색하기
    • 파티션과 뷰 생성하기
  • CUBRID 종료하기
용어

CUBRID는 기본적으로 객체 관계 형 DBMS 용어를 사용하고 있으나, 기존 관계 형 DBMS 사용자의 이해를 돕기 위해, 본 문서에서는 관계 형 용어를 사용하였다. 다음은 관계 형 용어와 객체 관계 형 용어간의 관계 Table이다.

관계 형 용어 객체 관계 형 용어
Data type Domain
Column Attribute
Row, Tuple, Record Instance
Table Class
Procedure Method
CUBRID 시작하기

본 문서는 CUBRID의 설치가 완료되었다는 가정하에 작성되었다. 만약 CUBRID가 설치되어 있지 않다면, CUBRID 설치를 완료한 후에 본 문서를 참조하기 바란다.

Database 생성 및 Database을 구동하기 위해서는 CUBRID Manager Client를 이용한다.

Database 생성하고 시작하기
CUBRID Manager Client 시작하기

CUBRID가 정상적으로 설치되었다면 시작 -> 모든 프로그램 을 클릭하면 CUBRID 프로그램을 확인 할 수 있다. CUBRID를 선택해서 CUBRID Manager Client를 실행시킨다. CUBRID Manager 는 Database 관리 및 질의를 수행할 수 있는 도구이다.

CUBRID Manager Client 시작하기

CUBRID Manager Client를 실행하고 좌측 호스트에 localhost를 마우스 오른쪽 클릭 하면 연결 메뉴가 나오고 이를 클릭하면 아래와 같이 접속 창이 생긴다.

CUBRID Manager Client 시작하기

기본으로 localhost의 사이트명이 등록되어 있다. 새로운 CUBRID 서버를 등록하기 위해서는 좌측 상단 메뉴 밑에 버튼을 클릭하면 아래와 같은 창이 생기고 새로운 이름과 주소를 넣고 저장을 하면 새로운 사이트가 등록된다.

CUBRID Manager Client 시작하기

위의 화면에서 사이트명의 항목 중에서 접속을 원하는 서버를 선택한 후, 연결 버튼을 클릭하면 된다. localhost 를 선택하여 접속한다. 최초 디폴트 사용자와 암호는 각각 admin/admin이며, 아래와 같이 비밀번호 변경 창이 생긴다.

CUBRID Manager Client 시작하기

확인 버튼을 클릭하면 아래와 같은 화면이 나타난다.

CUBRID Manager Client 시작하기

CUBRID를 설치하면 위의 그림처럼 자동으로 1개의 Database가 설치되어 있는 것을 확인 할 수 있다. 하지만 로그인 없이 해당 DB를 제어할 수 있는 것은 아니다. DB를 선택 후 마우스 오른쪽 클릭 또는 더블클릭을 하게 되면 아래와 같은 창이 나타난다. dba로만 DB를 제어할 수 있으며 초기 dba 비밀번호는 설정되어 있지 않다. ‘확인’버튼을 클릭하면 demodb를 제어하는 것이 가능하다.

CUBRID Manager Client 시작하기

Database 생성하기

Database 생성은 CUBRID Manager 툴 바의 버튼을 클릭하거나 서버 리스트 창에서 서버를 선택하고 마우스의 오른쪽 버튼을 클릭했을 때 나타나는 팝업 메뉴에서도 수행 할 수 있다.

Database 생성하기

버튼버튼을 클릭하면 아래와 같이 Database 생성 마법사 페이지1이 실행되고 생성할 데이터베이스 이름을 입력한 후에 다음 버튼을 클릭한다. 페이지2, 페이지3도 계속해서 다음 버튼을 클릭하면 Default로 설정되어 있는 값으로 Database가 생성된다. Database 생성과 관련된 추가 정보는 사용자 매뉴얼을 참조한다

Database 생성하기

생성이 완료되면 testdb 라는 Database 아이콘이 보이며, 구동되어 있다.

Database 생성하기

Database 구동하기

Database를 구동하기 위해서는 dba로 로그인을 해야한다.

Database 구동하기

구동하자 하는 데DB를 선택한 후 메뉴의 동작을 클릭하면 로그인 메뉴가 활성화 되어 있다. 이를 선택하면 로그인 화면이 나온다. 또는 해당 DB를 선택한 후 오른쪽 마우스 클릭하면 메뉴가 나오고 이중 로그인을 선택하면 된다.

로그인 후아이콘아이콘이나 동작 메뉴에서 데이터베이스 시작을 클릭하면 해당 DB가 구동된다.

Database 구동하기

또는 해당 DB 오른쪽 마우스 클릭을 하면 데이터베이스 시작 메뉴가 보이고 이를 클릭해도 DB는 구동된다.

CUBRID 조작하기

Database를 조작하는 방법은 여러 가지가 있으나, 본 문서에서는 CUBRID Manager를 이용한 방법을 소개한다. 위의 과정을 거처 DB를 제어할 수 있는 상태가 되었다면 질의편집기를 이용하여 데이터베이스 내부의 쿼리 수행이 가능하다. 수행은 온라인 상태에서만 가능하며 데이터 조작하기 부분에서는 CUBRID를 설치하면 자동으로 생성되는 demodb 데이터베이스를 활용하였다. demodb는 사용자들이 예제로 활용할 수 있도록 기본 생성되는 데이터베이스이다.

demodb Database Table 정보

올림픽 자료를 바탕으로 구성되었으며 다양한 부분에 대한 조작과 수행이 가능하도록 개발되었다.

demodb의 테이블 구조와 관계는 아래와 같다.

demodb Database Table 정보

demodb Database Table 정보

질의편집기 사용하기

CUBRID Manager에서 demodb를 선택한 후 해당 DB를 구동시키고, 좌측 상단에 있는 아이콘을 클릭하면 데이터베이스 선택이 필요한 질의 편집기가 열리고 해당 DB를 선택한 후 마우스 오른쪽 클릭하면 아래와 같은 창이 생겨 demodb에 해당하는 새 질의 편집기를 열 수 있다.

질의편집기 사용하기

아래와 같이 질의 편집기가 생성되고 적색으로 표시된 부분을 클릭하면 DB를 선택할 수 있다.

편집기 아래는 쿼리의 결과값이 출력된다.

질의편집기 사용하기

스키마 생성하기
Table 생성 및 확인하기

Table을 생성하기 위해서는 CUBRID Manager에 접속된 상태에서 아래와 같이 DB->스키마->사용자스키마에서 마우스 우측버튼으로 클릭하면 클래스 추가라는 팝업메뉴가 나타난다.

Table 생성 및 확인하기

아래와 같은 테이블 추가 창이 나타나면 원하는 이름을 입력하고, 소유자를 선택한다. 확인버튼을 누르면 상세편집을 위한 창이 나온다.

Table 생성 및 확인하기

하단의 추가 버튼을 클릭하면 칼럼을 추가할 수 있다. 생성한 후 테이블 추가 페이지에서 기본키 설정을 할 수 있다.(하단 중간에 기본키 설정 버튼)

칼럼을 추가

칼럼을 추가

테이블 추가 기본 창의 탭에서 외래키, 인덱스를 추가할 수 있다. 또한 생성한 SQL을 SQL문 탭에서 확인 할 수 있다.

테이블의 생성이 완료되면 화면 좌측 테이블에 테이블이 추가가 되어 있다.

데이터 조작하기
데이터 삽입하기

Insert 구문을 사용하여 새로운 Row를 추가한다.

질의)  olympic Table에 2008 베이징올림픽정보(2008, ‘China’, Beijing, 2008-08-08, 2008-08-24, FUWA,’ One world, One dream’)를 추가한다.insert into olympic(host_year, host_nation, host_city, opening_date, closing_date, mascot, slogan)values(2008, 'China', 'Beijing', '2008-08-08', '2008-08-24', ' FUWA', 'One world, One dream');select * from olympic order by host_year desc;

데이터 삽입하기

데이터 수정하기

Update구문을 사용하여 이미 입력된 값을 새로운 값으로 수정한다.

질의)  olympic  Table에 입력되어 있는 2008년 host_nation의 값을 People's Republic of China 로 수정하라update olympic set host_nation='People''s Republic of China' where host_year=2008; select * from olympic order by host_year desc ; (주의: ‘를 넣을 때는 ‘’로 표시한다.)

데이터 수정하기

데이터 삭제하기

delete구문을 사용하여 이미 입력된 데이터 중에서 원하는 Row를 삭제한다.

질의) olympic Table에 입력되어 있는 데이터 중 2008년의 데이터를 삭제한다delete from olympic where host_year=2008;select * from olympic order by host_year desc;

데이터 삭제하기

데이터 검색하기

데이터를 검색하기 위해서 사용하는 Select 구문은 SELECT절, FROM절, 선택사항인 WHERE절로 구성된다.

  • SELECT 절
    SELECT절에는 Column명, 문자, 연산자, DISTINCT, *, alias.*, Table명.*, 서브질의 등이 올 수 있다.
  • FROM 절
    데이터를 검색할 Table(들)을 명시한다.
  • WHERE 절
연산자

여러 연산자를 사용하여 조회한 결과를 보여준다.

질의) 역대 올림픽이 열린 국가를 중복되지 않게 조회하라select distinct host_nation from olympic;

연산자

질의) 88년 서울올림픽에서 대한민국이 획득한 금, 은, 동메달의 수를 모두 합하면 몇 개인지 조회하라.select gold+silver+bronze as 총메달수 from participant where nation_code='KOR' and host_year=1988;

연산자

질의) 88년 서울올림픽이 며칠 동안 진행되었는지 구하라.select closing_date-opening_date as 진행일수 from olympic where host_year=1988;

연산자

함수

함수를 통하여 원하는 결과값을 보여준다.

질의) 88년 서울올림픽에 참가한 모든 국가를 대문자로 출력하라.select upper(A.name) from nation A, participant B where A.code=B.nation_code and B.host_year=1988;

함수

질의) 88년 서울올림픽의 개최일을 March 1 Mon 형식으로 출력하라select host_year, host_city, TO_CHAR(opening_date, 'MONTH dd DY') from olympic where host_year=1988;

함수

질의) 역대 올림픽마스코트를 출력하고, 마스코트가 지정되어 있지 않다면 ‘없음’을 출력하라.select host_year, nvl( mascot, '없음') from olympic;

함수

질의) 88년 서울올림픽의 금메달의 총 개수를 구하라select host_year, sum(gold) from participant group by host_year HAVING host_year =1988; 

함수

질의) 88년 서울올림픽에서 수영으로 금메달을 획득한 국가와 ‘Seoul Olympic Stadium’에서 금메달을 획득한 국가들의 합집합을 조회하라.select * from nation where code in(select nation_code from game where event_code in(select code from event where sports ='Swimming') and medal='G' and host_year=1988UNIONselect nation_code from game where stadium_code in(select code from stadium where name ='Seoul Olympic Stadium') and medal='G' and host_year=1988); 

함수

조인

테이블간의 관계를 통하여 데이터를 조회한다.

질의) 역대올림픽육상 100M의 최고기록과 그 기록 보유 선수의 이름을 조회하라select B_2 as 기록, A.name from athlete A INNER JOIN (select athlete_code, cast(score as numeric(4,2)) from recordwhere event_code in(select code from event where name='100m') order by 2 asc) Bon A.code=B.athlete_code and rownum=1; 

조인

질의) 88년 서울올림픽에 참가한 세계 모든 국가와 그 순위를 조회하라select B.name, A.gold, A.silver, A.bronze from participant A inner join nation Bon B.code=A.nation_code and A.host_year=1988 order by 2 desc,3 desc,4 desc, name asc; 

조인

질의) 88년 서울올림픽의 1위부터 10위까지의 국가 순위를 조회하라select B.name, A.gold, A.silver, A.bronze from participant A inner join nation Bon B.code=A.nation_code and A.host_year=1988order by 2 desc,3 desc,4 desc, name asc for orderby_num() between 1 and 10; 
;

조인

파티션과 뷰 생성하기

쿼리를 이용하여 구분에 따라 파티션을 나누고 원하는 뷰를 생성하는 방법을 확인한다.

파티션(Partition)

조건) game테이블을 획득 메달 기준으로 리스트 분할하라.alter table game partition by list (medal)(partition medal1 values in ('G'), partition medal2 values in ('S'), partition medal3 values in ('B')); 

파티션과 뷰 생성하기

뷰(view)

조건) 88년 서울올림픽에서 금메달을 획득한 선수들의 이름, 국가, 종목명으로 이루어진 뷰를 정의하라create view game_1988 asselect B.name as 선수명, A.name as 국가명, B.event as 종목명 from nation A INNER JOIN (select name, nation_code, event from athlete where code in(select athlete_code from game where medal='G' and host_year=1988)) Bon A.code=B.nation_code; 

뷰(view)

* 이외의 연산자 및 함수는 CUBRID2008 매뉴얼의 참조를 권장합니다.

CUBRID 종료하기

CUBRID Manager Client에서 왼쪽의 서버 리스트 중 종료를 원하는 DB를 선택하고, 툴바의 엑스 버튼을 클릭하거나 마우스의 오른쪽을 클릭하여 옵션에서 데이터베이스 정지를 선택한다. 시작과 종료는 DBA계정에서만 가능하다.

CUBRID 종료하기

CUBRID Tutorial (Unix/Linux)

소개: 본 문서는 CUBRID 제품을 처음 접하는 사용자가 제품 사용에 익숙해질 수 있도록 Database 생성, Database 구동/종료 등의 Database 운영에서부터 스키마 생성/변경 데이터 조작 및 검색 등 Database 조작에 이르는 일련의 기본적인 과정을 예제를 통해 살펴 볼 수 있도록 구성되어 있다. 문서는 CUBRID 사용을 위한 기본적인 내용들만 다루고 있기 때문에, 추가적인 사항은 CUBRID 매뉴얼의 참조를 권고한다.

2009-08-12 기술컨설팅팀 정만영, CUBRID

적용 대상: CUBRID2008R2.0

목 차
  • CUBRID 시작하기
    • Database 생성하고 시작하기
  • CUBRID 조작하기
    • Demodb Database Table 정보
    • SQL/X 접속하기
    • 스키마 생성하기
    • 데이터 조작하기
    • 데이터 검색하기
    • 파티션과 뷰 생성하기
  • CUBRID DB 정지
CUBRID 시작하기

본 문서는 CUBRID의 설치가 완료되었다는 가정하에 작성되었다. 만약 CUBRID가 설치되어 있지 않다면, CUBRID 설치를 완료한 후에 본 문서를 참조하기 바란다.

CUBRID가 설치된 호스트에 CUBRID를 설치한 사용자로 로그인을 하고 아래 예제를 따라서 한다.

Database 생성하고 시작하기
Database 생성하기

Database을 생성하는 명령은 다음과 같다.

cubrid createdb [options] database_name

createdb를 실행하면 명령을 실행한 현재 디렉토리에 Database가 생성 되므로 Database를 생성하기 전에 Database가 생성될 디렉토리를 먼저 생성하고 생성된 디렉토리로 이동하여 작업해야 Database가 사용할 볼륨파일을 효율적으로 관리할 수 있다..

[cubrid@testsrv4 cubrid]$ mkdir testdb[cubrid@testsrv4 cubrid]$ cd testdb[cubrid@testsrv4 testdb]$ cubrid createdb testdbCreating database with 5000 pages.CUBRID 2008 R2.0.[cubrid@testsrv4 testdb]$

옵션을 통해 Database 크기를 지정해 주지 않고 기본 크기로 생성한 Database는 페이지 사이즈가 default 4kbytes인 5000개 page를 갖는 Database로 실제 사용되기에는 작은 크기로 생성되며 업무 내용에 따라 createdb의 옵션중 -p 옵션을 이용하여 크기를 설정할 수 있다. 그 외의 옵션들은 CUBRID 매뉴얼의 참조를 권고한다.

Database 시작하기

생성된 Database 서버를 구동하는 명령은 다음과 같다.

cubrid server start database_name

[cubrid@testsrv4 testdb]$ cubrid server start testdb@ cubrid server start: testdbThis may take a long time depending on the amount of recovery works to do.CUBRID 2008 R2.0++ cubrid server start: success [cubrid@testsrv4 testdb]$

구동중인 Database 확인하기

현재 구동중인 Database을 확인하는 명령은 다음과 같다.

cub_commdb -P

[cubrid@testsrv4 testdb]$ cub_commdb -P Server demodb (rel 8, pid 1672)

CUBRID 조작하기

Database를 조작하는 방법은 여러 가지가 있으며, 본 문서에서는 CSQL을 이용한 방법을 소개한다. CSQL을 이용하려면 Database를 먼저 구동시켜야 한다. “데이터 조작하기” 부분에서는 CUBRID를 설치하면 자동으로 생성되는 “demodb” Database를 활용하였다. “demodb”는 개발자들이 예제로 활용할 수 있도록 추가한 Database이다.

“cubrid server start” 명령어를 이용하여 demodb Database를 구동한다.

[cubrid@testsrv4 cubrid]$ cubrid server start demodb@ cubrid server start: testdbThis may take a long time depending on the amount of recovery works to do.CUBRID 2008 R2.0++ cubrid server start: success  [cubrid@testsrv4 cubrid]$

Demodb Database Table 정보

아래의 Table에 입력된 데이터는 단순히 예제로 사용하기 위해 만든 데이터이므로 실제 정보와는 다를 수 있다.

Demodb Database Table 정보

Demodb Database Table 정보

CSQL 접속하기

CSQL는 Database에 스키마를 다루거나 데이터를 다루기 위해 sql문을 입력, 편집, 수행 할 때 사용하는 Command Line 기반 SQL 인터프리터이다.

CSQL 인터프리터로 접속하기 위한 방법은 다음과 같다.

csql [option list] database_name

[cubrid@testsrv4 cubrid]$ cubrid server start demodb[cubrid@testsrv4 cubrid]$ csql demodb          CUBRID SQL Interpreter Type `;help' for help messages. csql>;help

demodb라는 Database에 접속하고 csql> 와 같이 프롬프트가 나타난다.

# csql의 자세한 명령어는 csql에 접속된 상태에서 ‘;help’를 입력하면 확인 할 수 있다.

스키마 생성하기

Table 생성 및 확인하기

Table 생성하기는 CSQL에 접속된 상태에서 다음과 같은 형식으로 Table을 생성한다.

create table Table명

( 컬럼명 데이터_타입,컬럼명 데이터 _타입)

# csql 사용법 : 입력한 SQL문을 실행하려면 ‘;ru’, ‘;x’를 입력하고 Enter 키를 누른다. 두 명령어의 차이는 ‘;ru’는 실행 후에 SQL문을 버퍼에서 삭제하지 않고 그대로 유지하고 ‘;x’는 SQL문을 버퍼에서 삭제한다.

csql> create table employee(csql> name varchar(50),csql>  birth_date date,csql>  title varchar(50),csql>  employee_num integer);csql> ;x

생성된 Table의 스키마를 확인하는 방법은 아래와 같다.

;sc Table명

csql> ;sc employee === Help: Schema of a Class> ===          employee        name            : character varying(50)     birth_date      : date     title           : character varying(50)     employee_num    : integer Current transaction has been committed.

데이터 조작하기
데이터 삽입하기

Insert 구문을 사용하여 새로운 Row를 추가한다.

질의) “olympic” Table에 2008 베이징올림픽정보(2008, ‘China’, Beijing, 2008-08-08, 2008-08-24, FUWA,’ One world, One dream’)를 추가한다.csql> insert into olympic(host_year, host_nation, host_city, opening_date, closing_date, mascot, slogan)csql> values(2008, 'China', 'Beijing', '2008-08-08', '2008-08-24', ' FUWA', 'One world, One dream');csql> ;x1 rows inserted.Current transaction has been committed.1 command(s) successfully processed.csql> select host_year, host_nation, host_city, mascot from olympic order by host_year desccsql> ;x===  ===    host_year  host_nation           host_city             mascot              ===============================================================================         2008  'China'               'Beijing'             ' FUWA'                      2004  'Greece'              'Athens'              'Athena  Phevos'             2000  'Australia'           'Sydney'               'Olly Syd Millie'                         중간생략         1904  'USA'                 'St. Louis'           ''                           1900  'France'              'Paris'               ''                           1896  'Greece'              'Athens'              ''    

데이터 수정하기

Update구문을 사용하여 이미 입력된 값을 새로운 값으로 수정한다.

질의) “olympic” Table에 입력되어 있는 2008년 host_nation의 값을 People's Republic of China 로 수정하라csql> update olympic set host_nation='People''s Republic of China' where host_year=2008csql> select host_year, host_nation, host_city, mascot from olympic where host_year=2008csql> ;x===  ===    host_year      host_nation           host_city             mascot              ===============================================================================       2008  'People's Republic of China'  'Beijing'             ' FUWA'             1 rows selected.Current transaction has been committed.1 command(s) successfully processed. 3 command(s) successfully processed.

데이터 삭제하기

delete구문을 사용하여 이미 입력된 데이터 중에서 원하는 Row를 삭제한다.

질의) “olympic” Table에 입력되어 있는 데이터 중 2008년의 데이터를 삭제한다csql> delete from olympic where host_year=2008csql> select host_year, host_nation, host_city, mascot from olympic where host_year=2008csql> ;x===  ===There are no results.0 rows selected.Current transaction has been committed.1 command(s) successfully processed.csql>

데이터 검색하기
Select

데이터를 검색하기 위해서 사용하는 Select 구문은 SELECT절, FROM절, 선택사항인 WHERE절로 구성된다.

  • SELECT 절
    SELECT절에는 컬럼명, 문자, 연산자, DISTINCT, *, alias.*, Table명.*, 서브질의 등이 올 수 있다.
  • FROM 절
    데이터를 검색할 Table(들)을 명시한다.
  • WHERE 절
    검색할 데이터에 대한 조건을 명시한다. 없는 경우 생략 가능하다.
연산자
비교 연산자

컬럼의 값을 주어진 조건의 값과 비교한다.

질의) 역대 올림픽이 열린 국가를 중복되지 않게 조회하라csql> select distinct host_nation from olympic;===  ===  host_nation         ======================  'Australia'           'Belgium'                        중간생략'USA'                 'USSR'                'United Kingdom'    18 rows selected.Current transaction has been committed.1 command(s) successfully processed.csql>


질의) 88년 서울올림픽에서 대한민국이 획득한 금, 은, 동메달의 수를 모두 합하면 몇 개인지 조회하라.csql> select gold+silver+bronze as 총메달수 from participant where nation_code='KOR' and host_year=1988;csql> ;x===  ===     총메달수=============           33


질의) 88년 서울올림픽이 며칠 동안 진행되었는지 구하라.csql> select closing_date-opening_date as 진행일 from olympic where host_year=1988;csql> ;x===  ===       진행일=============           15

함수

함수를 통하여 원하는 결과값을 보여준다.

질의) 88년 서울올림픽에 참가한 모든 국가를 대문자로 출력하라.csql> select upper(A.name) from nation A, participant B where A.code=B.nation_code and B.host_year=1988;csql>x;===  ===   upper(A.name)      ======================  'ZIMBABWE'            'ZAMBIA'            'ZAIRE' 'KOREA'             중간생략  'UNITED STATES OF AMERICA'  'GERMAN DEMOCRATIC REPUBLIC'  'U.R.S.S.'          156 rows selected.Current transaction has been committed.1 command(s) successfully processed.csql>


질의) 88년 서울올림픽의 개최일을 “March 1 Mon” 형식으로 출력하라csql> select host_year, host_city, TO_CHAR(opening_date, 'MONTH dd DY') from olympic where host_year=1988;csql> ;x===  ===    host_year  host_city              to_char(opening_date, 'MONTH dd DY', 'en_US')=========================================================         1988  'Seoul'               'SEPTEMBER 17 SAT' 


질의) 역대 올림픽마스코트를 출력하고, 마스코트가 지정되어 있지 않다면 ‘없음’을 출력하라.csql>select host_year, nvl( mascot, '없음') from olympic;csql> ;xhost_year  nvl(mascot, '없음') ===================================         2004  'Athena  Phevos'             2000  'Olly Syd Millie'            1996  'Izzy'              중간생략         1900  '없음'                       1896  '없음'          25 rows selected.Current transaction has been committed.1 command(s) successfully processed


질의) 88년 서울올림픽의 금메달의 총 개수를 구하라csql> select host_year, sum(gold) from participant group by host_year HAVING host_year =1988; csql> ;x===  ===    host_year    sum(gold)==========================         1988          241


질의) 88년 서울올림픽에서 수영으로 금메달을 획득한 국가와 ‘Seoul Olympic Stadium’에서 금메달을 획득한 국가들의 합집합을 조회하라.csql> select * from nation where code in(csql> select nation_code from game csql> where event_code in(select code from event where sports ='Swimming') and medal='G' and host_year=1988csql> UNIONcsql> select nation_code from game where stadium_code in(csql> select code from stadium where name ='Seoul Olympic Stadium') and medal='G' and host_year=1988); csql> ;x===  ===  code                  name                  continent             capital             =============================================================================  'AUS'                 'Australia'                 'Oceania'             'Canberra'            'BUL'                 'Bulgaria'                  'Europe'              'Sofia'                                                        중간생략  'URS'                 'U.R.S.S.'                   'Europe'              'Moscow'              'USA'                 'United States of America'  'Americas'            'Washington.D.C'    18 rows selected.Current transaction has been committed.1 command(s) successfully processed.




조인

테이블간의 관계를 통하여 데이터를 조회한다.

질의) 역대올림픽육상 100M의 최고기록과 그 기록 보유 선수의 이름을 조회하라csql> select B_2 as new_record, A.name from athlete A INNER JOINcsql> (select athlete_code, cast(score as numeric(4,2)) from recordcsql> where event_code in(select code from event where name='100m') order by 2 asc) Bcsql> on A.code=B.athlete_code and rownum=1csql> ;x===  ===  B_2                   name                ============================================  9.84                  'Bailey Donovan'


질의) 88년 서울올림픽에 참가한 세계 모든 국가와 그 순위를 조회하라csql> select B.name, A.gold, A.silver, A.bronze from participant A inner join nation Bcsql> on B.code=A.nation_code and A.host_year=1988 order by 2 desc,3 desc,4 desc, name asc; csql> ;x===  ===  name                                  gold       silver       bronze=============================================================  'U.R.S.S.'                              55           31           46'German Democratic Republic'              37           35           30    'Korea'                                  12           10           11'Federal Republic of Germany'             11           14           15 'Hungary'                                11            6            6 'Bulgaria'                               10           12           13                            중간생략 156 rows selected.Current transaction has been committed.1 command(s) successfully processed.csql>


질의) 88년 서울올림픽의 1위부터 10위까지의 국가 순위를 조회하라csql> select B.name, A.gold, A.silver, A.bronze from participant A inner join nation Bcsql> on B.code=A.nation_code and A.host_year=1988csql> order by 2 desc,3 desc,4 desc, name asc for orderby_num() between 1 and 10; csql> ;x===  ===  name                         gold       silver       bronze=============================================================  'U.R.S.S.'                       55           31           46  'German Democratic Republic'     37           35           30  'United States of America'       36           31           27  'Korea'                          12           10           11  'Federal Republic of Germany'    11           14           15  'Hungary'                        11            6            6  'Bulgaria'                       10           12           13  'Romania'                         7           11            6  'France'                          6            4            6  'Italy'                           6            4            410 rows selected.Current transaction has been committed.1 command(s) successfully processed. 

파티션과 뷰 생성하기

쿼리를 이용하여 구분에 따라 파티션을 나누고 원하는 뷰를 생성하는 방법을 확인한다.

파티션(Partition)

조건) game테이블을 획득 메달 기준으로 리스트 분할하라.csql> alter table game partition by list (medal)csql> (partition medal1 values in ('G'),csql>  partition medal2 values in ('S'),csql>  partition medal3 values in ('B')csql> ); csql> ;xcsql> ;sc game===  ===       game       game__p__medal1     game__p__medal2     game__p__medal3       host_year            INTEGER NOT NULL     event_code           INTEGER NOT NULL     athlete_code         INTEGER NOT NULL     stadium_code         INTEGER NOT NULL     nation_code          CHARACTER(3)     medal                CHARACTER(1)     game_date            DATE       PRIMARY KEY pk_game_host_year_event_code_athlete_code ON game (host_year, event_code, athlete_code)     FOREIGN KEY fk_game_event_code ON game (event_code) REFERENCES event ON DELETE RESTRICT, ON UPDATE RESTRICT     FOREIGN KEY fk_game_athlete_code ON game (athlete_code) REFERENCES athlete ON DELETE RESTRICT, ON UPDATE RESTRICT      PARTITION BY LIST (medal)      PARTITION medal1 VALUES IN ('G')     PARTITION medal2 VALUES IN ('S')     PARTITION medal3 VALUES IN ('B')Current transaction has been committed.); 

뷰(view)

조건) game테이블을 획득 메달 기준으로 리스트 분할하라.csql>create view game_1988 ascsql>select B.name as 선수명, A.name as 국가명, B.event as 종목명 csql>from nation A INNER JOIN (select name, nation_code, event from athlete csql>where code in(select athlete_code from game where medal='G' and host_year=1988)) Bcsql>on A.code=B.nation_code; csql> ;xcsql> ;sc game_1988===  ===       game_1988       선수명              CHARACTER VARYING(40)     국가명              CHARACTER VARYING(40)     종목명              CHARACTER VARYING(30)  select B."name", A."name", B."event" from nation A inner join (select athlete."name", athlete.nation_code, athlete."event" from athlete athlete where athlete.code in (select distinct game.athlete_code from game game where game.medal='G' and game.host_year=1988)) B ("name", nation_code, "event") on A.code=B.nation_code

CSQL 종료

csql를 종료 할 때는 다음과 같이 한다.csql> ;exit[cubrid@testsrv4 cubrid]$

CUBRID Database 정지

구동중인 Database을 종료하는 명령은 다음과 같다.     cubrid server stop database_name[cubrid@tes