MySQL 基本チュートリアル: DML ステートメントの詳細な説明

MySQL 基本チュートリアル: DML ステートメントの詳細な説明

DMLステートメント

DML (データ操作言語) ステートメント: データ操作ステートメント。

目的: データベース レコードを追加、変更、削除、照会し、データの整合性をチェックするために使用されます。

一般的なキーワード: insert、update、delete、select など。

DML 操作の対象はライブラリ テーブルのデータ (レコード) です。

主に挿入、更新、削除、クエリが含まれます。

DML ステートメントは、開発者が最も頻繁に使用する操作です。

1. レコードを挿入する

レコードを挿入する

テーブル名 (フィールド1、フィールド2、...、フィールドn) に値 (値1、値2、...、値n) を挿入します。

一度に複数のレコードを挿入する

テーブル名に挿入

 (フィールド1、フィールド2、...、フィールドn)

価値観

 (値1、値2、...、値n)、

 (値1、値2、...、値n);

2. 記録を更新する

単一テーブルデータの更新

テーブル名を更新し、フィールド1=値1、フィールド2=値2、...フィールドn=値n [条件] を設定します。

複数のテーブルのデータを同時に更新する

t1、t2、...、tnを更新し、t1.field1=expr1、tn.field=exprn [where条件]を設定します。

通常、あるテーブルのフィールドに基づいて別のテーブルのフィールドを動的に更新するために使用されます。

注: 角括弧「[ ]」はオプションのパラメータ、つまり存在する場合と存在しない場合があるパラメータを表します。

3. シンプルなクエリレコード

シンプルな条件付きクエリ。記号「*」はすべてのフィールドを照会することを表します。特定の列のみを表示する場合は、テーブルの列名を記述します。

select * from tablename [where condition];

テーブル名からフィールド1、フィールド2、...、フィールドnを選択します[条件];

エイリアス

列名またはテーブル名のエイリアスに使用するキーワード: AS またはキーワードなし。のように:

テーブル名からフィールド1をf1、フィールド2をf2として選択します。

table1 から t1、table2 t2 として t2.field1 AS f1、t1.field2 f2 を選択します。

エイリアスが使用されていない場合、クエリ結果の列名はテーブルの元の列名になります。

エイリアスを使用すると、クエリ結果の列名はエイリアスになります。

4. レコードを削除する

単一テーブルレコードを削除する

テーブル名から削除 [条件];

複数のテーブルから同時にデータを削除する

t1、t2、...、tn から t1、t2、...、tn を削除します [where 条件];

注意: where 条件が追加されていない場合は、テーブル データ全体が削除されます。

単一テーブルの「追加、変更、クエリ、削除」操作の例:

複数テーブルの「削除」操作ケース:

別の削除事例を見てみましょう

最後に、削除のケースを見てみましょう

複数テーブル削除の結論:

条件が満たされた場合は条件テーブル内の対応するデータが削除され、条件がない場合はテーブル全体が削除されます。

条件が満たされない場合は、いずれも削除されません。

質問があります: where 条件を指定せずに複数のテーブルを削除するとどうなりますか?

複数のテーブルのデータを同時に更新する操作に関しては、自分で探究することができます。結局のところ、考えながら学ぶことが最も価値があります。

5. クエリレコード(DQL文)の詳細な説明

DQL (データ クエリ言語) はデータベース クエリ言語です。

データベース クエリ ステートメントは、ビルディング ブロックを 1 つずつ組み立てるようなもので、各角括弧 "[]" はビルディング ブロックを表します。

まず、クエリ構文を段階的に 1 つずつリストします。

5.1. 一意のレコードをクエリする

テーブル名から別のフィールドを選択します。

distinctive キーワードは、「クエリ結果セット」から重複を削除するために使用されます。これは例でより明確になります。

5.2. 条件付きクエリ

--すべての列をクエリします:

select * from tablename [where condition];

--指定された列をクエリします:

テーブル名から[フィールド1、フィールド2、...、フィールドn]を選択します[条件];

よく使われる条件

等しい: フィールド = xxx

より大きい: フィールド > xxx

より小さい: フィールド < xxx

等しくない: フィールド != xxx

等しくない: フィールド <> xxx

null に等しい: フィールドが null です

null と等しくない: フィールドが null ではありません

複数の条件の間に論理演算子を使用します: and および or

あいまいクエリ "_": _x_xx_ のようなフィールド シンボル "_" は、任意の 1 文字に一致することを表します。任意の文字の横に "_" を追加できます。

ファジークエリ "%": %x%xx% のようなフィールド 記号 "%" は、0 から n 文字の一致を表します。任意の文字の横に "%" を追加できます。

