目次
序文
CRUD は、作成、取得、更新、削除など、データ ストレージ システム上の一般的な操作を指します。データベースやその他のデータ管理システムで広く使用されている一般的なデータ操作モデルです。
以下に各操作の簡単な説明を示します。
-
Create : データ ストレージ システムに新しいレコードまたはエンティティを作成するために使用されます。これには、新しいデータ レコードの挿入、新しいファイルの作成、データベースへの新しいレコードの追加などが含まれます。
-
Retrieve : データ ストレージ システムから既存のレコードまたはエンティティを読み取るために使用されます。これには、特定の条件に基づいてデータベース内のデータをクエリしたり、ファイルの内容を読み取ったり、特定のオブジェクトのプロパティ値を取得したりすることが考えられます。
-
Update : データ ストレージ システム内の既存のレコードまたはエンティティを変更するために使用されます。これには、データベース内の情報の更新、ファイルの内容の変更、オブジェクトのプロパティ値の変更などが考えられます。
-
削除: データ ストレージ システムから既存のレコードまたはエンティティを削除するために使用されます。これには、データベースからのデータの削除、ファイルの削除、オブジェクトの破棄などが含まれます。
これらの操作をさらに拡張し、組み合わせて、より複雑なニーズを満たすことができます。上記の操作により、テーブル内のデータを追加、削除、変更、クエリすることができます。
(1) 作成操作
MySQL の CREATE 操作は、新しいデータベース、テーブル、ビュー、インデックス、ストアド プロシージャなどのオブジェクトを作成するために使用されます。以下は、MySQL での CREATE 操作のいくつかの一般的な使用方法の詳細な説明です。
文法:
INSERT [INTO] table_name
[(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...
value_list: value, [, value] ...
場合:
- 次に、「students」という名前のテーブルを作成します。詳細は次のとおりです。
CREATE TABLE students (
-> id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-> sn INT NOT NULL UNIQUE COMMENT '学号',
-> name VARCHAR(20) NOT NULL,
-> qq VARCHAR(20) unique key
-> );
- 詳細を次の図に示します。
1. 単一行のデータ + 全列の挿入
【イラスト】
- まず第一に、値の左側には挿入を示す括弧がないため、ここでのデフォルトは完全な挿入です。
- ここでは、挿入時に ID を指定する必要はありません (もちろん、その際にこれらの列にデータを明示的に挿入する必要があります)。mysql は自動インクリメントにデフォルト値を使用します。
- Insert ステートメントの列と値の順序は、テーブルで定義された列の順序と一致する必要があり、対応する値は VALUES キーワードの後の括弧内に指定する必要があります。一部の列が空であることが許可されている場合は、NULL を使用して表すことができます。
2. 複数行のデータ+指定列の挿入
コードを直接表示します。詳細は次のとおりです。
- 2 つのレコードを挿入します。value_list の数は、指定された列の数と順序と一致している必要があります。
3. 挿入しない場合は更新します
主キーまたは一意キーに対応する値がすでに存在するため、挿入は失敗します。
上記の状況では、同期更新操作の構文を選択的に実行できます。
INSERT ... ON DUPLICATE KEY UPDATE
column = value [, column = value] ...
コードサンプル:
- データを挿入すると、多くの場合、後で行が表示されます: x 行が影響を受けます
4. 直接交換
その機能は次のように非常に単純です。
- -- 主キーまたは一意キーに競合がない場合は、それを直接挿入します。
- -- 主キーまたは一意キーが競合する場合は、それを削除してから挿入します。
コード表示:
(2) 検索操作
Retrieve 操作は、データベースからデータを取得するために使用されます。MySQL では、一般的に使用される取得操作は、selectステートメントを使用してクエリを実行することです。
文法:
SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...
場合:
- 次に、挿入操作を実行します。
1. SELECT列
1️⃣全列クエリ
MySQL でテーブルの列全体をクエリするには、次のステートメントを使用できます。これにより、テーブル内のすべての列とすべての行のデータが返されます。 SELECT *
- 次に、上記のテーブルに対してクエリ操作を実行します。
【イラスト】
通常、列全体のクエリに * を使用することは推奨されません。
- 1. クエリされる列が増えるほど、送信する必要があるデータの量が増えます。
- 2. インデックスの使用に影響を与える可能性があります。(インデックスについては後のコースで説明します)
2️⃣列クエリを指定する
したがって、全列クエリの欠点に基づいて、データ転送とクエリ時間を短縮するために必要な列を明示的に指定することが最善です。
- クエリ テーブル内の特定の列のみが必要な場合は、
*
次のように目的の列の名前に置き換えることができます。SELECT 列1, 列2, ... FROM 表名;
- これにより、クエリの効率が向上し、不必要なデータ転送が削減されます。
3️⃣クエリフィールドは式です
MySQL では、式を使用してフィールドをクエリできます。式には、数学演算、文字列演算、論理演算、関数呼び出しなどがあります。
- ①式にフィールドが含まれていません
- ②式にフィールドが含まれています
- ③式に複数のフィールドが含まれています
4️⃣クエリ結果のエイリアスを指定する
MySQL では、as (書き込み可能かどうか)キーワードを使用して、クエリ結果のエイリアスを指定できます。
文法:
SELECT column [AS] alias_name [...] FROM table_name;
- 以下は例です (上記の 3 つの科目スコアのエイリアス)。
- または次のようにします。
5️⃣結果の重複排除
2、WHERE 条件
MySQL では、WHERE
キーワードを使用して条件を追加し、クエリ結果をフィルタリングできます。WHERE
句を使用すると、1 つ以上の条件を指定し、それらの条件を満たす行のみを返すことができます。
比較演算子:
論理演算子:
【事例】
- ① 英語で不合格となった生徒とその英語スコア(60 未満)
- ②中国語スコアが【80、90】の生徒とその中国語スコア
次に、and 上記の使用に加えて、[between and] 式も使用できます。
- ③数学の成績が58、59、98、99の生徒とその数学の成績
上記の方法に加えて、 IN条件を使用することもできます。
- ④サン という名前のクラスメイトとサンという名前のクラスメート
それ以外の場合、_ は任意の 1 文字に正確に一致します。
- ⑤ 英語の成績より中国語の成績が良い生徒
- ⑥ 合計点が200点未満の生徒
- ⑦ 中国語スコアが 80 以上で、姓が孫でない学生
- ⑧ 学生の場合、合計スコアが 200 以上で、中国語のスコアが数学のスコアより小さく、英語のスコアが 80 を超える必要があります。
- ⑨ NULLクエリ
3. 結果の並べ替え
MySQL では、ORDER BY
この句を使用してクエリ結果を並べ替えることができます。ORDER BY
句を使用すると、並べ替えの基準となる 1 つ以上の列を指定できます。
文法:
-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];
- 注: ORDER BY 句のないクエリの場合、返される順序は未定義です。この順序に依存しないでください。
【場合】
- ① 生徒と数学の得点が数学の得点の高い順に表示されます。
- ②クラスメートとQQナンバー、QQナンバー順に表示
- ③ 各科目の生徒の成績を確認し、数学の降順、英語の降順、中国語の降順で表示します。
- ④ クラスメートと合計スコアを高い順にクエリします。
- 上記の方法に加えて、列のエイリアスを ORDER BY 句で使用することもできます。
- ⑤ Sun という姓の生徒または Cao という姓の生徒の数学の点数を問い合わせ、結果は数学の点数が高い順に表示されます。
4. ページング結果のフィルタリング
MySQL では、LIMIT
およびOFFSET
キーワードを使用して、ページ分割された結果をフィルタリングできます。
LIMIT
クエリ結果で返される行数を制限するために使用されます。OFFSET
どの行から結果を返し始めるかを指定するために使用されます。
文法:
-- 開始インデックスは 0 です
-- s から開始して、n 個の結果をフィルタリングします
- SELECT ... FROM テーブル名 [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 0 から開始して、n 個の結果をフィルタリングします
- SELECT ... FROM テーブル名 [WHERE ...] [ORDER BY ...] LIMIT n;
-- s から開始して n 個の結果をフィルタリングします。これは 2 番目の使用法よりも明確です。
- SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
提案:
- 不明なテーブルにクエリを実行する場合は、テーブル内の大きなデータによってデータベースが停止し、テーブル データ全体をクエリすることを避けるために、LIMIT 1 を追加することをお勧めします。
ID によるページング、ページごとに 3 レコード、それぞれページ 1、2、および 3 を表示
(3) 更新操作
MySQL では、UPDATE
ステートメントを使用してデータベース テーブル内のデータを変更します。UPDATE
ステートメントは、テーブル内の 1 つ以上の行を更新するために使用されます。
文法:
UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]
- クエリ結果の列値を更新する
場合:
- ①孫悟空の数学の点数を80点に変更
- ②曹孟徳の数学の点数を60点、中国語の点数を70点に変更
- ③ 合計点の低い生徒 3 人の数学の得点に 30 点を加算します。
- ④全生徒の中国語スコアを元の2倍に更新
- 注: テーブル全体を更新するステートメントは注意して使用してください。!!
(4) 削除操作
1. データを削除する
文法:
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
場合:
- ①孫悟空の試験成績を削除する
- ②テーブルデータを全て削除する
次に、データを挿入します。
2. テーブルの切り詰め
MySQL では、このステートメントを使用してデータベース テーブル内のデータを切り詰める (クリアする) ことができます。この操作により、テーブルからすべての行が削除され、関連する記憶域が解放されます。 TRUNCATE TABLE
文法:
TRUNCATE [TABLE] table_name
注: この操作は注意して行ってください。
- 1. テーブル全体に対してのみ操作でき、DELETE のような部分的なデータに対しては操作できません。
- 2. 実際、MySQL はデータを操作しないため、DELETE よりも高速ですが、TRUNCATE でデータを削除すると、実際のデータを経由しないため、ロールバックできません。
- 3. AUTO_INCREMENT 項目をリセットします
テストデータを準備します。
(5) クエリ結果の挿入
MySQL では、ステートメントを使用してクエリ結果をテーブルに挿入します。これにより、あるテーブルのクエリ結果を別のテーブルにデータとして簡単に挿入できるようになります。 INSERT INTO ... SELECT
文法:
INSERT INTO table_name [(column [, column ...])] SELECT ...
ケース: テーブル内の重複レコードを削除します。重複データのコピーは 1 つだけ存在できます。
- 1. データ準備の実施
アイデア:
- ①空のテーブルno_duplicate_tableを作成します。構造はduplicate_tableと同じです。
- ②重複排除したduplicate_tableのデータをno_duplicate_tableに挿入します
- ③ テーブルの名前を変更してアトミックな重複排除操作を実装する
(6) 集計機能
集計関数は、データの計算と統計を実行するために使用される関数であり、一連の値に基づいて 1 つの結果を返します。MySQL では、一般的な集計関数には次のものがあります。
場合:
- ①クラスに何人の生徒がいるかを数えます
- ②クラスで集めたQQナンバーの数を数える
- ③ この試験の数学の点数を数えます
- ④ 統計数学の得点の合計点
- ⑤ 統計的平均合計点
- ⑥英語の最高得点に戻る
- ⑦ 戻る > 数学最低点70点以上
(7) group by句の使用
GROUP BY句は、結果セットをグループ化するために使用される SQL ステートメントです。GROUP BY 句を使用すると、指定した列に従ってクエリ結果をグループ化し、各グループに集計関数を適用して計算できます。
GROUP BY 句の使用例を次に示します。
SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1;
- 上の例では、
column1
グループ化する必要がある列の名前、aggregate_function(column2)
適用する集計関数、およびtable_name
テーブルの名前です。
たとえば、「customer_id」、「product_id」、および「quantity」列を含む「orders」というテーブルがあり、注文を「product_id」でグループ化し、各製品の総売上高を計算したいとします。
SELECT product_id, SUM(quantity)
FROM orders
GROUP BY product_id;
- 上記の例では、ステートメントを使用して、
SELECT product_id, SUM(quantity) FROM orders GROUP BY product_id
「product_id」列に従って「orders」テーブルをグループ化し、各グループの「quantity」列に SUM 集計関数を適用して、各製品の合計販売量を計算します。
単一の列に加えて、GROUP BY 句ではグループ化する複数の列を指定できます。次に例を示します。
SELECT column1, column2, aggregate_function(column3)
FROM table_name
GROUP BY column1, column2;
要約する
上記は、mysql での一般的なデータ クエリ操作についてです。続いて、この記事の内容を簡単にまとめてみましょう!!!
MySQL データの基本的なクエリは、SELECT ステートメントおよびその他の関連句を使用して実行できます。
- すべての列をクエリします。
SELECT * FROM table_name;
これにより、指定されたテーブル内のすべての列が返されます。
- 特定の列をクエリします。
SELECT column1, column2, ... FROM table_name;
クエリする列名をカンマで区切って指定すると、これらの列のデータのみが返されるようになります。
- 条件付きクエリ:
SELECT * FROM table_name WHERE condition;
WHERE 句を使用して条件を追加し、条件を満たす行をフィルタリングします。たとえば、WHERE age > 18
年齢が 18 歳を超える行が返されます。
- 集計関数を使用します。
SELECT aggregate_function(column) FROM table_name;
一般的な集計関数には、COUNT、SUM、AVG、MAX、MIN などがあります。集計関数を列に適用して、計算結果を返すことができます。
- クエリ結果を並べ替えます。
SELECT * FROM table_name ORDER BY column ASC|DESC;
ORDER BY 句を使用して、指定した列に従って昇順 (ASC) または降順 (DESC) ソートを実行します。
- 重複排除クエリの結果:
SELECT DISTINCT column FROM table_name;
DISTINCT キーワードを使用すると、クエリ結果から重複行を削除し、一意の値のみを返します。
- グループクエリ:
SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1;
GROUP BY 句を使用して結果をグループ化し、各グループに集計関数を適用します。
以上で、このデータクエリの説明は終了です。見てくださった皆様、応援してくださった皆様、ありがとうございました!!!