#SQLこのコラムでは、SQL を完全に理解するための 10 のステップを紹介します
推奨(無料): SQL
多くのプログラマーは SQL を災難だと考えています。 SQL は、私たちがよく知っているコマンドライン言語、オブジェクト指向プログラミング言語、さらには関数型言語とはまったく異なる動作をする数少ない宣言型言語の 1 つです (ただし、SQL 言語も関数型言語であると考える人もいます) )。 私たちは毎日 SQL を作成し、それをオープンソース ソフトウェア jOOQ に適用します。そこで、まだ SQL について頭を悩ませている友人たちに SQL の素晴らしさを紹介したいと思い、この記事は特に次の読者向けに書きました:1. 仕事で SQL を使用しますが、SQL は使用しません。それについてあまり知らない、完全に理解していない人々。
2. SQL の使用に習熟しているが、その文法ロジックを理解していない人。
3. 他の人に SQL を教えたい人。
この記事では SELECT 文型に焦点を当て、他の DML (Data Manipulation Language データ操作言語コマンド) については別の記事で紹介します。SQL を完全に理解するための 10 の簡単なステップ
1. SQL は宣言型言語です
まず、この概念を維持してください。念頭に置いているのは「ステートメント」。 SQL 言語は、結果を取得する方法をコンピュータに指示するのではなく、生データからどのような結果を取得したいかをコンピュータに宣言する例です。これは素晴らしいことではないでしょうか? (翻訳者注: 簡単に言うと、SQL 言語は結果セットのプロパティを宣言します。コンピュータは、従来のプログラミングの考え方ではなく、SQL が宣言した内容に基づいて、データベースから宣言を満たすデータを選択します。コンピューターに操作方法を指示するため。)SELECT first_name, last_name FROM employees WHERE salary > 100000上の例は理解しやすいです。これらの従業員の記録がどこから来たのかは気にしません。必要なのは、高給取りの従業員のデータだけです (翻訳者注) : 給与>100000) 。
これをどこで知りましたか?
SQL 言語がそれほど単純であるなら、人々が「SQL を聞くと青ざめる」のはなぜでしょうか?その主な理由は、私たちが無意識のうちに命令型プログラミングの考え方に従って問題を考えているからです。これは次のようなものです。「コンピュータ、最初にこのステップを実行し、次にそのステップを実行します。ただし、その前に、条件 A と条件 B が満たされているかどうかを確認してください。」たとえば、変数を使用してパラメータを渡すこと、ループ ステートメントを使用すること、反復処理、関数の呼び出しなどはすべて、この命令型プログラミングの思考習慣です。2. SQL 構文は構文上の順序で実行されない
SQL ステートメントには、ほとんどの人を混乱させる特徴があります。それは、SQL ステートメントの実行順序です。ステートメントの文法的順序と矛盾しています。 SQL ステートメントの構文シーケンスは次のとおりです:- SELECT[DISTINCT]
- FROM
- WHERE
- GROUP BY
- HAVING
- UNION
- ORDER BY
- FROM
- WHERE
- GROUP BY
- HAVING
- SELECT
- DISTINCT
- UNION
- ORDER BY
SELECT A.x + A.y AS z FROM A WHERE z = 10 -- z 在此处不可用,因为SELECT是最后执行的语句!エイリアス z を再利用したい場合、2 つのオプションがあります。 z:
SELECT A.x + A.y AS z FROM A WHERE (A.x + A.y) = 10... で表される式を書き直すか、派生テーブル、共通データ式、またはビューを使用してエイリアスの再利用を回避してください。以下の例を参照してください。 3. 構文でも実行順序でも、UNION は常に ORDER BY より前にランクされます。多くの人は、すべての UNION セグメントが ORDER BY を使用してソートできると考えていますが、SQL 言語標準と各データベースの SQL 実装の違いによると、これは真実ではありません。一部のデータベースでは、SQL ステートメントでサブクエリまたは派生テーブルを並べ替えることができますが、これは、UNION 操作後も並べ替えが並べ替えられた順序で維持されることを意味するものではありません。 注: すべてのデータベースが SQL ステートメントに同じ解析方法を使用するわけではありません。たとえば、MySQL、PostgreSQL、SQLite は、上記の 2 番目の点で述べたように動作しません。
私たちは何を学んだのでしょうか?
既然并不是所有的数据库都按照上述方式执行 SQL 预计,那我们的收获是什么?我们的收获是永远要记得:SQL 语句的语法顺序和其执行顺序并不一致,这样我们就能避免一般性的错误。如果你能记住 SQL 语句语法顺序和执行顺序的差异,你就能很容易的理解一些很常见的 SQL 问题。
当然,如果一种语言被设计成语法顺序直接反应其语句的执行顺序,那么这种语言对程序员是十分友好的,这种编程语言层面的设计理念已经被微软应用到了 LINQ 语言中。
3、 SQL 语言的核心是对表的引用(table references)
由于 SQL 语句语法顺序和执行顺序的不同,很多同学会认为SELECT 中的字段信息是 SQL 语句的核心。其实真正的核心在于对表的引用。
根据 SQL 标准,FROM 语句被定义为:
<from> ::= FROM <table> [ { <comma> <table> }... ]<p>FROM 语句的“输出”是一张联合表,来自于所有引用的表在某一维度上的联合。我们们慢慢来分析:</p> <pre class="brush:php;toolbar:false">FROM a, b
上面这句 FROM 语句的输出是一张联合表,联合了表 a 和表 b 。如果 a 表有三个字段, b 表有 5 个字段,那么这个“输出表”就有 8 ( =5+3)个字段。
这个联合表里的数据是 ab,即 a 和 b 的笛卡尔积。换句话说,也就是 a 表中的每一条数据都要跟 b 表中的每一条数据配对。如果 a 表有3 条数据, b 表有 5 条数据,那么联合表就会有 15 ( =53)条数据。
FROM 输出的结果被 WHERE 语句筛选后要经过 GROUP BY 语句处理,从而形成新的输出结果。我们后面还会再讨论这方面问题。
如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个 SQL 语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。
我们学到了什么?
思考问题的时候从表的角度来思考问题提,这样很容易理解数据如何在 SQL 语句的“流水线”上进行了什么样的变动。
4、 灵活引用表能使 SQL 语句变得更强大
灵活引用表能使 SQL 语句变得更强大。一个简单的例子就是 JOIN 的使用。严格的说 JOIN 语句并非是 SELECT 中的一部分,而是一种特殊的表引用语句。SQL 语言标准中表的连接定义如下:
以上がSQLを完全に理解するための10のステップを紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