ステートメントクエリ: フィールド in(value1,value2,...) クエリフィールドと配列が一致し、一致しない場合はデータなし

ステートメントクエリにありません: フィールドが(value1,value2,...) クエリフィールドと配列にありません。一致しない場合は、データが存在します

その他のよく使われる条件の具体的な使い方については、よく使われる条件を参照してください。

5.3. 集計クエリ

--最も単純な集計クエリ:
select [field1,field2,...,fieldn] fun_name from tablename group by field;
--完全な構文:
テーブル名から[フィールド1、フィールド2、...、フィールドn] fun_nameを選択します
 [条件]
 [field1、field2、...、fieldn でグループ化 [ロールアップあり]]
 [条件付き]

例:

fun_name は集計関数を表します。よく使用される関数は、sum()、レコード数 (*)、平均値 avg()、最大値 max()、最小値 min() です。

[where condition] は上記の条件クエリです。

[field1、field2、...、fieldn でグループ化 [ロールアップあり]]

group by キーワードは、フィールド フィールドの分類と集約を示します。

with rollup キーワードは、分類の集約後に結果を再集約するかどうかを示します。

[条件あり] 分類集計後のクエリ結果セットを条件でフィルタリングする

where と having の違い:

  1. はグループ化前の条件付きフィルタリングであり、 はグループ化後の条件付きフィルタリングです。
  2. ここで、は元のテーブル列名を条件付きフィルタリングとして使用することを意味し、 はクエリ結果セットの列名を条件付きフィルタリングとして使用することを意味します。

where 条件フィルタリングを優先します。これにより、結果セットが削減され、分類集約の効率が向上します。

角括弧「[]」はオプションの意味を表します。つまり、group by の前の [where 条件] はオプションであり、その後の [with rollup] と [having 条件] もオプションです。

group by と distinct の違い: group by は指定された列をグループ化し、distinct はクエリ結果の重複を排除します。

where と having を追加する例:

列名 avg(stu_age) は少し奇妙に見えるので、別の名前を付けると一目でわかります。

5.4. ソートクエリ

--最も単純な並べ替えクエリ:
select * from tablename order by field;
--完全な構文:
テーブル名から[フィールド1、フィールド2、...、フィールドn] fun_nameを選択します
 [条件]
 [field1、field2、...、fieldn でグループ化 [ロールアップあり]]
 [条件付き]
 [フィールド1 [desc|asc]、フィールド2 [desc|asc]、...、フィールドn [desc|asc] で並べ替え];
DESC は降順 (大きいものから小さいものへ) を表し、ASC は昇順 (小さいものから大きいものへ) を表します。asc はデフォルトの並べ替えです。つまり、desc だけを覚えておけばよいのです。 desc はクエリ テーブル設計のキーワードであり、構文は非常に単純です: desc tablename;

単一列で並べ替え:

複数列の並べ替え: 区切り記号「,」を使用します

5.5. 制限クエリ

制限クエリ、範囲クエリ、ページングクエリとも呼ばれます

--最も単純な制限クエリ: offset_start は配列の添え字と同じで、0 から始まります。select * from tablename limit offset_start,row_count;
--完全な構文: このSQLは、単一テーブルクエリselect [field1,field2,...,fieldn] fun_name from tablenameの完全バージョンです。
 [条件]
 [field1、field2、...、fieldn でグループ化 [ロールアップあり]]
 [条件付き]
 [フィールド1 [降順|昇順]、フィールド2 [降順|昇順]、...、フィールドn [降順|昇順] で並べ替え]
 [オフセット開始、行数を制限する];

例1: 項目1から始めて、2つのデータをクエリする

例2: 項目2から始めて、2つのデータをクエリする

=========================

= 上記は単一テーブルクエリの構文です=

= 以下は 2 つのテーブルを結合するための構文です =

=========================

5.6. テーブル結合クエリ

複数のテーブルからデータを関連付ける必要がある場合に使用します。 左結合と内部結合を学ぶだけです。

左結合: 右テーブルが一致するかどうかに関係なく、左テーブルのすべてのレコードを選択します。左テーブルがマスターであり、右テーブルの情報が関連付けられています。

t1 から * を選択し、t1.field1=t2.field2 で t2 を左結合します。

内部結合: 2 つのテーブルで一致するレコードのみを選択します。一致するレコードがない場合、結果は空になります。

t1 から * を選択し、t2 を t1.field1=t2.field2 で結合します。

t1.field1=t2.field2 の場合、t1、t2 から * を選択します。

5.7. サブクエリ

クエリ条件として別のクエリ結果が必要な場合に使用されます。サブクエリは「()」で囲まれます。

