MySQL の詳細な単一テーブルの追加、削除、変更、クエリの CRUD ステートメント

MySQL の詳細な単一テーブルの追加、削除、変更、クエリの CRUD ステートメント

MySQL の追加、削除、変更、クエリステートメント

1. 練習シートを作成する

  • ここでの練習表は3つの正規形を満たしていない

第 1 正規形 (1NF とも呼ばれます): 各列の原子性を保証します。データ テーブル内の各列 (フィールド) は、分割できない最小単位である必要があります。つまり、各列の原子性を保証します。最初の正規形を満たすことは、リレーショナル モデルの正規化の最小要件です。そうでない場合、多くの基本操作をそのようなリレーショナル モデルで実装することはできません。
第 2 正規形 (2NF とも呼ばれます): テーブルが 1 つのことだけを記述していることを確認します。1NF を満たした後は、テーブル内のすべての列が 1 つの列にのみ関連付けられる必要があります。つまり、データの行は 1 つのことだけを実行できます。列に重複データがある場合は、テーブルを分割する必要があります。
第 3 正規形 (3NF とも呼ばれます): 各列が主キーに直接関連していることを確認します。2NF を満たした後の要件は、テーブル内の各列が間接的ではなく主キーに直接関連している必要がある (テーブル内の各列は主キーにのみ依存できます) ことです。
データには推移的な関係を持たせることはできません。つまり、すべての属性は、間接的な関係ではなく、主キーと直接的な関係を持ちます。 a–>b–>c のような属性間の関係は、第 3 正規形に準拠しません。

  • 5つの制約

データベースの 5 つの主要な制約は次のとおりです。

1. 主キー制約: 一意性と NULL 非許容性。

2. ユニーク制約 (Unique Counstraint) ユニーク性、空にすることもできますが、存在できるのは 1 つだけです。

3. デフォルト制約: データのデフォルト値。

4. 外部キー制約: 2 つのテーブル間の関係を確立する必要があります。

5. NOT NULL 制約: NOT NULL 制約を設定します。フィールドは空にできません。

5 つの制約の構文例:

主キー制約の追加
テーブルテーブル名の変更制約主キー名主キー(フィールド)の追加

ユニーク制約の追加
テーブルテーブル名の変更制約制約名一意(フィールド)の追加

デフォルトの制約を追加する
テーブル名を変更して、制約制約名デフォルト(デフォルトの内容)をフィールド名に追加します。

チェック制約の追加
テーブルの変更、テーブル名の追加、制約、制約名チェック (フィールド式)

外部キー制約の追加
テーブル テーブル名の変更 制約の追加 制約名 外部キー (フィールド) 参照 テーブル名 (フィールド名)

1.1 ユーザーテーブル(ユーザー)

テーブル `user` を作成します (
	`id` INT AUTO_INCREMENT PRIMARY KEY COMMENT 'ユーザーID(主キー)',
	`username` VARCHAR(50) COMMENT 'ユーザー名', 
	`age` CHAR(3) COMMENT 'ユーザーの年齢'
);

データの挿入

INSERT INTO USER VALUES(2,'小等',12);
INSERT INTO USER VALUES(3,'张三',33);
INSERT INTO USER VALUES(4,'李四',24);
USER VALUES(5,'王五',17)に挿入します。
INSERT INTO USER VALUES(6,'赵六',36);
USER VALUES(7,'七七',18)に挿入します。

完了後、テーブル名はuserになります
表データ:

ここに画像の説明を挿入

1.2 生徒用テーブル

