列の型

テーブルの列には、型を指定しなければなりません。基本的なデータ型には、数値、文字列、日付の3種類あります。大きなデータを扱うために、LOB(ラージオブジェクト)やイメージといった型が利用できます。
型についても、SQL92で規定されています。ほとんどのデータベースでANSIで決められている型を利用することができます。しかし、パラメータの指定などの細かい部分では異なっているため、データベースごとに簡単な表形式で説明します。



열의 형

테이블의 열에는 형을 지정해야만 합니다. 기본적인 데이터형에는 수치, 문자열, 날짜의 3종류가 있습니다. 큰 데이터를 다루기 위해서 LOB(라지 오브젝트)나 이미지라는 형을 이용할 수 있습니다.
형에 관해서도 SQL92에 규정되어 있습니다. 대부분의 데이터베이스에서 ANSI로 정해져있는 형을 이용할 수가 있습니다. 그러나 파라메타의 지정등의 세세한 부분에서는 다르기 때문에 데이터베이스 별로 간단한 표형식으로 설명하겠습니다. 

Posted by 자수성가한 부자
「外部参照整合制約」は、テーブルの関係をより明確に定義することができます。

住所録テーブル
ID     氏名             住所             年齢     性別       会社ID
1      山田太郎       東京都          21        男          1
2      鈴木花子       北海道          32        女          2
3      佐藤 次郎      埼玉県          17        男          1
4      田中良子       大阪府          19        女          (null)

会社テーブル
会社ID      会社名          住所
1             ○○商事       東京都
2             ××牧場        北海道

住所録テーブルに会社名や会社の住所の列を追加してもいいのですが、それではせっかくのリレーショナル・データベースが台無しになってしまいます。ここでは会社テーブルを作成し、「会社ID」列によって関係させています。こうしておけば、会社の住所が変わったときに、会社テーブルの住所を変更するだけでよく、住所録テーブルには何の修正もしなくて済みます。
さて、ここで会社テーブルから「××牧場」を削除してしまったらどうなるでしょう。「鈴木花子」さんはまだその牧場に勤めているので、会社IDには2という値が入ったままです。このようなデータの矛盾が起きないように、制限を加える機構が外部参照整合制約です。
外部参照整合制約は「外部キー」と呼ばれることもあります。外部参照整合制約はCREATE TABLE時、またはALTER TABLEによって作成されます。


'외부참조정합제약'은 테이블과 관계를 좀 더 명확하게 정의 할 수가 있습니다.

주소록 테이블
ID    이름                주소                 연령      성별     회사ID
1     야마다 타로      도쿄도               21        남        1
2     스즈키 하나코   홋카이도            32        여        2
3     사토 지로         사이타마현         17        남        1
4     다나까 료코      오사카부            19        여        (null)

회사 테이블
회사ID   회사명        주소
1          ○○상사     도쿄도
2          ××목장      홋카이도

주소록 테이블에 회사명과 회사 주소의 열을 추가해도 되지만 그러면 모처럼 만든 관계형데이테베이스가 필요없게 되어버립니다. 여기에서는 회사테이블을 작성하고, '회사ID'열에 의해서 관계시키고 있습니다. 이렇게 해두면 회사주소가 바뀔때에
회사테이블의 주소를 변경하는 것만으로 주소록테이블에는 아무런 수정도 하지않아도 됩니다.
자, 여기에서 회사테이블에서 '××목장'을 삭제해 버리면 어떻게 될까요? '스즈키 하나코'씨는 아직 그 목장에서 근무하고 있기 때문에 회사ID에는 2라는 값이 들어가있는 상태입니다. 이러한 데이터 모순이 일어나지 않도록 제한을 더하는 기구가 외부참조정합제약입니다.
외부참조정합제약은 '외부키-'라고 불리는 일도 있습니다. 외부참조정합제약은 CREATE TABLE시 또는 ALTER TABLE에 의해서 작성됩니다.
Posted by 자수성가한 부자

プライマリキー制約

テーブルには1つの「プライマリキー(主キー)」を設定することが可能です。プライマリキーは、テーブルの中で、1つまたはそれ以上の列を指定します。プライマリキーに指定された列の値には、NULL値を入れることはできません。また、テーブル全体でユニークなものでなくてはなりません。前の列で示した住所録テーブルの氏名列がプライマリキーに指定されていたとすると、同じ氏名でのデータ行を持つことはできません。



