OSS-DB Silver 暗記 C-1-2

開発/SQL(32%):::SQL:データ型【重要度:13】

 

1. 数値データ型

1.1 整数型

  • smallint:2バイト -32,768~+32,767
    • 覚え方:1バイトが256なので、2バイトは256×256≃200×300=60,000 → 65,536
  • integer(int):4バイト -21億~21億
    • 覚え方:4バイトは65536×65536≃6万×7万=42億(億=万×万)
  • bigint:8バイト -922京~+922京
    • 覚え方:8バイトは42億×42億≃40億×40億=1,600京(京=億×億)

 

1.2 浮動小数点型

  • real:4バイト
    • 精度:6桁、例:1.23456
    • 範囲:1E-37~1E+37
  • double precision:8バイト
    • 精度:15桁、例:1.23456789012345
    • 範囲:1E-308~1E+308

 

1.3 任意の精度を持つ数

  • numeric( precision, scale ) / decimal
    • 精度(precision):147,455(131,072+16,383)まで
    • 位取り(scale):16,383まで

 

CREATE TABLE numericTest (
	c1 numeric(3,2)
);
INSERT INTO numericTest VALUES (3.14);    -- precision:3, scale:2

 

1.4 自動採番型

  • smallserial:2バイト:1~32767
    • 覚え方:256×256≃200×300=60000→65536→1~32500ぐらい
  • serial:4バイト:1~2147483647
    • 覚え方:65536×65536≃6万×7万=42億→1~21億ぐらい
  • bigserial:8バイト:1~922京
    • 覚え方:42億×42億≃40億×40億=1600京→1~800京ぐらい

 

 

2. 文字型

  • varchar(n), character varying(n):n は文字数
    • 読み:バーチャー
    • 意味:上限付き可変長
  • char(n), character(n) :n は文字数
    • 読み:チャー
    • 意味:空白で埋められた固定長
  • text
    • 意味:制限なし可変長

 

 

3. バイナリ型

  • bytea:可変長のバイナリ列

 

 

4. 日付/時刻データ型

  • timestamp [without time zone]
    • 例 :2020-11-01 12:00:00.123456
    • 精度:1マイクロ秒
  • timestamp with time zone(timestamptz)
    • 例 :2020-11-01 12:00:00.123456+09
    • 説明:+09:timezone

 

=> SET timezone to 'UTC';             -- timezone:UTC
=> SHOW timezone;                     -- SHOW
----------
 TimeZone
----------
 UTC
----------
=> SELECT current_timestamp;          -- SELECT
-------------------------------
        current_timestamp
-------------------------------
 2020-10-21 15:52:52.798392+00        -- +00:timezone
-------------------------------

 

=> SET timezone to 'japan';           -- timezone:Japan
=> SHOW timezone;                     -- SHOW
----------
 TimeZone
----------
 Japan
----------
=> SELECT current_timestamp;          -- SELECT
-------------------------------
        current_timestamp
-------------------------------
 2020-10-22 00:52:52.798392+09        -- +09:timezone
-------------------------------
  • date
    • 2020-11-01
  • time [without time zone]
    • 例 :12:00:00.123456
  • time with time zone
    • 例 :12:00:00.123456+09
  • interval ‘quantity unit
    • quantity:(符号付き)時間量
    • unit:単位:year, month, day, hour, minute, etc.
    • 例 :interval ’30 days’

 

 

5. 論理値データ型

  • boolean
    • サイズ:1バイト
    •  値 :真か偽か不定
      • 真 :TRUE, ’true’, ‘yes’, ‘on’, ‘1’
      • 偽 :FALSE, ’false’, ‘no’, ‘off’, ‘0’
      • 不定:NULL
        • 文字列固有の接頭辞:’t’, ‘y’, ’f’, ‘n’
        • 大文字小文字は混在可

 

 

6. オブジェクト識別子型

  • オブジェクト識別子:OID(Object Identifier)
    • サイズ:符号なし4バイト整数
    • 説明 :オブジェクトの識別に用いられるID番号
      • DBC で一意の値を取る

 

 

7. 配列

7.1 配列の宣言

  • c1 int[]

 

=> CREATE TABLE array1 (
       c1 int[] );

 

7.2 配列への値入力

  • ’{ val-1, val-2, val-3, … }’
  • ’{ { val-11, val-12, …}, { val-21, val-22, … }, { val-31, val-32, … }, … }’

 

=> INSERT INTO array1 VALUES ( '{ 1, 2, 3}');
   INSERT INTO array1 VALUES ( '{ {11,12}, {21,22}, {31,32} }' );
--------------------------
           c1
--------------------------
{1,2,3}
{{11,12},{21,22},{31,32}}
--------------------------

 

7.3 配列への問い合わせ

 

=> SELECT c1[1:2] FROM array1;                       -- c1[1:2]
-------------------
         c1
-------------------
 {1,2}
 {{11,12},{21,22}}
-------------------
=> SELECT * FROM array1 WHERE c1[1][1]=11;           -- SELECT
---------------------------
             c1
---------------------------
 {{11,12},{21,22},{31,32}}
---------------------------

 

7.4 配列の更新

 

=> UPDATE array1 SET c1[1]=9 WHERE c1[1]=1;          -- UPDATE
---------
    c1
---------
 {9,2,3}
---------

 

 

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。