例: 学生「Zhang San」の成績を照会する

場合によっては、サブクエリを結合テーブルクエリに変換できます。上記の例は、結合テーブルクエリとして記述できます。

5.8. レコードの結合

2 つ以上のテーブルのクエリ結果を 1 つの結果セットに結合して出力します。マージの条件は、複数のテーブルのクエリ結果フィールドの数が同じであることです。テーブルフィールドの数ではなく、クエリ結果フィールドの数であることに注意してください。

t1からf1、f2、...、fnを選択

ユニオン/ユニオンオール

t2からf1、f2、...、fnを選択

...

ユニオン/ユニオンオール

tn から f1、f2、...、fn を選択

クエリ結果フィールドの数が等しくない場合は、エラーが報告されます。

クエリ結果セットフィールドの固定数

5.9. SELECT文の実行順序

実行順序が正しいかどうかを自分で証明することは、以前に学習した知識の定着とも言えます。​

(7)選択

(8) DISTINCT <選択リスト>

(1)<left_table>から

(3)<結合タイプ> JOIN <右テーブル>

(2)ON <結合条件>

(4) WHERE <where_condition>

(5) GROUP BY <group_by_list>

(6) HAVING <having_condition>

(9) ORDER BY <order_by_condition>

(10) LIMIT <制限数>​

6. まとめ

ここまでは、日常業務で最も頻繁に使用されるテーブルデータの挿入、更新、削除、クエリステートメントについて説明しました。 DML ステートメントの焦点は、DQL ステートメントとも呼ばれる最も複雑なクエリ ステートメントです。

これで、MySQL 基礎チュートリアルの DML ステートメントに関するこの記事は終了です。MySQL 基礎チュートリアルの DML ステートメントの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL DMLステートメントの使用に関する詳細な説明
  • MySQL DML ステートメントの概要
  • MySQL データ操作 - DML ステートメントの使用

<<:  開発者にとって必須の Docker コマンドの概要

>>:  レスポンシブデザインについて知っておくべきこと

推薦する

MySQL で単一のフィールド内の複数の値を分割および結合する方法

複数の値を組み合わせて表示これで、図1から図2に示す要件が揃いました。 どうやってやるんですか?次の...

Dockerコンテナでユーザーを分離する方法

前回の記事「Docker コンテナの UID と GID を理解する」では、Docker コンテナ内...

角度付き双方向バインディングの詳細な説明

目次双方向バインディングの原理ngモデルレンダリングカスタム双方向バインディングプロパティコンポーネ...

JavaScript フロー制御 (分岐)

目次1. プロセス制御2. シーケンシャルプロセス制御3. 分岐フロー制御if文1. 支店構造2. ...

MySQLデータベースについて学びましょう

目次1. データベースとは何ですか? 2. データベースの分類は? 3. データベースとデータ構造の...

Ubuntu の空き容量を増やす 5 つの簡単な方法

序文ほとんどの人は、システム ディスク ストレージが少ないときにこの操作を実行するか、Linux シ...

CentOS 7.4 で MySQL 5.7.28 バイナリモードをインストールする方法

Linuxシステムバージョン: CentOS7.4 MySQL バージョン: 5.7.28 Linu...

動的な背景グラデーション効果を実現するCSS3

CSS3 を学ぶということは、新しい機能と基本的な理論に慣れることを意味します。この記事では、ケー...

Expressプロジェクトファイルディレクトリの説明と詳細な機能の説明

app.js: スタートアップファイル、またはエントリファイルpackage.json: プロジェク...

MySQLは2つの日付間の日数、月数、年数を計算します

MySQL 組み込みの日付関数 TIMESTAMPDIFF は、2 つの日付間の秒数、分数、時間数、...

ウェブフロントエンドに対する一般的な攻撃とその防止方法

ウェブサイトのフロントエンド開発で発生するセキュリティ問題は、クライアントブラウザで実行されるコード...

CentOS で yum を使用して rabbitmq-server をインストールする方法

RabbitMQをインストールする前にSocatをインストールする必要があります。そうしないと、Ra...

Linux でシステム ディスクを初期化した後にデータ ディスクを再マウントする方法

Linuxインスタンスでシステムディスクを初期化した後、データディスクを再マウントするLinux イ...

MySQLユーザー権限管理の詳細な説明

目次序文: 1. ユーザー権利の概要2. 実際の権限管理序文:データベースのユーザー権限管理について...

Vue のトランジション効果とアニメーショントランジションの使用例の詳細な説明

目次遷移フック関数カスタム遷移クラス名遷移グループの使用まとめまずは例を見てみましょうコードは次のと...