第五に、限られたクエリおよびソート表示
5.1、限られたお問い合わせ
お問い合わせの5.1.1限られた理解
例えば:テーブルには、データの100ワット、一度行って、文の「テーブルSELECT * FROM」を持っている場合は、データのテーブル行のすべてのレコードが画面に表示されます、閲覧しやすいでもない、またそう、クラッシュの問題を引き起こす可能性がありますこの時点では、クエリの結果をフィルタリングする必要がある、唯一の彼らの有用なデータをすることができ選び、それがクエリWHEREフィルタ基準により指定することができます。
データの表示一緒に非常に多くの作品は確かに閲覧されていません。また、表示されたデータの過剰な量の場合、クラッシュの問題が発生することも可能です。そのため、以下の最初の照会及び問題が存在するかを表示するデータの量を観察しました。
すでにサンプル・データベース・プログラムをインストールし、インストール時にOracleデータベースは、それが今CDB PDBへのコンテナから切り替える必要があります。
例:開かNOLOG SQLPLUSで(コマンドライン端末)
sqlplus /nolog
例:使用sysの管理者ログイン
CONN sys/chagne_on_install AS SYSDBA;
例:PDBへの切り替え
ALTER SESSION SET CONTAINER=pdbmldn;
例:オープンPDB
ALTER DATABASE pdbmldn OPEN;
例:ビューのユーザーのデータテーブルの内容のSH
SELECT COUNT(*) FROM sh.sales;
今9ワット複数のレコードが存在し、このテーブルは、直接的であれば次の命令を発行します。
SELECT * FROM sh.sales;
今、結果は常に変化してきた、あなたが停止することは、Ctrl + Cを表示することはできませんが表示されます。だから今、大量のデータ、直接、すべてのデータにアクセスすることはできませんので、使用することは不可能すべてのデータ行が表示されます。多くの場合、多くの場合、必要なデータについてスクリーニングする必要がある、とスクリーニング機能は、クエリを定義しています。
今、ユーザーが接続C ##スコット:
conn c##scott/tiger;
5.1.2定義された構文:
SELECT [DISTINCT] * | 列名称 [AS] [列别名],列名称 [AS] [列别名],...
FROM 表名称[表别名]
[WHERE 条件( s )];
この構文の中では、WHERE句の前の構文より1つ多いですが、あなたはWHERE句でフィルタ条件のシリーズを設定することができます。これらの条件は、あなたが動作条件の複数の間の論理接続を使用することができ、複数を提供することができます。
3つの論理演算子があります。
- 及び(AND):複数の条件がtrueを返すを満たされたときに、複数の条件を接続する、結果がFALSEであるという条件を満たしていません。
- または(OR):限りTRUEが返されるように、結果がTRUEである複数の条件がFALSEが返された場合、結果がFALSEの条件のうち、複数の条件を連結します。
- ノン(NOT):否定演算、TRUE FALSEを変更することができ、FALSEはTRUEになります。
ロジック真理値表:
NO。 | 条件X | 条件のy | XとY | XまたはY | NOT X |
---|---|---|---|---|---|
1 | TRUE | TRUE | TRUE | TRUE | FALSE |
2 | TRUE | ヌル | ヌル | TRUE | FALSE |
3 | TRUE | FALSE | FALSE | TRUE | FALSE |
4 | ヌル | TRUE | ヌル | TRUE | ヌル |
5 | ヌル | ヌル | ヌル | ヌル | ヌル |
6 | ヌル | FALSE | FALSE | ヌル | ヌル |
7 | FALSE | TRUE | FALSE | TRUE | TRUE |
8 | FALSE | ヌル | FALSE | ヌル | TRUE |
9 | FALSE | FALSE | FALSE | TRUE | TRUE |
例**:すべての従業員情報1500の統計よりも高い基本給
この場合には、あなたが条件を設定するためにWHERE句を使用する必要がありますので、今、条件が必要と問い合わせがありました。
SELECT * FROM emp WHERE sal>1500;
あなたは今ではない、すべてのデータは、番組のデータ部分のみを示していることを見つけることができ、そしてこれは、条件が満たされているデータの一部です。
今すぐSQL構文のために、それは3節を持つことになります。
最初のステップ:FROM句の実装、データのソースを制御します
ステップ2:WHERE句の実装、データ修飾子ラインをフィルタリングします
第三段階:SELECT句が実行され、データ列を表示するように決定されます
5.1.3データ定義されたクエリ
以前に「>」を使用して標準SQLには関係演算子には、事業者間の多くを定義しています。
一般的に定義された演算子:
NO | 演算子 | シンボル | 説明 |
---|---|---|---|
1 | 関係演算子 | >、<、> =、<=、=、!=、<> | 又は二:!に等しくない=、サイズ比較によって同等<> |
2 | 判決はnull | 、NULL IS NULLではありません | 列の内容がヌルであるかどうかを決定します |
3 | 論理演算子 | AND、OR、NOT | そして、複数の条件が同時に満たされなければならない、OR条件を満足する必要があり、NOTすなわち、否定条件を表しのみ表し:真が偽となり、falseが真になります |
4 | 範囲クエリ | 最小最大BETWEEN | 指定した範囲で見上げて、検索結果は次のとおりです。「ミン<=コンテンツ<=最大値」 |
5 | 範囲クエリ | に | あなたは、INで範囲クエリを指定することができます |
6 | ファジィクエリ | LIKE | 指定したフィールドのあいまいクエリすることができ |
5.1.3.1関係演算子
関係演算子は、サイズ、比較的対等な関係を決定することです。
例:2000未満の情報に等しい全従業員の基本給のすべての要件をチェックしてください
SELECT *
FORM emp
WHERE sal<=2000;
例:SMITHは、最低賃金は、前のクエリの結果によると、今SMITHの詳細情報を得ることを期待できることがわかりました。
SELECT *
FORM emp
WHERE ename='SMITH';
例:従業員情報のすべての事務員(店員に)チェックアウト
SELECT *
FORM emp
WHERE job='CLERK';
関係演算子は、文字データを決める使用している場合しかし、例の主な問題を記述するようにしてください。Oracleは大文字と小文字が区別されているため。
例:エラーコード
SELECT *
FORM emp
WHERE job='clerk'; // 不会有结果返回
例:他の位置のコントラストに、すべての情報の事務員、および従業員を取得した後、決定が今して、すべての従業員情報をチェックアウトするには、店員ではありません。
今では事務の仕事ではありません、そして、確かにそれはそのシンボルの使用(<> ,! =)を意味するものではありません。
実現:
SELECT *
FORM emp
WHERE job<>'CLERK';
2を達成。
SELECT *
FORM emp
WHERE job!='CLERK';
例:3000 1500内のすべての情報を従業員の給与の範囲(両方含まれる)をチェックしてください
この判断は、今の二つの条件であるが、これらの2つの条件が確かに満たすために必要がある場合、条件付きの接続を使用します
SELECT *
FORM emp
WHERE sal>=1500 AND sal<=3000;
例:検索ジョブの販売、およびすべての従業員情報1200のための基本的な賃金よりも高いです
SELECT *
FORM emp
WHERE job='SALESMAN' AND sal>1200;
例:10部門のマネージャまたは20部門のセールスマンで情報をチェックしてください
SELECT *
FORM emp
WHERE (deptno=10 AND job='MANAGER') OR (deptno=20 AND job='CLERK');
例:クエリは事務員や従業員情報2000のすべての基本的な給与よりも大きくありません
実現:基本的な実現
SELECT *
FORM emp
WHERE job!='CLERK' AND sal>2000;
SELECT *
FORM emp
WHERE job<>'CLERK' AND sal>2000;
2を達成:条件を否定しないで使用します
SELECT *
FORM emp
WHERE NOT(job='CLERK' OR sal<=2000);
5.1.3.2範囲クエリ
例:BETWEEN使用... AND ...クエリ演算子は、3000(包括的)(を含む)1500の範囲内のすべての従業員情報を支払います
SELECT *
FORM emp
WHERE sal BETWEEN 1500 AND 3000;
例:1981年に雇われたすべての情報の従業員をチェックアウト
SELECT *
FORM emp
WHERE hiredate BETWEEN '01-1月-81' AND '31-12月-1981';
実際、ここでのデータ列と操作の日付の間で変換する機能を実現します。
ヌル判断を5.1.3.3:
コンテンツがnullであるかどうかを確認します、NULL IS NULLではありません
- 構文:
- これは、NULLを決定:フィールド|値はnullです。
- ないNULL決定されます。フィールド|値がNULLではありません。(NOTフィールドは|値がnull;)
例:使用= NULLは、比較実施しました
SELECT *
FORM emp
WHERE comm=null AND empno=7369;
結果は、使用不可として= NULL決意を返すデータがないことを示しています。
例:すべての従業員に関する完全な情報をチェックアウトするには、手数料を受け取ります
欧州委員会の場は、手数料の一部にコミッションを受け取るという概念がnullではない、COMMです。
完全な直接使用NULLではありません:達成
SELECT *
FORM emp
WHERE comm IS NOT NULL;
使用がNULLで、完了していないを否定:2達成
SELECT *
FORM emp
WHERE NOT comm IS NULL;
例:コミッションを受けていないすべての従業員に関する完全な情報をチェックしてください
SELECT *
FORM emp
WHERE comm IS NULL;
例:リストボーナスを受け取っていないすべての従業員が、また、これらの従業員のすべての従業員情報の基本給は2000以上である必要があり
SELECT *
FORM emp
WHERE comm IS NULL AND sal > 2000;
例:コミッションを受け取るか、100人の未満の従業員のコミッションを受けていない見つけます
SELECT *
FORM emp
WHERE comm IS NULL OR comm < 100;
例:異なるジョブコミッションのスタッフを見つけます
それが今の仕事を探しているので、重複し、重複したデータは、DISTINCTの使用を排除するためになされなければならない可能性が高いです。
SELECT DISTINCT job
FORM emp
WHERE comm IS NOT NULL;
5.1.3.4リスト範囲検索:では、NOT IN
いわゆる範囲のリストは、この値は、それらが条件を満たしていることを満足している、固定された基準値のユーザの数を指します。
- 構文:
- データの指定された範囲内:フィールド|(値、値、...)の値。
- データは、指定された範囲内ではありません:フィールド| NOT IN値(値、値、...);
- データの指定された範囲内:フィールド|(値、値、...)の値。
例:従業員情報の従業員番号をチェックしてください7369,7788,7566
そのような操作の面、このときの決意がIN演算子を使用しないとORと接続条件の複数を使用できるかどうか。
SELECT *
FORM emp
WHERE empno = 7369 OR empno = 7788 OR empno = 7566;
INは優れた以下のコードを使用して実装しました
SELECT *
FORM emp
WHERE empno IN (7369,7788,7566);
例:加えて、従業員情報の今すぐお問い合わせ7369,7788,7566
SELECT *
FORM emp
WHERE empno NOT IN (7369,7788,7566);
しかし、注意して操作でNULLの問題を一つのことを、NOTを使用している場合:
- 中でIN演算子の決意範囲データはNULLが含まれている場合、それは、最終的なクエリの結果には影響しません。
SELECT * FORM emp WHERE empno IN (7369,7788,null);
- しかし、NOT IN使用している場合は、直接の結果を表示するためのデータが存在しないということで、NULLがあります。
SELECT * FORM emp WHERE empno NOT IN (7369,7788,null);
INまたはのみ使用することには、オブジェクトの一部を示していないデータがNULLではないことができ、およびNOT条件はnullを満たしている今がある場合、それは、すべてのデータがクエリであることを意味します。このように、あまりにも多くのプログラムがクラッシュし、取得したデータの量を引き起こすことが可能です。
だから、NOT INの制限を課しに、nullを持っているこれは死んで制限され、データが存在しないヌルすることはできません。
5.1.3.4ファジィクエリ:LIKE、NOT LIKE
- 構文:
- ミートあいまいクエリ:フィールド| LIKE一致マーク
- 値が一致マークを好まない|フィールド:ファジークエリを満たしていません
- あなたは今、列ファジークエリを照会したい場合は、LIKE句に2つのワイルドカードがあり、LIKEキーワードであいまい検索することができ、完了するために、LIKE句を使用することができます。
- パーセント(%):中国は、二パーセント(%%)を使用する場合、文字は、任意のタイプと長さを一致させることができます
- 下線(_)は:任意の1文字に一致し、文字長の発現を制限するために使用されています
例:S情報の初めに全従業員に基づいて従業員の名前を照会
S含有量の証拠がどのようなデータであってもよいした後、それは0、1ビット以上であってもよいです。
SELECT *
FORM emp
WHERE ename LIKE 'S%';
例:第二の手紙の従業員の名前をチェックアウトするすべての情報は、従業員Mです
今だけ2番目の文字が、最初の文字は「_。」いずれかを証明するため、使用することができます
SELECT *
FORM emp
WHERE ename LIKE '_M%';
例:従業員情報を従業員名をチェックアウトの任意の位置に文字Fが含まれています
今では終わりか途中で可能性があり、始まりであり、私たちは、%を使用し、その後、問題の前と後の両方を考慮に入れる必要があります。
SELECT *
FORM emp
WHERE ename LIKE '%F%';
例:従業員の名前のクエリの長さが6以上より6従業員情報です。
名前の長さは、確かに6人以上の場合、それはプラス一パーセント、「_」6を書き込むことができ、6です。
SELECT *
FORM emp
WHERE ename LIKE '______%';
例:従業員のすべての従業員の基本給与に含まれてチェックアウトすると、1または81年でを雇うことです
文字データの操作に向けられている、との間でLIKE面で前にすべてのクエリのためには、デジタルであるか、またはすることができ、日付型を使用します。
SELECT *
FORM emp
WHERE sal LIKE '%1%' OR hiredate LIKE (%81%);
- しかし、時にあいまいクエリキーワードセットを設定しない場合、それはのようなすべてのクエリを、意味、ことを思い出すことする必要はほとんどありません。
SELECT *
FORM emp
WHERE sal LIKE '%%'
OR hiredate LIKE (%%)
OR ename LIKE '%%'
OR job LIKE '%%';
結果は、すべてのデータを示しました。
例:部門20 10ですべての管理者をすべての事務員を検索し、部長は2000年以上の事務員の給与が、すべての従業員の詳細な記録もないではない、と名の中でこれらの従業員が文字Sまたは文字K.が含まれている必要があります
ここで、次の条件に存在します。
10人の部門のマネージャー:条件
第二の条件:20部門の事務員
三つの条件:ないマネージャーと事務員が、給与は2000以上であり、
条件IV:上記のすべての条件が満たされた後再濾過は、文字が文字SやKが含まれています
SELECT *
FORM emp
WHERE ((deptno = 10 AND job = 'MANAGER')
OR (deptno = 20 AND job = 'CLERK')
OR (job NOT IN (MANAGER,CLERK) AND sal >= 2000))
AND (ename LIKE '%S% OR ename LIKE '%K%');
要約:
- 次ソートを定義するWHERE句、選択されたコントロールのデータ。
- メインの定義クエリ演算子:関係演算子、BETWEEN ... AND、IN、LIKE、NULL IS
5.2注文の表示
5.2.1並べ替えを知っています
従来のデータは、プライマリキーの順序の設定に応じて照会します。あなたは今ソートする指定された列を操作したい場合は、それはORDER BY句を制御することにより、行わなければなりません。
5.2.2ソート文法
SELECT [DISTINCT] * |列名称 [AS] 列别名,列名称 [AS] 列别名
FORM 表名称 表别名
[WHERE 条件(S)]
[ORDER BY 排序的字段|列索引序号 ASC | DESC,
排序的字段2 ASC | DESC ...]...;
- あなたはORDER BY句でソートするフィールドを指定することができ、そのフィールドは、2種のモードがあります。
- ASC:ASC、デフォルト
- 降順:DESCは、次のように記述する必要があります。
- SELECT、ORDER BY、以来ORDER BY、FROM:すべての句の中で、我々は、ORDER BY句は、クエリの最後の行で、最後の実行、その実行順序を覚えておく必要があります後に実行するSELECT、それはORDER BY句は、SELECT句セットにエイリアスを使用できることを意味します。
例:クエリと降順でソートされた従業員の基本的な賃金に関する完全な情報
SELECT *
FORM emp
ORDER BY sal DESC;
例:基本的な賃金に基づいて、クエリの要件を変更する前にローからハイにソートします
実現:
SELECT *
FORM emp
ORDER BY sal;
2を達成。
SELECT *
FORM emp
ORDER BY sal ASC;
例:すべての詳細店員(店員に)チェックアウト、および基本的な給与に応じてローからハイへソート
もはやソートすべてのデータ用で、スクリーニングの完了にはWHERE句を使用し、その後、データ上で実行する必要があります。
SELECT *
FORM emp
WHERE job = 'CLERK'
ORDER BY sal;
例:賃金が朝から晩まで順番に従って、雇用の日付で同じソートされている場合は、降順での基本的な給与に基づいて必要なすべての従業員情報の照会
SAL(DESC)、入社日(ASC):今すぐソートソートフィールドは2に設定する必要があります
SELECT *
FORM emp
ORDER BY sal DESC,hiredate ASC;
結果は少し問題が、このプログラムの構文に問題が、問題はデータにありません表示されます。結果は、データの後処理に今あるので、それは通常のデータを観察することであるならば、あなたは、元のスコット・データを見つけ、PDBデータベースに切り替えることができます。
方法:研究のDBA_Connectionで次の2行のコードの最初の実装後
ALTER SESSION SET CONTAINER = pdbmldn;
ALTER DATABASE pdbmldn OPEN;
SELECT *
FROM scott.emp
ORDER BY sal DESC ,hiredate ASC;
- しかし、順序のために、シリアル番号の外にフィールドを使用することに加えて提供することができるが、これは推奨されません。
SELECT empno, ename, sal, job
FORM emp
ORDER BY sal DESC;
SELECT empno, ename, sal, job
FORM emp
ORDER BY 3 DESC;
上記の2つのステートメントは便利ではない数字を使用していない、同じ効果を実行しますが、個人的にそれを書いている時点で、フィールド上の書き込みの並べ替えをお勧めします、と思います。
概要
- SQL構文:
SELECTL [DISTINCT] * |列 [AS][别名], 列 [AS][别名],... FROM 表名称 [别名] [WHERE 限定条件(s)] [ORDER BY 排序字段 [ASC|DESC][,排序字段[ASC|DESC]...]];
- クエリ結果をソートするORDER BY句、ORDER BY句は、すべての最後のクエリ文で記述する必要があります。
説明:学習教材は、戦闘古典的な仕上げのOracle開発LiXingHuaに基づいています