프라이머리키 제약

테이블에는 하나의 '프라이머리키(주키)'를 설정하는 것이 가능하다. 프라이머리키는 테이블에서 하나 또는 그 이상의 열을 지정합니다. 프라이머리키에 지정된 열의 값에는 NULL값을 넣을 수가 없습니다. 또, 테이블 전체에서 유니크한 것이여야만 합니다. 앞열에서 지정한 주소록 테이블의 이름열이 프라이머리키에 지정된 있다라고 하면 같은 이름으로 데이터행을 가질 수 없습니다.
Posted by 자수성가한 부자
テーブル構造

リレーショナル・データベースの基本要素(データベース・オブジェクト)は、「テーブル(表)」です。テーブルは複数の「行(ロー)」から構成され、行は「列(カラム)」から構成されます。

列には、名前と型を与えることができます。型には数値型や文字列型、日付型などがあります。データベースによって使用できる型が違いますが、基本的な型については、どのデータベースでも使用することができます。
行には名前を付けません。列の集まりが行とされます。データベースの制限上、数万、数百万の列を持つテーブルは作成できません。しかし、数万、数百万の行を持つテーブルは作成可能です。列数を多くすると、パフォーマンスに影響するなどあまりよいことはないので、1つのテーブルに多くの列数を作るよりは、少ない列数のテーブルに分割した方がよいといえます。



테이블 구조

관계형 데이터베이스의 기본요소(데이터베이스 오브젝트)는 '테이블(표)'이다. 테이블은 복수의 '행(로우)'로 구성되며
행은 '열(칼럼)'로 구성된다.

열에는 이름과 타입을 부여하는 것이 가능하다. 타입에는 수치형이나 문자형, 날짜형 등이 있습니다. 데이터베이스에 따라서 사용할 수 있는 타입이 다르지만 기본적인 타입에 관해서는 어느 데이터베이스에서도 사용할 수 있습니다.
행에는 이름을 붙일 수 없습니다. 열의 집합이 행이 됩니다. 데이터베이스의 제한상, 수만, 수백만의 열을 갖는 테이블은 작성할 수 없습니다. 그러나 수만, 수백만의 행을 갖는 테이블은 작성 가능합니다. 열수를 많이 하면 퍼포먼스에 영향을 주는 등 그다지 좋은 것은 아니기 때문에, 하나의 테이블에 많은 열수를 만드는 것보다는 적은 열수의 테이블에 분할하는 편이 좋습니다.
Posted by 자수성가한 부자

コメント

C言語と同様な形式でコメントを記述できます。「/*」「*/」に囲まれた文字列はコメントとみなされます。「--」に続く文字列も改行されるまでコメントとみなされます。
コメントがあってもSQL命令になんら影響を及ぼすことはありません。また、例のように命令中にコメントがあってもかまいません。

/* コメントなので何を書いても良い */
-- これもコメントです
SELECT /* 1つだけ選択 */ one FROM foo /* テーブルFOO */

Oracleでは、オプティマイザにヒントを与えるために、コメント内の文字列を使用します。コメントの最初に+があると、オプティマイザへの指示であると解釈されます。

/*+ 特殊なコメント */

*Accessではクエリー内にコメントを記述することは許されません。



주석

C언어와 같은 형식으로 주석을 기술할 수 있습니다. 「/*」「*/」에 둘러싸여진 문자열은 주석으로 간주합니다. 「--」에 이어서 나온 문자열도 개행되기 전까지 주석으로 봅니다.
주석이 있어도 SQL명령에 어떠한 영향을 미칠수도 없습니다. 또 예와 같이 명령 중에 주석이 있어서 상관없습니다.

/* 주석이기 때문에 무엇을 써넣어도 괜찮음 */
-- 이것도 주석입니다.
SELECT /* 하나만 선택 */ one FROM foo /* 테이블FOO */

Oracle에서는 옵티마이저에 힌트를 주기 위해서 주석 안에 문자열을 사용합니다. 주석의 처음에 +가 있으면 옵티마이저에 지시로 해석됩니다.

Access에서는 쿼리내에 주석을 기술하는 것은 허용되지 않습니다.


なんら:어떠한
特殊(とくしゅ):특수한



아무리 기술적인 내용이지만 너무 딱딱하고 재미없다 . 정보도 많이 부족한 것 같은 느낌도 들고....
Posted by 자수성가한 부자

