例の SQL 言語。 SQL SELECT およびデータ選択クエリ
構文:
* どこ フィールド1— カンマで区切られた選択フィールド。すべてのフィールドを * で指定することもできます。 テーブル— データを抽出するテーブルの名前。 条件— サンプリング条件; フィールド2— 並べ替えの基準となるカンマで区切られたフィールド。 カウント— アップロードする行数。
* データを取得するために角括弧内のクエリは必要ありません。
select を使用する簡単な例
1. 通常のデータサンプリング:
> ユーザーから * を選択
2. 2 つのテーブルを結合したデータ サンプリング (JOIN):
SELECT u.name, r.* FROM users u JOIN users_rights r ON r.user_id=u.id
*V この例ではデータはテーブルがマージされてサンプリングされています ユーザーそして ユーザーの権利。 それらはフィールドによって結合されています ユーザーID(users_rights テーブル内) および ID(ユーザー)。 名前フィールドは最初のテーブルから取得され、すべてのフィールドは 2 番目のテーブルから取得されます。
3. 時間や日付の間隔を指定したサンプリング
a) 開始点と特定の時間間隔がわかっている:
*のデータ 最後の時間(分野 日付).
b) 開始日と終了日がわかっている場合:
25.10.2017 そして 25.11.2017 .
c) 開始日と終了日 + 時間がわかっている:
* の間のデータを選択します 2018/03/25 0時間15分そして 2018/04/25 15時間33分9秒.
d) 特定の月と年のデータを抽出します。
* フィールド内のデータを抽出します 日付の価値観があります 2018年4月今年の。
4. 最大値、最小値、平均値のサンプリング:
> 国から最大(面積)、最小(面積)、平均(面積)を選択します
* 最大 — 最大値; 分- 最小限。 平均- 平均。
5. 文字列の長さを使用する:
* このリクエスト名前の長さが 5 文字であるすべてのユーザーを表示する必要があります。
より複雑なクエリ、またはほとんど使用されないクエリの例
1. 選択したデータを 1 行にグループ化して連結 (GROUP_CONCAT):
*表より ユーザーフィールドデータが取得される ID、それらはすべて 1 行に配置され、値は分離されています カンマ.
2. 2 つ以上のフィールドによるデータのグループ化:
> SELECT * FROM users GROUP BY CONCAT(タイトル、「::」、誕生)
* 要約すると、この例では、users テーブルからデータをアップロードし、フィールドごとにグループ化します。 タイトルそして 誕生。 グループ化する前に、フィールドを区切り文字で 1 行に結合します。 :: .
3. 2 つのテーブルの結果を結合します (UNION):
> (ユーザーからタイプとして id、fio、アドレス、「ユーザー」を選択)
連合
(顧客から ID、fio、アドレス、タイプとして「顧客」を選択)
* この例では、データはテーブルからサンプリングされます ユーザーそして 顧客.
4. 時間ごとにグループ化された平均のサンプル:
SELECT avg(気温), DATE_FORMAT(datetimeupdate, "%Y-%m-%d %H") ashour_datetime FROM アーカイブ GROUP BY DATE_FORMAT(datetimeupdate, "%Y-%m-%d %H")
*ここではフィールドの平均値を抽出します 温度テーブルから アーカイブフィールドごとにグループ化します 日時更新(1時間ごとの時間分割あり)。
入れる
構文 1:
> に挿入
誕生日 | ||||
ブルミラ |
テーブルの各行には、一意の子猫の番号、品種、名前、生年月日、色が含まれています。 次に、この表のデータに基づいて、Select 演算子 (SQL) がどのように機能するかを見ていきます。
テーブルからデータを取得する方法
上で説明したように、サンプルについては、 必要な情報表からのものを使用する必要があります キーワード.
Select キーワードの後に、出力する列を指定します。 必要な列をカンマで区切ってリストを作成すると、全体の構造は次のようになります。
上記のクエリの結果は、Cats テーブル全体であり、前のセクションの最後に含まれていたとおりに表示されます。
多くの人は、SQL Select の実行結果を文字列に配置する方法に興味を持っています。 ほとんどの場合、これは、別々の列にある人の姓、名、および父称を組み合わせる必要がある場合に必要になります。
私たちの場合は、Cats テーブルの猫の品種と色を組み合わせます。 微妙な違いは、文字列の連結に異なる DBMS が使用されるということです。 さまざまなシンボル。 単純なプラス (+) である場合もあれば、二重スラッシュ (||) またはアンパサンド記号 (&) である場合もあり、Concat オペランドも使用される場合があります。 したがって、マージする前に、作業している特定の DBMS のアノテーションを読む必要があります。
冗長データの削除
Distinct は、完全に同一の行の重複を選択結果から除外できる選択 (SQL) 関数です。
たとえば、テーブルに含まれる猫の品種を調べたいとします。 単純なクエリを使用すると、次のようになります。
ご覧のとおり、ボブテイル品種は 2 回複製されています。 Distinct 引数を使用すると重複が排除されます。クエリを追加するだけです。
異なる品種を選択してください |
リクエストの明確化
実際には、次の形式でデータを出力するクエリはほとんどありません。 フルセットテーブルの行。 Select (SQL) のどの句で、必要な行のみを選択するための基準を設定できるかを考えてみましょう。
どこにそのような条項があるのか。 この文では述語が使用されています - 条件式、true または false の出力が生成されます。 Select 演算子は、条件式が True と評価されるデータのみをテーブルから取得します。
簡単なサンプルは、この設計を理解するのに役立ちます。 黒猫についてすべてを知りたいとします。
論理演算子 And、Or、Not を使用して条件を結合することもできます。
オファーグループ化
Select (SQL) で使用される Group by 句を使用すると、特定の列 (複数可) の値によってクエリをグループ化し、それらに集計関数を適用できます。
集計関数には次のものが含まれます。
- カウント - クエリによって選択された行の数を計算します。
- Sum は、選択されたすべての列値の算術合計です。
- Min - 選択した列の値の最小値を表示します。
- Max - それぞれ、選択した列値の最大値。
- Avg - 平均値。
この提案がどのように機能するかを理解する最も簡単な方法は、 具体例。 各品種の子猫が何匹いるかを知りたいとします。 これを行うには、次の簡単なクエリを作成する必要があります。
ご覧のとおり、うちにはボブテイルの子猫が2匹いますが、残りは1匹だけです。 実際には、そのようなリクエストがあれば、ブリーダーは私たちの表に基づいて、どの品種の猫が購入者の間で需要があり、どの品種がそうでないかを理解できます。
実際のテーブルには膨大な数のレコードがあるため、クエリをさらに絞り込んで、たとえば 10 匹以下の子猫の品種だけを表示することが必要になる場合があります。 グループを絞り込んだりフィルタリングするには、Having 句を使用します。 それはあなたが破棄することを可能にします 特定のグループ、Where 句の破棄と同様です。 別々の行。 条件は集計関数で指定します。 リクエストを追加しましょう:
犬種・頭数を選択(*) カウントあり(*)<=10 |
「各品種の子猫の数が10匹以下」という条件を設定しているため、結果は指定なしの例と同じになります。 ただし、ここでは、Having 句がどのように機能するかのスキームそのものを理解することが重要です。 しかし、論理条件を Have count(*) =1 に変更すると、結果は 3 行に減り、1 匹だけ残っている子猫の品種が表示されます。
仕分け
Order by について理解しましょう。Select 演算子 (SQL) の句で、1 つ以上の列の値を昇順または降順にして出力行を並べ替えることができます。
Order by は、Select ステートメント構造全体の最後の句であることを覚えておくことが重要です。 これは、Select、From、Where、Group by、Having の後に配置されます。
並べ替えを行う際の重要なポイントは次の 3 つです。
1) 任意の数の列を指定でき、各列を昇順 (ASC) または降順 (DESC) で個別に並べ替えることができます。
2) Order by 句で指定されたすべての列が、Select で選択された列の中に存在する必要があります。
3) ソートする列の特定の名前をリストする必要はありません。Select ステートメント内でその番号を指定するだけで済みます。
この記事を参考にして、SQL クエリの使用に関する基本的な知識を習得し、DBMS から必要な情報を簡単に選択できるようになることを願っています。
すべての Web 開発者は、データベース クエリを作成するために SQL を理解する必要があります。 また、phpMyAdmin はキャンセルされていませんが、多くの場合、低レベルの SQL を記述するために手を汚す必要があります。
そのため、SQL の基本についての短いツアーを用意しました。 始めましょう!
1. テーブルを作成する
CREATE TABLE ステートメントはテーブルを作成するために使用されます。 引数は列の名前とそのデータ型である必要があります。
という名前の単純なテーブルを作成しましょう 月。 これは 3 つの列で構成されます。
- ID– 暦年の月番号 (整数)。
- 名前– 月の名前 (文字列、最大 10 文字)。
- 日々– 今月の日数 (整数)。
対応する SQL クエリは次のようになります。
CREATE TABLE months (id int, name varchar(10), days int);
また、テーブルを作成するときは、列の 1 つに主キーを追加することをお勧めします。 これにより、レコードが一意に保たれ、フェッチ リクエストが高速化されます。 この例では、月の名前を一意にします (列 名前)
CREATE TABLE months (id int, name varchar(10), days int, PRIMARY KEY (name));
データ・タイプ | 説明 |
---|---|
日付 | 日付の値 |
日付時刻 | 日付と時刻の値は分まで正確です |
時間 | 時間の値 |
2. 行の挿入
では、テーブルに記入しましょう 月有用な情報。 テーブルへのレコードの追加は、INSERT ステートメントを使用して行われます。 この命令を記述するには 2 つの方法があります。
1 つ目の方法は、データが挿入される列の名前を指定せず、値のみを指定する方法です。
この記録方法は簡単ですが、プロジェクトが拡大してテーブルが編集されたときに、列が以前と同じ順序になるという保証がないため、安全ではありません。 INSERT ステートメントを安全に (同時により煩雑に) 記述する方法では、列の値と順序の両方を指定する必要があります。
これがリストの最初の値です 価値観最初に指定された列名などと一致します。
3. テーブルからのデータの抽出
SELECT ステートメントは、データベースからデータを取得するときの最良の友です。 非常に頻繁に使用されるため、このセクションには細心の注意を払ってください。
SELECT ステートメントの最も単純な使用法は、テーブル (たとえば、名前によるテーブル) からすべての列と行を返すクエリです。 キャラクター):
SELECT * FROM "文字"
アスタリスク (*) 記号は、すべての列からデータを取得することを意味します。 SQL データベースは通常、複数のテーブルで構成されているため、FROM キーワードの後にスペースで区切ってテーブル名を指定する必要があります。
テーブル内の一部の列からデータを取得したくない場合があります。 これを行うには、アスタリスク (*) の代わりに、目的の列の名前をカンマで区切って書き留める必要があります。
月から ID、名前を選択します
さらに、多くの場合、結果を特定の順序で並べ替えることが必要になります。 SQL では、ORDER BY を使用してこれを行います。 オプションの修飾子を受け入れることができます - ASC (デフォルト) は昇順でソートするか、DESC (降順でソート) します。
SELECT ID、名前 FROM 月 ORDER BY 名前 DESC
ORDER BY を使用する場合は、それが SELECT ステートメントの最後にあることを確認してください。 そうしないと、エラー メッセージが表示されます。
4. データのフィルタリング
SQL クエリを使用してデータベースから特定の列を選択する方法を学習しましたが、特定の行も取得する必要がある場合はどうすればよいでしょうか? ここで WHERE 句が役に立ち、条件に応じてデータをフィルタリングできるようになります。
このクエリでは、テーブルからそれらの月のみを選択しています。 月、30 日を超える場合は、より大きい (>) 演算子を使用します。
SELECT ID、名前 FROM 月 WHERE 日 > 30
5. 高度なデータフィルタリング。 AND 演算子と OR 演算子
以前は、単一の基準を使用したデータ フィルタリングを使用していました。 より複雑なデータ フィルタリングの場合は、AND 演算子、OR 演算子、および比較演算子 (=、<,>,<=,>=,<>).
ここに、史上最も売れたアルバム 4 枚をまとめた表があります。 ロックに分類されるもので、販売枚数が5,000万枚未満のものを選びましょう。 これは、これら 2 つの条件の間に AND 演算子を配置することで簡単に実行できます。
![](https://i2.wp.com/websketches.ru/assets/files/blog/sql20min/and_or.png)
6. イン/ビトゥイーン/ライク
WHERE はいくつかの特別なコマンドもサポートしているため、最も頻繁に使用されるクエリをすばやく確認できます。 どうぞ:
- IN – 条件の範囲を示し、そのいずれかが満たされる可能性があることを示します。
- BETWEEN – 値が指定された範囲内にあるかどうかを確認します
- LIKE – 特定のパターンを検索します
たとえば、次のようなアルバムを選択したい場合、 ポップそして 魂音楽の場合は、 IN("value1","value2") を使用できます。
ジャンル IN (「ポップ」、「ソウル」) のアルバムから * を選択します。
1975 年から 1985 年の間にリリースされたすべてのアルバムを取得したい場合は、次のように書かなければなりません。
* 1975 年から 1985 年の間にリリースされたアルバムから選択します。
7. 機能
SQL には、あらゆる種類の便利な機能を実行する関数が満載されています。 最も一般的に使用されるもののいくつかを次に示します。
- COUNT() – 行数を返します。
- SUM() - 数値列の合計を返します。
- AVG() - 一連の値の平均を返します。
- MIN() / MAX() – 列から最小値/最大値を取得します。
テーブル内の最新の年を取得するには、次の SQL クエリを作成する必要があります。
アルバムから MAX (リリース済み) を選択します。
8. サブクエリ
前の段落では、データを使用して簡単な計算を行う方法を学びました。 これらの計算の結果を使用したい場合は、ネストされたクエリを使用することはできません。 出力したいとしましょう アーティスト, アルバムそして 発売年表内の最も古いアルバムの場合。
これらの特定の列を取得する方法はわかっています。
アーティスト、アルバム、リリースされたアルバムから選択します。
最も早い年を取得する方法もわかっています。
アルバムから MIN (リリース済み) を選択します。
ここで必要なのは、WHERE を使用して 2 つのクエリを結合することだけです。
アーティスト、アルバム、リリースされたアルバムからリリースされた場所を選択 = (アルバムから MIN(リリースされた) を選択);
9. テーブルの結合
より複雑なデータベースでは、相互に関連する複数のテーブルが存在します。 たとえば、以下はビデオ ゲームに関する 2 つの表です ( ビデオゲーム) およびビデオゲーム開発者 ( ゲーム開発者).
![](https://i1.wp.com/websketches.ru/assets/files/blog/sql20min/video_games.png)
![](https://i0.wp.com/websketches.ru/assets/files/blog/sql20min/game_developers.png)
表の中で ビデオゲーム開発者のコラムがあります( 開発者ID) ですが、開発者の名前ではなく整数が含まれています。 この番号は識別子 ( IDゲーム開発者の表から該当する開発者の ) ( ゲーム開発者)、2 つのリストを論理的にリンクし、両方のリストに格納されている情報を同時に使用できるようにします。
ゲームについて知る必要があるすべてを返すクエリを作成したい場合は、INNER JOIN を使用して両方のテーブルの列をリンクできます。
SELECT video_games.name、video_games.genre、game_developers.name、game_developers.country FROM video_games INNER JOIN game_developers ON video_games.developer_id = game_developers.id;
これは最も単純で最も一般的な JOIN タイプです。 他にもいくつかのオプションがありますが、これらはあまり一般的ではないケースに当てはまります。
10. エイリアス
前の例を見ると、という 2 つの列があることがわかります。 名前。 これは混乱を招くため、次のように繰り返し列の 1 つに別名を設定しましょう。 名前テーブルから ゲーム開発者呼ばれます 開発者.
テーブル名にエイリアスを付けることでクエリを短縮することもできます。 ビデオゲーム電話しましょう ゲーム, ゲーム開発者 - 開発者:
SELECT games.name、games.genre、devs.name AS開発者、devs.country FROM video_games AS games INNER JOIN game_developers AS devs ON games.developer_id = devs.id;
11. データ更新
多くの場合、いくつかの行のデータを変更する必要があります。 SQL では、これは UPDATE ステートメントを使用して行われます。 UPDATE ステートメントは次のもので構成されます。
- 置換値が配置されるテーブル。
- 列名とその新しい値。
- WHERE を使用して選択された、更新する行。 これを行わないと、テーブル内のすべての行が変更されてしまいます。
以下は表です 連続テレビ番組テレビシリーズとその評価について。 ただし、テーブルには小さなエラーが忍び込みました。 ゲーム・オブ・スローンズコメディとして描かれていますが、実際はそうではありません。 これを修正しましょう!
![](https://i2.wp.com/websketches.ru/assets/files/blog/sql20min/tv_series.png)
12. データの削除
SQL を使用してテーブル行を削除するプロセスは非常に簡単です。 削除するテーブルと行を選択するだけです。 前の例からテーブルの最後の行を削除してみましょう 連続テレビ番組。 これは、>DELETE 命令を使用して行われます。
DELETE FROM tv_series WHERE id = 4
DELETE ステートメントを作成するときは注意して、WHERE 句が存在することを確認してください。そうでないと、テーブル内のすべての行が削除されます。
13. テーブルを削除する
すべての行を削除してテーブル自体を残しておきたい場合は、TRUNCATE コマンドを使用します。
TRUNCATE TABLE テーブル名;
実際にデータとテーブル自体の両方を削除したい場合は、DROP コマンドが役立ちます。
DROP TABLE テーブル名;
これらのコマンドには十分注意してください。 キャンセルできません!/p>
これで SQL チュートリアルは終了です。 ここで取り上げていないことはたくさんありますが、Web キャリアのための実践的なスキルを身に付けるには、すでに知っている内容で十分です。
注記:
現在の SQL チュートリアル カテゴリのすべての記事では、トレーニング データベースに基づいた例と問題が使用されています。
SELECT ステートメントは、SQL でデータベース テーブルからデータを取得する役割を果たします。 この記事では、その最も単純な構文と例について説明します。
単純なデータベース クエリを実行するには、次の 2 つの条件 (文) を指定するだけで十分です。
- どの列をアンロードする必要があるか。
- どのテーブルから列をアンロードする必要がありますか?
の上 SQL言語次のようになります:
選択する<Перечень столбцов>から<Перечень таблиц>
列名は、SELECT キーワードの直後にカンマで区切ってリストされます。 この後に、テーブルの名前を含む FROM キーワードが続きます。 複数のテーブルがある場合は、それらもカンマで区切って示されます。
注記:
複数のテーブルに対するクエリは考慮されません。 この素材、このトピックはテーブルの結合に関連しているか、WHERE 句の知識が必要なためです。
列とテーブルは任意の順序でリストでき、複数回繰り返すことができます。
データベースへの接続
多くの場合、サーバー上には複数のデータベースが存在します。 したがって、リクエストを実行する前に、特定のデータベースに接続する必要があります。 これを行う方法を学びましょう SQLサーバー管理スタジオ:
これで、あらゆるリクエストがそのコンテキスト内で実行されるようになります。
SQLクエリの作成
最初のタスクを完了しましょう。
すべての従業員の姓、名、および父称を取得する必要があります。
クエリ フィールドに、次の SQL コードを入力します。
従業員から姓、名、父称を選択します
クエリの最初の行にはページングされる列が含まれており、2 行目では列のテーブルを指定します。 実際、コードは「従業員テーブルから姓、名、ミドルネームの列を選択する」という通常の文に似ています。
SQL エディター パネルの [実行] ボタンをクリックします。 実行結果はリクエスト ウィンドウの下部に表示されます。 結果の下には、リクエストのステータスと期間、およびアンロードされた行数が表示されます。 すべて正しく実行すると、ステータスは「リクエストは正常に完了しました」と表示され、行数は 39 になります。
構文の説明
キーワードや名前はどのような場合でも構いません。 このオプションは前のオプションとまったく同じです。
M 人の従業員の姓、名、父称を選択してください
また、各条件を新しい行で開始する必要もありません。
その他のリクエストオプション
コードを記述する前に、データベースに接続する必要性について説明しました。 ただし、この特定のケースでは、接続なしで行うことができます (一部のプログラムでは、これは必須要件です)。 FROM 句にデータベース名とスキーマ名 (デフォルトでは dbo) を追加指定するだけで十分です。
SELECT 姓、名、父称 FROM CallCenter.dbo.Employees
次に、単純な SELECT ステートメントの構文を説明します (クエリのオプション部分は 角括弧):
SELECT [テーブル名.]列名[, [テーブル名.]列名2 ...] FROM [[データベース名.]スキーマ名.]テーブル名
名前を追加するとリクエスト コードが煩雑になるため、USE ステートメントを使用できます。 コンテキストを指定されたデータベースに切り替えます。
USE CallCenter SELECT 姓、名、父称 FROM 従業員
このアプローチにより、目的のデータベースに確実に接続できます。
注記:
詳細な列名とテーブル名には、単語の間にスペースが含まれる場合があります。 このような場合、クエリが正しく機能するように、名前は角かっこで囲まれています。 たとえば、[列名]。