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でIPアドレスが表示されない問題の解決方法

目次序文解決:ステップ1ステップ2序文環境: VMware Workstation 上に Linux...

Vue で axios を使用して画像をアップロードするときに発生する問題

目次FormDataとは何ですか? vueとaxiosの協力による実践的な体験追加()セット()消去...

Nodejs 組み込み暗号化モジュールを使用してピアツーピアの暗号化と復号化を実現する詳細な説明

暗号化と復号化は、通信のセキュリティを確保するための重要な手段です。すでに多くの暗号化アルゴリズムが...

ホバープロンプトにはvue2+elementuiを使用する

Vue2+elementui のホバー プロンプトは、外部と内部に分かれています。内部のものは el...

単一の MySQL テーブル内の行数が 500 万を超えてはいけないのはなぜですか?

今日は、興味深いトピックについてお話ししましょう。データベースとテーブルを分割することを検討する前に...

MySQLのスロークエリの詳細な説明

MySQL操作情報のクエリ show status -- すべての MySQL 操作情報を表示します...

SCSS スタイルのコードを 50% 削減する 14 の実践的な経験

序文Sass は CSS3 言語の拡張機能です。Sass を使用すると、より良いスタイルシートをより...

子コンポーネントで vue activated を使用する詳細

ページ: ベース: <テンプレート> <div class="タブコンテ...

Linux のごみ箱メカニズムの実装プロセスと使用方法の詳細な説明

序文: Linux システムでの rm は元に戻せません。コマンドの設計自体に問題はありません。問題...

Tomcat 例外の解決方法 (リクエスト ターゲットに無効な文字が見つかりました。有効な文字は RFC 7230 および RFC 3986 で定義されています)

1. シナリオ表示Tomcat ログに次の例外情報が時々報告されます。何が起こっているのでしょうか...

スケーラブルな列の完全な例を実現するための Ant 設計 Vue テーブル

ant-design-vue テーブルのスケーラブルな列の問題に対する完璧なソリューション。固定列と...

スネークゲームのウェブ版を実装するためのJavaScript

この記事では、ウェブページのスネークゲームを実装するためのJavaScriptの具体的なコードを参考...

MySQLクライアントとサーバーのプロトコルの解釈

目次MySQL クライアント/サーバー プロトコルMySQL サーバーから高いパフォーマンスを得る必...

Alibaba Cloud ECS クラウド サーバー (Linux システム) は、MySQL をインストールした後にリモートで接続できません (落とし穴)

昨日、1年間使用していた Alibaba Cloud サーバーを購入しました。システムは Linux...