期間リテラル

期間(インターバル)を表す、期間リテラルは文字列と同様にシングルクォーテーション(')または、ダブルクォーテーション(")で囲んで表現します。キーワード[INTERVAL]により細かい指定が可能なデータベースもあります。ここでは、個別に説明してきます。

Oracle
Oracleでは、INTERVALを使って期間に関する定数を、正確に記述することができます。例えば、10日は、INTERVAL'10'DAYと記述できます。さらに、1時間は、INTERVAL'1'HOURです。a列の日付から10時間後を計算するには、次のように処理すれば良いでしょう。

SELECT a + INTERVAL '10' HOUR FROM foo

3年と4ヶ月をINTERVALによって表現することの可能です。

INTERVAL '3-4' YEAR(1) TO MONTH

(1)は年が1行であることを意味しています。10日と8時間を表現すると次のようになります。

INTERVAL '10 8' DAY(2) TO HOUR



기간 문자열

기간(인터벌)을 나타내는 기간 문자열과 같이 작은따옴표 또는 큰따옴표로 둘러싸 표현합니다. 키워드 [INTERVAL]에 의해
세사한 지정도 가능한 데이터베이스도 있습니다. 여기에서는 개별적으로 설명하겠습니다.

Oracle
Oracle에서는 INTERVAL을 사용하여 기간에 관한 정수를 정확하게 기술할 수가 있습니다. 예를 들면 10일은 INTERVAL'10'DAY라고 기술할 수가 있습니다. 이에 더해서 1시간은 INTERVAL'1'HOUR입니다. a열의 날짜에서 10시간후를 계산하는데는 다음과 같은 처리를 하면 되겠습니다.

SELECT a + INTERVAL '10' HOUR FROM foo

3년 4개월을 INTERVAL로서 표현하는 것도 가능합니다.

INTERVAL '3-4' YEAR(1) TO MONTH

(1)은 년이 1행인 것을 의미하고 있습니다. 10일과 8시간을 표현하면 다음과 같이 됩니다.

INTERVAL '10 8' DAY(2) TO HOUR



데이터베이스 관련 내용은 정보 전달이 목적이라서 그런지 딱딱하긴 딱딱하네
만약 책을 번역하게 되면 이런 문체로는 안되겠지??
Posted by 자수성가한 부자
日付リテラル

日付や時刻を表す、日付リテラルは文字列と同様にシングルクォーテーション(')または、ダブルクォーテーション(")で囲んで表現します。文字列の中身は、日付を表していなければなりません。次のようなものが日付リテラルとなります。

'2002-11-23'  '2002/12/31'  '2000-01-01 13:30:20'

Oracle、PostgreSQLでは、TO_DATE関数により、文字列を日付値に変換することができます。この際に、書式のファーマットを指定することで、任意の書式を日付型として変換することができます。たとえば次のように行います。

TO_DATE('1999/08/31'.'YYYY/MM/DD')



날짜 리테럴

날짜나 시각을 표현하는 날짜 리테럴은 문자열과 같이 작은따옴표 또는 큰따옴표를 싸서 표현한다. 문자열은 알맹이는
날짜를 표현해야만 한다. 다음과 같은 것이 날짜 리테럴이라고 한다.

'2002-11-23'  '2002/12/31'  '2000-01-01 13:30:20'

Oracle、PostgreSQL에서는 TO_DATE함수에 의해서 문자열을 날짜값으로 변환할 수가 있습니다. 이 때에 서식 포맷을 지정하는 것으로 임의의 서식을 날짜형으로 변환하는 것이 가능합니다. 예를 들면 다음과 같이 실시합니다.

TO_DATE('1999/08/31'.'YYYY/MM/DD')
Posted by 자수성가한 부자

SQLは大文字、小文字の違いを無視します。

SELECT * FROM FOO
select * from foo
Select * From Foo

これらの3つの文は同じ命令とみなされます。ただし、データベースによってはテーブル名などのオブジェクト名は大文字と小文字を区別するものがあります。また、多くのデータベースでは、内部のデータや文字列リテラルは大文字、小文字が区別されます。

SELECT * FROM FOO WHERE NAME = 'ABC'
select * from foo where name = 'abc'

上記のSELECT命令の結果は異なったものになります。文字列データとしてabcとABCは違ったものになります。
ただし、文字セットの定義の仕方により、内部のデータや文字列リテラルであっても大文字・小文字を区別しないデータベースもあります。MySQLは、デフォルトの動作では、大文字・小文字を区別しません。



SQL은 대문자, 소문자의 차이를 무시합니다.

SELECT * FROM FOO
select * from foo
Select * From Foo

이 3개의 문은 같은 명령으로 간주합니다. 단 데이터베이스에 따라서는 테이블명 등의 오브젝트명은 대문자와 소문자를
구별하는 것도 있습니다. 또 많은 데이터베이스에서는 내부 데이터나 문자열 리테럴은 대문자, 소문자가 구별됩니다.

SELECT * FROM FOO WHERE NAME = 'ABC'
select * from foo where name = 'abc'

위의 SELECT명령의 결과는 서로 다릅니다. 문자열 데이터로써 abc와 ABC는 다릅니다.
단 문자세트의 정의 방법에 의해 내부 데이터나 문자열 리테럴이라고 해도 대문자, 소문자를 구별하지 않는 데이터베이스도 있습니다. MySQL은 디폴트동작에서는 대문자, 소문자를 구별하지 않습니다.
Posted by 자수성가한 부자
文字列リテラル-2

Oracle, DB2, PostgreSQLでは、ダブルクォーテーションで囲まれた文字列はデータベース名であるとみなされます。このため、文字列リテラルは、シングルクォーテーションで囲みます。
Oracleでは、ユニコードで記述された文字列リテラルを [N'text']といった形で記述できます。
PostgreSQLでは、「B'101011'」と記述することで、2進数のビット列により、数値リテラル(ビット列リテラル)を記述することができます。
DB2では、「X'FFFF'」と記述することで、16進数表記での文字列リテラルを記述することができます。また「N'テキスト'」や「G'TEXT'」と記述することで、漢字文字列リテラルを記述することができます。



문자열 리테럴 -2

Oracle, DB2, PostgreSQL에서는 큰따옴표로 둘러싼 문자열은 데이터베이스명으로 간주됩니다. 이 때문에
문자열 리테럴은 작은따옴표로 둘러쌉니다.
Oracle에서는 유니코드로 기술된 문자열 리테럴을 [N'text']라는 형태로 기술할 수 있습니다.
PostgreSQL에서는 「B'101011'」라고 기술하는 것으로 2진수 비트열에 의한 수치리테럴(비트열 리테럴)을 기술할 수가 있습니다.
DB2에서는 「X'FFFF'」라고 기술하는 것으로 16진수표기로 문자열을 기술할 수가 있습니다. 또 「N'テキスト'」나 「G'TEXT'」라고 기술하는 것으로 한자문자열리테럴을 기술할 수가 있습니다.
Posted by 자수성가한 부자

文字列リテラル-1

文字列定数を表すリテラルは文字列をシングルクォーテーション(')または、ダブルクォーテーション(")で囲んで表現します。
'this is string'              "this is string"

どちらを使ってもかまわないデータベースが多いのですが、SQLではシングルクォーテーションを使うことが慣習となっています。こちらの方が、BasicやCなどのプログラム中にSQL命令を文字列として記述する時に便利です。BasicやCでは文字列を表現する際に、ダブルクォーテーションを使用するからです。
char* sql = "SELECT * FROM foo WHERE a = 'abc'";

シングルクォーテーションによる文字列中でシングルクォーテーションを表現するには、シングルクォーテーションを2つ並んで記述します。
'Asai''s' -> Asai's


문자열 리테럴

문자열정수를 표현하는 리테럴은 문자열을 작은따옴표 또는 큰따옴표로 묶어서 표현합니다.
'this is string'              "this is string"

어느 쪽을 사용해도 상관없는 데이터베이스가 많지만 SQL에서는 작은따옴표를 사용하는 것이 관습이다.
이렇게 하는 편이 Basic이나 C등의 프로그램중에 SQL명령을 문자열로서 기술할 때 편리하다. Basic이나 C에서는 문자열을 표현할 때 큰따옴표를 사용하기 때문이다.
char* sql = "SELECT * FROM foo WHERE a = 'abc'";

작은따옴표로 기술한 문자열 안에 작은따옴표를 표현하는데는 작은따옴표를 2개 연달아 기술합니다.


Posted by 자수성가한 부자