#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 サイトの他の関連記事を参照してください。

SQLとデータベースの関係は密接に統合されており、SQLはデータベースを管理および操作するためのツールです。 1.SQLは、データ定義、操作、クエリ、および制御に使用される宣言言語です。 2。データベースエンジンはSQLステートメントを解析し、クエリプランを実行します。 3.基本的な使用には、テーブルの作成、データの挿入、クエリが含まれます。 4.高度な使用には、複雑なクエリとサブ征服が含まれます。 5.一般的なエラーには、構文、ロジック、パフォーマンスの問題が含まれます。これは、構文チェックおよび説明コマンドを介してデバッグできます。 6.最適化手法には、インデックスの使用、フルテーブルスキャンの回避、クエリの最適化が含まれます。

SQLはリレーショナルデータベースを管理するための標準言語であり、MySQLはSQLを使用するデータベース管理システムです。 SQLは、CRUD操作を含むデータベースと対話する方法を定義しますが、MySQLはSQL標準を実装し、ストアドプロシージャやトリガーなどの追加機能を提供します。

データ管理におけるSQLの役割は、クエリ、挿入、更新、削除を介してデータを効率的に処理および分析することです。 1.SQLは、ユーザーが構造化された方法でデータベースと通信できるようにする宣言言語です。 2。使用例には、基本的な選択クエリと高度な参加操作が含まれます。 3.句の忘却や誤用の結合などの一般的なエラーは、説明コマンドを介してデバッグできます。 4。パフォーマンスの最適化には、インデックスの使用と、コードの読みやすさや保守性などのベストプラクティスに従うことが含まれます。

SQLは、リレーショナルデータベースを管理および操作するために使用される言語です。 1.テーブルの作成:CreateTableUsersなどのCreateTableステートメントを使用します(IdintPrimaryKey、NameVarchar(100)、EmailVarchar(100)); 2。データを挿入、更新、削除:InsertInto、更新、incertintintousers(id、name、email)values(1、 'johndoe'、 'john@example.com')などのステートメントを削除します。 3。クエリデータ:Selecなどの選択ステートメントを使用します

SQLとMySQLの関係は次のとおりです。SQLはデータベースの管理と操作に使用される言語であり、MySQLはSQLをサポートするデータベース管理システムです。 1.SQLは、CRUD操作とデータの高度なクエリを許可します。 2.MYSQLは、パフォーマンスとセキュリティを改善するためのインデックス、トランザクション、ロックメカニズムを提供します。 3. MySQLのパフォーマンスを最適化するには、クエリの最適化、データベースの設計、監視とメンテナンスに注意が必要です。

SQLはデータベース管理とデータ操作に使用され、そのコア機能にはCRUD操作、複雑なクエリ、最適化戦略が含まれます。 1)CRUD操作:INSERTINTOを使用してデータを作成し、データの読み取りを選択し、データの更新を更新し、削除データを削除します。 2)複雑なクエリ:Groupbyを介して複雑なデータを処理し、条項を備えています。 3)最適化戦略:インデックスを使用し、完全なテーブルスキャンを避け、参加操作とページングのクエリを最適化してパフォーマンスを向上させます。

SQLは、構文が単純で、機能が強力であり、データベースシステムで広く使用されているため、初心者に適しています。 1.SQLは、リレーショナルデータベースを管理し、テーブルを介してデータを整理するために使用されます。 2。基本操作には、データの作成、挿入、クエリ、更新、削除が含まれます。 3.結合、サブクエリ、ウィンドウ関数などの高度な使用法により、データ分析機能が強化されます。 4.一般的なエラーには、検査と最適化を通じて解決できる構文、ロジック、パフォーマンスの問題が含まれます。 5.パフォーマンス最適化の提案には、インデックスの使用、Select*の回避、説明の使用を使用してクエリの分析、データベースの正規化、コードの読み取り可能性の向上が含まれます。

実際のアプリケーションでは、SQLは主にデータクエリと分析、データ統合とレポート、データのクリーニングと前処理、高度な使用と最適化、複雑なクエリの処理と一般的なエラーの回避に使用されます。 1)データのクエリと分析を使用して、最も販売製品を見つけることができます。 2)データの統合とレポートは、参加操作を通じて顧客の購入レポートを生成します。 3)データのクリーニングと前処理は、異常な年齢記録を削除できます。 4)高度な使用と最適化には、ウィンドウ関数の使用とインデックスの作成が含まれます。 5)CTEと結合を使用して、SQLインジェクションなどの一般的なエラーを回避するために複雑なクエリを処理できます。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

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

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ホットトピック









