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 コマンドの概要

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

推薦する

HTML Webページの例を使用してヘッドエリアコードの意味を説明する

例を使って、Webページのヘッダー情報の意味を理解しましょう。 <!DOCTYPE HTML ...

MySQLにおける時刻日付型と文字列型の選択について

目次1. DATETIMEとTIMESTAMPの使用1. 類似点2. 相違点3. 選択2. varc...

シンプルなウェブ計算機を実装するJavaScript

背景私は新しいプロジェクト チームに配属されたので、プロジェクトでは js を使用する必要があります...

タブ切り替え機能を実装するJavaScriptカスタムプラグイン

この記事では、タブ切り替え機能を実装するためのJavaScriptの具体的なコードを参考までに共有し...

星のきらめき効果を実現するネイティブ js

この記事の例では、星のきらめき効果を実現するためのjsの具体的なコードを共有しています。具体的な内容...

Linux でのファイル コンテンツの重複排除と交差と差異の実装

1. データ重複排除日常業務では、Hive や Impala を使用してクエリとエクスポートを行う際...

CSS でフローティングにより親要素の高さが崩れる問題を解決するいくつかの方法

1. ドキュメントフローとフローティング1. ドキュメントフローとは何ですか? HTML では、ドキ...

SQL 面接の質問: 時間差の合計を求める (重複は無視)

ある会社の BI 職の面接を受けたとき、面接で SQL に関する質問がありました。一見すると非常に簡...

MySQL で重複しない携帯電話番号テーブルをバッチ生成する方法のサンプルコード

序文多くの MySQL テスト シナリオでは、テスト用に一部のテスト データを手動で生成する必要があ...

Ubuntu 14.04 に FTP サーバーをインストールするための実装手順

目次インストールソフトウェア管理匿名アクセスモード設定ファイルを変更するクライアントがサーバーにログ...

テキストの両側に水平線を描くための CSS のサンプルコード

この記事では、テキスト中央の両側に水平線を引く効果を実現する CSS のサンプルコードを紹介し、皆さ...

フォームの「Enter」、「Submit」、「Enter != Submit」を削除する方法

「Enter != Submit」問題を実装するには、通常、「ボタンの種類」と「入力ボックスの数」か...

MySQL ファントムリードとその排除方法の詳細な説明

目次トランザクション分離レベルファントムリーディングとは何ですか?ファントムリードを排除する方法要約...

mysqldumpデータエクスポートの問題に関する詳細な議論

1. mysqldump の使用時にエラー (1064) が報告されます。これは、mysqldump...

MySQL で日付時刻データを取得し、その後に .0 を追加する方法

MySQL のデータ型は datetime です。データベースに保存されているデータは 2015-0...