MySQLは、標準のSQL関数と拡張機能を提供するオープンソースリレーショナルデータベース管理システムです。 1)MySQLは、制限句の作成、挿入、更新、削除、拡張などの標準のSQL操作をサポートしています。 2)InnodbやMyisamなどのストレージエンジンを使用しています。これらは、さまざまなシナリオに適しています。 3)ユーザーは、テーブルの作成、データの挿入、ストアドプロシージャの使用など、高度な機能を介してMySQLを効率的に使用できます。

sqlmakesdatamanagemagementisibletoallbyproviding asimpleyetpowerfultoolset andmanagingdatabases.1)itworks withersortifyify what what what what what what what what whatysortsopecifyifyを許可します

SQLインデックスは、巧妙なデザインを通じてクエリパフォーマンスを大幅に改善できます。 1. Bツリー、ハッシュ、フルテキストインデックスなどの適切なインデックスタイプを選択します。 2。複合インデックスを使用して、マルチフィールドクエリを最適化します。 3.オーバーインデックスを避けて、データメンテナンスのオーバーヘッドを減らします。 4.不要なインデックスの再構築や削除など、定期的にインデックスを維持します。

SQLの制約を削除するには、次の手順を実行します。削除する制約名を特定します。 ALTER TABLEステートメントを使用してください:Table Table Name Drop Constraint Constraint Nameを変更します。削除を確認します。

SQLトリガーは、特定のイベントが指定されたテーブルで実行されたときに特定のアクションを自動的に実行するデータベースオブジェクトです。 SQLトリガーをセットアップするには、トリガー名、テーブル名、イベントタイプ、トリガーコードを含むCreate Triggerステートメントを使用できます。トリガーコードは、ASキーワードを使用して定義され、SQLまたはPL/SQLステートメントまたはブロックが含まれます。トリガー条件を指定することにより、Where句を使用して、トリガーの実行範囲を制限できます。トリガー操作は、インサート、更新、または削除ステートメントを使用してトリガーコードで実行できます。新しいキーワードと古いキーワードを使用して、トリガーコードの影響を受けるキーワードを参照できます。

インデックス作成は、データ列を並べ替えてデータ検索を加速するデータ構造です。 SQLクエリにインデックスを追加する手順は次のとおりです。インデックス化する必要がある列を決定します。適切なインデックスタイプ(Bツリー、ハッシュ、またはビットマップ)を選択します。 Create Indexコマンドを使用して、インデックスを作成します。インデックスを定期的に再構築または再編成して、その効率を維持します。インデックスの追加の利点には、クエリパフォーマンスの改善、I/O操作の削減、最適化された並べ替えとフィルタリング、および並行性の改善が含まれます。クエリが特定の列を使用することが多い場合、ソートまたはグループ化する必要がある大量のデータを返し、大きい複数のテーブルまたはデータベーステーブルが含まれます。インデックスの追加を検討する必要があります。

Ifelseステートメントは、条件付き評価結果に基づいて異なる値を返す条件付きステートメントです。その構文構造は次のとおりです。if(条件)then return_value_if_condition_is_true elsen return_value_if_condition_is_false end if;。

SQLデータベースエラーを表示する方法は次のとおりです。1。エラーメッセージを直接表示します。 2。エラーを表示し、警告コマンドを表示します。 3.エラーログにアクセスします。 4.エラーコードを使用して、エラーの原因を見つけます。 5.データベース接続とクエリ構文を確認します。 6.デバッグツールを使用します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1
使いやすく無料のコードエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 中国語版
中国語版、とても使いやすい
