Home実験室 − No.0029


        No.0029(SQL)
        Where句についての追加実験(否定)

■環境
  □OS: Windows XP Professional SP3
  □Oracle: Oracle Database 11g R2 (Standard)
  □OSログインユーザ: ORA_DBAグループ
  □Oracleユーザ: dicdic(実験用ユーザー) → 実験環境構築スクリプト

■実験
  0. 実験ユーザー「dicdic」でコネクトする。

SQL> conn dicdic/Oracle11g 接続されました。 SQL>



  1. 【Not条件の指定】最終学歴コードが高卒以外の人、
     つまり大学院院か、高専出身、専門学の出身の人。NOTの位置に注意!

SQL> SELECT 氏名,最終学歴コード FROM TT01_学生 WHERE NOT 最終学歴コード = 1; 氏名 最終学歴コード ---------------------------------------- -------------- 向井 寿男 2 大畑 花歩 5 小松 定男 2 井上 成康 5 北山 静子 2 久米 幸平 2 曽我 孝宏 2 石岡 敦 2 289行が選択されました。 SQL>



  2. 「=」の代わりに、「<>」でもよい。

SQL> SELECT 氏名,最終学歴コード FROM TT01_学生 WHERE 最終学歴コード <> 1; 氏名 最終学歴コード ---------------------------------------- -------------- 向井 寿男 2 大畑 花歩 5 小松 定男 2 井上 成康 5 北山 静子 2 久米 幸平 2 曽我 孝宏 2 石岡 敦 2 289行が選択されました。 SQL>



  3. 「=」の代わりに、「!=」でもよい。

SQL> SELECT 氏名,最終学歴コード FROM TT01_学生 WHERE 最終学歴コード != 1; 氏名 最終学歴コード ---------------------------------------- -------------- 向井 寿男 2 大畑 花歩 5 小松 定男 2 井上 成康 5 北山 静子 2 久米 幸平 2 曽我 孝宏 2 石岡 敦 2 289行が選択されました。 SQL>



  4. 「=」の代わりに、「^=」でもよい。

SQL> SELECT 氏名,最終学歴コード FROM TT01_学生 WHERE 最終学歴コード ^= 1; 氏名 最終学歴コード ---------------------------------------- -------------- 向井 寿男 2 大畑 花歩 5 小松 定男 2 井上 成康 5 北山 静子 2 久米 幸平 2 曽我 孝宏 2 石岡 敦 2 289行が選択されました。 SQL>



  5. NOTの位置を間違えるとこうなる。私はついつい、どうしてもLikeの手前にNOTをつけてしまうことがある。

SQL> SELECT 氏名,最終学歴コード FROM TT01_学生 WHERE 最終学歴コード NOT = 1; SELECT 氏名,最終学歴コード FROM TT01_学生 WHERE 最終学歴コード NOT = 1 * 行1でエラーが発生しました。: ORA-00920: 関係演算子が無効です。 SQL>



  6. 「生年月日が199から始まらない」つまり、1990年代生まれではない人を
     抽出する。サンプルデータベースの場合、結果的に1980年代生まれの一覧になる。

SQL> SELECT 氏名,生年月日 FROM TT01_学生 WHERE NOT 生年月日 Like '199%'; 氏名 生年月日 ---------------------------------------- ---------- 窪田 信玄 19890606 須藤 貞次 19890507 黒田 比呂美 19890513 望月 淳三 19890613 柴崎 拓也 19890815 内山 三喜 19891104 児玉 清志 19890924 溝口 陽和 19670929 147行が選択されました。 SQL>



  7. 私はついつい、どうしてもLikeの手前にNOTをつけてしまう理由のひとつがコレ。
     「NOT =」はダメだけど、「NOT Like」は構文エラーにならず、きちんとSelectできる。

SQL> SELECT 氏名,生年月日 FROM TT01_学生 WHERE 生年月日 NOT Like '199%'; 氏名 生年月日 ---------------------------------------- ---------- 窪田 信玄 19890606 須藤 貞次 19890507 黒田 比呂美 19890513 望月 淳三 19890613 柴崎 拓也 19890815 内山 三喜 19891104 児玉 清志 19890924 溝口 陽和 19670929 147行が選択されました。 SQL>



  8. TOEICを受けていない人はTOEIC列がNullになっているはず。
     受けている人だけを抽出したいんだけど....

SQL> SELECT 氏名,TOEIC FROM TT01_学生 WHERE NOT TOEIC = Null; レコードが選択されませんでした。 SQL>



  9. う〜ん。これでもやはりダメ。0件なワケないのだが...なぜか抽出できない...。

SQL> SELECT 氏名,TOEIC FROM TT01_学生 WHERE NOT TOEIC Like Null; レコードが選択されませんでした。 SQL>



  10. う〜ん。またしてもダメ。0件なワケないのだが...なぜか抽出できない...。

SQL> SELECT 氏名,TOEIC FROM TT01_学生 WHERE TOEIC <> NULL; レコードが選択されませんでした。 SQL>



  11. ますますひどくなった。

SQL> SELECT 氏名,TOEIC FROM TT01_学生 WHERE TOEIC NOT Null; SELECT 氏名,TOEIC FROM TT01_学生 WHERE TOEIC NOT Null * 行1でエラーが発生しました。: ORA-00920: 関係演算子が無効です。 SQL>



  12. やっとできた。「IS NOT NULL」というひとまとまりの構文として覚えたほうがよさそうだ。

SQL> SELECT 氏名,TOEIC FROM TT01_学生 WHERE TOEIC IS NOT Null; 氏名 TOEIC ---------------------------------------- ---------- 窪田 信玄 802 須藤 貞次 998 黒田 比呂美 955 望月 淳三 730 谷口 梨央 279 栗本 翔太 253 塚本 啓二 263 広瀬 和彦 174 2209行が選択されました。 SQL>



  13. IS NOT Nulも当然、他のwhere条件との併用も可能。

SQL> SELECT 氏名,TOEIC FROM TT01_学生 WHERE TOEIC IS NOT Null and rownum < 10; 氏名 TOEIC ---------------------------------------- ---------- 窪田 信玄 802 須藤 貞次 998 黒田 比呂美 955 望月 淳三 730 岩田 昌信 976 菅沼 和奏 628 岩谷 彦太郎 938 島津 昌孝 549 下川 里沙 777 9行が選択されました。 SQL>





    【PR】    Oracle実験室監修  『Oracleアーキテクチャ鳥瞰図』 PDF  (Oracleのアーキテクチャを一目で俯瞰できるイラスト)  


Home実験室 − No.0029

© 2011-2011   Amateur Laboratory of ORACLE
inserted by FC2 system