テーブル「学生」を作成します(
	`id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '学生ID(主キー)',
	`name` VARCHAR(10) COMMENT '学生名', 
	`grade` VARCHAR(10) COMMENT '学生の成績',
	`chinese` INT COMMENT '中国語スコア',
	`math` INT COMMENT '数学の結果',
	`english` INT COMMENT '英語のスコア'
);

データの挿入

学生にVALUES(1,'学生熱巴','第二年生',100,100,100)をINSERT INTOします。
学生にVALUES(2,'Gulinaza','First Grade',99,88,98)を挿入します。
学生にVALUES(3,'Malzahar','Grade 3',46,20,99)を挿入します。
学生にVALUES(4,'Alibaba','First Grade',78,81,100)を挿入します。
学生にVALUES(5,'哈哈哈哈','六年級',20,10,5)をINSERT INTOします。
学生にVALUES(6,'著者','第2学年',100,100,100)を挿入します。
学生にVALUES(7,'嘻嘻哈哈','五年生',70,99,60)をINSERT INTOします。
学生にVALUES(8,'泣いている','4年生',33,15,54)をINSERT INTOします。

列名またはテーブル名が MySQL キーワードと競合する場合は、Esc キーの下、1 の左側、または Tab キーの上にある ` 記号を使用できます。
注意 ==> グレード タイプが varcher の場合、sort を使用しても正しく表示されません。

完了後、テーブル名はstudentsになります
表データ:

ここに画像の説明を挿入

2. クエリ

2.1 すべてをクエリする(ここではユーザーテーブルを使用)

テーブル名から*を選択します。

ユーザーから*を選択します。

2.2 成人に達したユーザーをクエリする(WHERE条件クエリを使用)

  • 条件内の比較演算子: (等しい: = より大きい: > 以上: >= より小さい: < 以下: <= 等しくない: != または <> )
  • 条件に応じてテーブル名から * を選択します。
SELECT * FROM USER WHERE age >= 18;

ここに画像の説明を挿入

2.3 未成年ユーザーの名前を照会する

SELECT フィールド名 FROM テーブル名 WHERE 条件;

年齢が 18 未満の USER からユーザー名を選択します。

ここに画像の説明を挿入

2.4 エイリアスクエリの使用

asキーワードを使用する(asは省略可能)

USER から u.* を選択します。

ここに画像の説明を挿入

2.5 論理演算子を使用したクエリ

論理演算子 (and: and or && or or not: not or !)

Xiaoer の名前と 12 歳の年齢を検索 (表示名と年齢)

SELECT u.`username`,u.`age` FROM USER u WHERE u.`username`='小等' && u.`age`=12;

ここに画像の説明を挿入

名前が張三で未成年の人を検索します(検索結果は空で、そのような人はいません)

SELECT * FROM USER WHERE username='张三' && age < 18;

ここに画像の説明を挿入

2.6 演算子を使用してクエリを実行する(ここでは students テーブルの使用を開始します)

ここに画像の説明を挿入

hahahaha の 3 つの科目の合計スコアの演算子の優先順位を照会します。
1. 掛け算と割り算は足し算と引き算よりも優先される
2. 同じレベルの演算の順序は左から右です
3. 式の中で「括弧」を使って、優先演算の順序を強制的に変更する
条件付きでテーブル名から列 1 [ ±*/ ] 列 2 を選択します。

SELECT s.chinese + s.math + s.english FROM students s WHERE s.name = '哈哈哈哈';

ここに画像の説明を挿入

2.7 範囲クエリ(条件1と条件2の間)

(良い 60-70、普通 70-80、非常に良い 80-90、非常に良い 90-100)

中国語の成績が良い~中程度の生徒の名前を照会する
条件 1 と条件 2 の間のフィールド (列名)。

中国語が60〜80の学生から名前を選択してください。

ここに画像の説明を挿入

数学で不合格になった生徒の名前を問い合わせる


フィールド (列名) が条件 1 と条件 2 の間にない。

数学の成績が 60 から 100 の範囲にない生徒から名前を選択します。

ここに画像の説明を挿入

英語の成績が優秀な生徒の ID と名前を照会します。

三つ

where !(条件 1 と条件 2 の間のフィールド名);

SELECT s.`id`,s.`name` FROM students s WHERE !(s.`english` BETWEEN 0 AND 90);

ここに画像の説明を挿入

2.8 1年生と2年生の情報を照会するコレクションクエリ

列名が (値1、値2、値3) の場合、

SELECT * FROM students WHERE grade IN ('First grade','Second grade');

ここに画像の説明を挿入

※1年生、2年生、3年生以外の生徒の照会情報
列名が (値1、値2、値3) に含まれません。

SELECT * FROM students WHERE grade NOT IN ('1年生','2年生','3年生');

ここに画像の説明を挿入

2.9 NULL値クエリ

注: 列の値がnullの場合、=を使用してクエリすることはできません。

名前が null の学生データを照会します (データが保存されていないため、何も存在しません)
列名が null の場合;

SELECT * FROM students WHERE `name` IS NULL;

ここに画像の説明を挿入

2.10 あいまいクエリ(like)%は0からn文字を表す

列名が '%巴' のような場合、巴 で終わることを意味します。
列名が「巴%」のような場合、巴で始まることを意味します。
列名が「%巴巴%」のような場合、データに巴巴が含まれていることを意味します。

名前が「巴」で終わる生徒を検索します。

SELECT * FROM students WHERE `name` LIKE '%巴';

ここに画像の説明を挿入

名前がauthorで始まる生徒を検索します。

SELECT * FROM students WHERE `name` LIKE '作者%';

ここに画像の説明を挿入

名前にヒップホップが含まれる生徒を検索します。

SELECT * FROM students WHERE `name` LIKE '%嘻哈%';

ここに画像の説明を挿入

_は文字を表し、複数回使用できます。

名前の最後から2番目の文字に「ha」が含まれる生徒を検索します
列名は「哈_」のようになります。

SELECT * FROM students WHERE `name` LIKE '%哈_';

ここに画像の説明を挿入

2.11 結果の並べ替え

結果を行ごとに並べ替えます (クエリ結果を 1 つ以上の列で昇順または降順で並べ替えます。昇順は ASC、降順は DESC で、昇順がデフォルトです)。

中国語または中国語エイリアスの並べ替えは使用できませんのでご注意ください。
where条件は列名による順序です[ASC / DESC]。

1 年生、2 年生、3 年生の生徒のデータを照会し、中国語のスコアの降順で並べ替えます。

SELECT * FROM students WHERE grade IN ('1年生','2年生','3年生') ORDER BY chinese DESC;

ここに画像の説明を挿入

2.12 ページネーションクエリ

ページネーション クエリ (beginIndex は開始するデータ数 (またはスキップするページ数) を示します。最初のページは 0 から始まります。pageSize はページあたりに表示されるデータの数を示します)。
select * from table name where condition limit beginIndex , pageSize;

ページング アルゴリズムの式 (現在のページ - 1) * pageSize;

たとえば、1 ページあたり 10 ページあります。
最初のページの制限 0, 10; // 0-10 を表示; 最初の 0 のデータをスキップします 2 番目のページの制限 10, 10; // 11-20 を表示; 最初の 10 のデータをスキップします 3 番目のページの制限 20, 10; // 21-30 を表示; 最初の 20 のデータをスキップします

select * from students; を使用する場合(最下位レベルの実行ステートメントは limit 0, 1000 をページ区切りします)に注意してください。
ここに画像の説明を挿入

すべての生徒を照会、1ページあたり3件のレコード、最初のページ

学生から * を選択 LIMIT 0,3;

ここに画像の説明を挿入
ページ 2

学生から * を選択し、 LIMIT 3,3 を実行します。

ここに画像の説明を挿入

ページ 3

学生の制限6,3から*を選択します。

ここに画像の説明を挿入

2.13 集計関数

データセットに作用し、そのデータセットの値を返します。

  • count: 統計結果のレコード数。
  • max: 統計の最大値
  • min: 統計の最小値 sum: 計算の合計
  • avg: 平均値を計算する

グループ化関数 group by に注意してください。グループ化されたデータをフィルタリングする場合は、having キーワードを使用し、条件を having の後に記述する必要があります。

  • ここで、まず既存のデータをフィルタリングし、次にグループ化し、最後に集計関数を計算します。
  • グループ化後にデータをフィルタリングします。

練習に必要な都市テーブルを挿入します

テーブル「city」を作成します(
	`id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '主キー',
	`city_name` VARCHAR(100) COMMENT '都市名',
	`city_year` VARCHAR(4) COMMENT '年、yyyy'、
	`city_gdp` ダブルコメント '今年度の都市の GDP (1 億元単位)',
	`city_population` ダブルコメント '豊作の今年の都市の総人口(10,000 人単位)'
);

データを追加

都市にVALUES(1,'上海',2018,32679,2418)を挿入します。
都市に値(2,'北京',2018,30320,2171)を挿入します。
city VALUES(3,'深圳',2018,24691,1253) に INSERT INTO city VALUES(3,'深圳',2018,24691,1253);
都市にVALUES(4,'広州',2018,23000,1450)を挿入します。
INSERT INTO city VALUES(5,'重庆',2018,20363,3372);
都市にVALUES(6,'上海',2019,38155,2424)を挿入します。
都市に値を挿入します(7,'北京',2019,35371,2171);
city VALUES(8,'深圳',2019,26927,1302) に INSERT INTO city VALUES(8,'深圳',2019,26927,1302);
都市にVALUES(9,'広州',2019,23628,1491)を挿入します。
INSERT INTO city VALUES(10,'重庆',2019,23605,3372);

カウント
2019 年にデータを入力した都市の数を照会して計算します (回答 5)

city_year = '2019' の場合、count(*) を city から選択します。

ここに画像の説明を挿入

マックス
2018 年の最高の GDP がいくらだったかを確認します。

city_year = '2018' の場合、city から MAX(city_gdp) を選択します。

ここに画像の説明を挿入


2018 年の GDP の最低値はいくらだったか調べます。

city_year = '2018' の場合、city から MIN(city_gdp) を選択します。

ここに画像の説明を挿入


2019 年の全都市の GDP 合計を照会します。

city_year = '2019' の場合、city から SUM(city_gdp) を選択します。

ここに画像の説明を挿入

平均
2019 年の全都市の平均 GDP を照会します。

city_year = '2019' の場合、city から AVG(city_gdp) を選択します。

ここに画像の説明を挿入

3. 増加

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

学生のチンポを追加

学生に挿入(ID、名前、学年、中国語、数学、英語) 
VALUES(9,'鸡鸡鸡鸡','七年級',77,77,77);

ここに画像の説明を挿入

その他の挿入方法

INSERT INTO テーブル名 (フィールド 1、フィールド 2、フィールド 3) VALUES (値 1、値 2、値 3)、(値 1、値 2、値 3); -- 複数のデータを挿入します INSERT INTO テーブル名 VALUES (値 1、値 2); -- テーブルのすべてのフィールドを挿入します INSERT INTO テーブル名 (フィールド) SELECT フィールド FROM テーブル 2; -- クエリ結果を挿入します INSERT INTO テーブル名 SELECT フィールド FROM テーブル 2; -- クエリ結果、テーブル全体を挿入します

4. 更新

update table name set field = value where condition; -- 条件に従って指定されたデータを変更します。それ以外の場合はテーブル全体を変更します。

生徒「ハハハハ」の英語のスコアを10に変更します。

UPDATE students SET english = 10 WHERE `name` = '哈哈哈哈';

ここに画像の説明を挿入

5. 削除

delete from table name where condition; -- 条件に一致するデータを削除します。条件に一致しない場合は、テーブル内のすべてのデータを削除します。

生徒「鸡鸡鸡」を削除します。

DELETE FROM students WHERE `name` = '鸡鸡鸡鸡';

ここに画像の説明を挿入

ここに画像の説明を挿入

6. ステートメントの実行順序

from -> on -> join -> where -> group by -> having -> select -> distinctive -> order by -> limit

その他のMySQLの記事については、以下のリンクをご覧ください。

MySQL DDL ステートメント

MySQL CRUD ステートメント

MySQL 集計関数

MySQL マルチテーブルクエリ

終わり…

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

以下もご興味があるかもしれません:
  • PHPを使用してMySqlデータベースにアクセスする論理操作と追加、削除、変更、チェックの例
  • PHPは、オブジェクト指向のmysqli拡張ライブラリを実装し、追加、削除、変更、クエリ操作ツールクラスを作成します。
  • PHP MySqlの追加、削除、変更、チェックの簡単な例
  • PHP+MySQLは、シンプルな追加、削除、変更、クエリ機能を実装します。
  • PHP+MYSQLはユーザーの追加、削除、変更、クエリを実装します
  • MySQL トリガーの追加、削除、変更、クエリ操作の例
  • MySQL ビュー管理ビューの例の詳細説明 [追加、削除、変更、クエリ操作]
  • MySQLとPHPの基礎と応用: 追加、削除、変更、クエリ

<<:  Tomcat maxPostSize設定実装プロセス分析

>>:  フロントエンドフレームワーク Vue における親子コンポーネントデータの双方向バインディングの実装

推薦する

Linux サーバーのスクリプトを自動的にバックアップする方法 (mysql、添付ファイルのバックアップ)

1.backup.shスクリプトファイルを作成する #!/bin/sh ソースフォルダ=/データ ...

JS ES6 スプレッド演算子の魔法のような使い方

目次1. 属性を追加する2. 複数のオブジェクトを結合する3. オブジェクトのプロパティを削除する4...

Linux lnコマンドの使用

1. コマンドの紹介ln コマンドは、ファイルのリンクを作成するために使用されます。リンクは、ハード...

Linux parted ディスク パーティション実装手順の分析

fdisk と比較すると、parted はあまり使用されず、主に 2T を超えるパーティションに使用...

88 秒で 1,000 万件のレコードを MySQL データベース テーブルに挿入する方法

私が使用しているデータベースはMySQLデータベースバージョン5.7ですまずデータベーステーブルを自...

フォームで完全な選択または逆選択効果を実現する JavaScript

この記事では、フォームの完全選択または逆選択を実現するためのJavaScriptの具体的なコードを参...

WMLタグの概要

構造関連タグ--------------------------------------------...

js キャンバスは検証コードを実装し、検証コード機能を取得します

この記事の例では、検証コードを作成して取得するためのjsキャンバスの具体的なコードを共有しています。...

Vue ElementUI フォームのフォーム検証

フォーム検証は、フロントエンド開発プロセスで最もよく使用される機能の 1 つです。私の個人的な仕事経...

nginx高可用性クラスタの実装プロセス

この記事は主に、nginx 高可用性クラスタの実装プロセスを紹介します。この記事のサンプルコードは非...

プロキシはVue3データの双方向バインディングの原理を実現します

目次1. proxy と Object.defineProperty の利点2. プロキシ監視オブジ...

Linux 基本チュートリアル: 特別な権限 SUID、SGID、SBIT

序文Linux のファイルまたはディレクトリの権限については、共通の rwx 権限を知っておく必要が...

Tomcat での jar のロードに関する異常な問題の分析と解決

現象の説明:プロジェクトでは、Springboot を使用して Web プロジェクトを開始します。起...

MySQL関連のツールをいくつかお勧めします

序文:インターネット技術の継続的な発展に伴い、MySQL 関連のエコシステムはますます充実し、ますま...

MySQLの共通関数の概要

序文: MySQL データベースは、よく使用される集計関数、日付および文字列処理関数など、幅広い関数...