テーブルのカラムで、2005という文字を格納したい場合、
属性として、NUMBER型、CHAR型の選択ができると思います。
●テーブル名 TABLE1
カラム名 A B
属性 ??? char
データ 2005 XXXX
●テーブル名 TABLE2
カラム名 A C
属性 ??? char
データ 2005 XXXX
このカラムAが、TABLE2のAの2005という値と結合させる
(結合させるためのキーとなっている場合)
ということがある場合、NUMBER型での定義とchar型での定義に
速度的な観点やその他の観点で、なにか差異みたいなものはありますでしょうか?
下記のように、値を指定するところでは、シングルコーテーションが必要か不必要かというのは、あるかと思いますが、
結合自体で、差異はありますでしょうか?
■CHAR型にした場合。
select * form TABLE1,TABLE2
where A='2005'
and TABLE1.A=TABLE2.A
■NUMBER型
select * form TABLE1,TABLE2
where A=2005
and TABLE1.A=TABLE2.A
No.3ベストアンサー
- 回答日時:
No.2への回答です。
> 片一方は、CHAR型、もう片方は、VARCHAR2であるというのは、
> 避けたほうが良いということでしょうか?
型違いはできるだけ避けた方が良いかと。
CHARとVARCHAR2は固定長か可変長かの違いがありますので
比較条件に指定した場合、意図しない結果となる場合があります。
例えばCHAR(3)の列とVARCHAR2(3)の列に'A'という文字が
格納されていて、それらを比較しようとした場合ですね。
CHAR型は'A 'という文字列に、VARCHAR2型は'A'という文字列になり
これらを比較した結果、一致ぜず…という事になります。
片方がNUMBER型、もう片方がCHAR型もしくはVARCHAR2型である場合は
比較を行うと一致はしますが、No.2で書いた通り型変換が行われる分だけ
性能面で影響がでてきます。
No.4
- 回答日時:
型違いのデータを結合・比較・その他の処理をするときには、当然、どちらかの型に他方を「変換」するわけです。
今回のcharとvarcharの事例ですと、固定長の文字列と可変長の文字列間の変換となります。
OLACLE上でどちらがどちらに変換され、どのように扱われるかは、No3の方も一部事例をかかれていますように、厳密に定義されています。
さて、この規約をちゃんと正確に覚えているプログラマーは立派です。少なくとも、私は自信がありません。必要なときには、必ずマニュアルの該当箇所を確認します。(これがましてや、NUMBERとVARCHAR(または、CHAR)となったら、徹底したテストもしたい(苦笑))
つまり、とっても面倒です。
世の中、どうしても、その必要があり、必要に迫られて型変換をせざるを得ないことは往々にしてありますが、今から設計するシステムでその必要がないなら、そんなモノはしないのが一番です。プログラムを作成し、修正していく課程で他に考えなくてはいけないことはたくさんあります。なにも、よけいな心配を増やす必然性はさらさらありません。というか、よけいな心配事を一つでも減らしていけるように、データ型というのは設計していくべきでしょう。
ですから、結論としては、どうしても型違いでなければならない理由が無いのであれば、型は同じにしておくべき。となるでしょうね。
ちなみに、NUMBERとCHAR(VARCHAR)の選択に関しては、利用用途によっては、まだ他にも考慮点が思いつきます。
もし、その列でソートするとき、2005と305は、どちらが大きいですか?といった話がプログラム作成に負荷をかける可能性があります。当然、数値としては2005ですが、文字列として考えると、桁あわせをどうするか等いろいろと考える必要があります。本当に、この数字が文字列なら、どちらが大きいかは、「業務の定義による」というのが正解ですし…。
基本的には、その項目で計算をするかどうかと言うよりは、業務としての定義上、その項目が数・数値なのか、それとも、0~9までの文字を使用した文字列(符号)なのか、そのどちらかによって決定するのが、経験上、プログラムもシンプルになるように思います。
蛇足ですが、業務上の定義によっては、それは、DATE型ではありませんか?というのも一つの選択肢としてあり得るかと。
No.2
- 回答日時:
こんにちは。
私も No.1 PCFREAK様と同意見です。
(なのでポイント辞退。
同じ意見の人が同じ事を書いてるな…くらいに考えてくださいな^^;)
結合時、TABLE1のカラムAとTABLE2のカラムAの型が
それぞれ違った場合は、暗黙の型変換が生じますので影響があります。
しかし今回の場合は同じ型という事で差異がありません。
型の違いによる差異ですが
固定長より可変長の方がサイズが小さい
↓
全体的にレコードを格納するブロック数が少なくなる
↓
読み取り時のブロック数が少なくなり、読み取り性能に差が出る
という考えです。
今回はデータサイズにほどんど差がないため影響がない程度と思います。
あと…
キー項目には、連番以外の目的でNUMBER型を使うとアプリ開発者側に
色々と誤解を生じさせてしまう事があるので、私も使わないようにしてます。
回答ありがとうございます。
型の違いによる差異について、もう少しお教え願えますでしょうか?
片一方は、CHAR型、もう片方は、VARCHAR2であるというのは、
避けたほうが良いということでしょうか?
No.1
- 回答日時:
結合自体には差がありません。
速度的には、若干NUMBERの方が速いのではと予想出来ますが、ほぼ無視できる差だと思われます。
どちらを採用するかは設計思想に依存しますね。
数値として取り扱うのであればNUMBER型ですが、文字として扱うのであればCHAR型を使うのが正でしょう。
私個人的にはキーにNUMBER型を使うのは極力好ましくない(特別な理由があるのであれば別ですが。)と考えている為、CHAR型(厳密にはVARCHAR2型)を採用する事が多いです。
回答ありがとうございます。
その値を使って計算させるわけではないので、CHAR型にしようと思います。
PCFREAK様は、キーにNUMBER型を使うのは極力好ましくないとありますが、
それは、なんでなのでしょうか?
また、「厳密にはVARCHAR2」とおっしゃってますが、
それは、なにか意図があるのでしょうか?
知識不足で申し訳ありませんが、よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle データベースのカラムの型がCHAR型の場合で 値にシングルコーテーションつけなくても動作する場合と数 3 2022/04/25 12:00
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Excel(エクセル) Excel2007での条件付き書式について 6 2023/05/02 10:56
- その他(アニメ・マンガ・特撮) 腐女子ってマナーが悪いですよね? 2 2023/04/10 17:56
- 物理学 波の合成についてです E1(z,t)=A0cos(kz-ωt+Φ) E2(z,t)=A0cos(kz 1 2022/10/10 06:35
- 工学 ちなみになぜv=(v・e1)e1+(v・e2)e2はe1やe2が、正規直交基底でないと成り立たないと 2 2022/12/22 17:22
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Excel(エクセル) エクセルでのVBA 2 2022/08/03 06:48
- カスタマイズ(車) 2003年式レガシィB4 2.0GT TA-BL5に乗ってるのですが このマイルドダンパーという車高 2 2023/06/11 22:09
- IT・エンジニアリング ドメイン駆動設計の値オブジェクトについて質問 1 2023/05/13 02:50
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
「平成」を感じるもの
「昭和レトロ」に続いて「平成レトロ」なる言葉が流行しています。 皆さんはどのようなモノ・コトに「平成」を感じますか?
-
これが怖いの自分だけ?というものありますか?
人によって怖いもの(恐怖症)ありませんか? 怖いものには、怖くなったきっかけやエピソードがあって聞いてみるとそんな感覚もあるのかと新しい発見があって面白いです。
-
プリン+醤油=ウニみたいな組み合わせメニューを教えて!
プリンと醤油を一緒に食べると「ウニ」の味がする! というような意外な組み合わせから、新しい味になる食べ物って色々ありますよね。 あなたがこれまでに試した「組み合わせメニュー」を教えてください。
-
タイムマシーンがあったら、過去と未来どちらに行く?
20XX年、ついにタイムマシーンが開発されました。 あなたは過去に行く? それとも未来? タイムマシーンにのって、どこに行って、何をしたいか教えてください!
-
Oracleのデータ型、NUMBERについて
その他(データベース)
-
ORA-01013のエラーについて経験のある方お願いします。
Oracle
-
異なるスキーマからデータを抽出するには?oracl、PL/SQL
Oracle
-
-
4
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
5
Java-jspの画面入力値保持について
Java
-
6
リクエストに応じたselectedの初期値設定方法
Java
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~12/6】 西暦2100年、小学生のなりたい職業ランキング
- ・ちょっと先の未来クイズ第5問
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブル名をカラムとして取得...
-
お世話になってます。
-
ROWNUMでUPDATEをしたいのです...
-
SQL 複数テーブルのupdate
-
SQL、2つのテーブルで条件一致...
-
L2SWはARPテーブルを持っている?
-
男性と2人で飲食店に行きテーブ...
-
お金持ちのテーブル
-
「テーブルに座って……」という...
-
ACCESS での LEFT JOIN 時の WH...
-
オープンオフィスでのテーブル...
-
一つ前に戻るには…
-
会社の飲み会の幹事になり、座...
-
EXCELデータからACCESSデータの...
-
AccessのSQL 部分一致したデー...
-
テーブルで一番古いレコードだ...
-
DBFluteについて質問です。 環...
-
EXCEL マクロで行を挿入して貼...
-
オーダーの覚え方について
-
Visuaal Studio Community 2022...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブル名をカラムとして取得...
-
SQL、2つのテーブルで条件一致...
-
SQL*LoaderでCSVから指定した列...
-
update文で改行を入れる
-
ROWNUMでUPDATEをしたいのです...
-
SQL 複数テーブルのupdate
-
sqlplusで表示が変なので、出力...
-
SQLでSUMなどの関数でデータが...
-
カラム位置変更
-
特定のカラムが更新されたとき...
-
件数とデータを同時に取得する...
-
Oracleのview、synonymをCOMPIL...
-
数値をNUMBER型にするかCHAR型...
-
DELETE文とロックについて
-
LONG型の先頭250バイトを Varch...
-
テーブルやカラムの物理名のネ...
-
SQL(oracle)でご助言いただきた...
-
半角英数文字の抽出がしたい。
-
Viewのカラムの長さが不明?
-
SQLで違うテーブルの値を比較し...
おすすめ情報