MYSQLの重要な知識の概要(上級)

1.データの整合性

2.マルチテーブルクエリ

3.補足

4.データベースの最適化

5.MySQLのインストールとダウンロード

6.演習


急いで手配しますので、記事にご不明な点がございましたら、お問い合わせください、ご支援ありがとうございます、一緒に進めていきましょう!

MYSQL関連の知識の概要。基本的な記事、高度な記事、高度な記事に分かれています。

1.データの整合性

(1)データベースの整合性

これは、データベースに格納されているデータが有効 であること、 つまりデータの有効性と正確性を保証するために使用され、データの整合性を保証します = テーブルの作成時にテーブルに制約を追加します
完全な分類:
- エンティティの整合性 ラインの整合性 ):
- ドメインの整合性 列の整合性 ):
- 参照整合性 関連テーブルの整合性 ):
主キー制約: 主キー
一意性制約: 一意[キー]
nullではない制約: nullではない
デフォルトの制約: デフォルト
自動インクリメント: auto_increment
外部キー制約 :外部キー
テーブルを作成するときにこれらの制約を設定し、複数の制約の間にスペースを使用することをお勧めします

(2)エンティティの整合性

エンティティ:つまり、テーブルの行 レコード )は エンティティ( エンティティ )を表します
エンティティの整合性の役割:データの各行が繰り返されていないことを識別します。
制約タイプ:
主キー制約
一意性制約
自動インクリメント列
 

(3)ドメインの整合性

ドメインの整合性の役割:このセルのデータを正しく制限し、この列の他のセルと比較しないでください
フィールドは現在のセルを表します
ドメイン整合性制約:データ型がヌルで はない制約(ヌルではない )デフォルト値の制約 (デフォルト)
チェック 制約( mysql はサポートしていません) check(sex =' male 'またはsex=' female ')

(4)参照整合性

参照 整合性
外部キー制約: FOREIGN KEY

2.マルチテーブルクエリ

 

(1)関係

1対多/多対1の関係

多対多の関係

1対1の関係

(2)文法

1. 結果セットのマージ :UNION UNION ALL
2. 接続クエリ
2.1 内部参加 [内部]参加オン
2.2 アウタージョイン アウタージョインオン
- [外側]参加
- [外側]参加
- 完全外部結合( MySQL ではサポートされていません) FULL JOIN
2.3 自然なつながり NATURALJOIN
3. サブクエリ

 

3.補足

(1)複数行追加

テーブル名 列名 に挿入値( 列値 )、( 列値 )、( 列値 ;

(2)マルチテーブルアップデート

(1)表 1、 2を 更新します。列 = 列値を設定します。 ここで、 1. 列名 = 2. 列名 および その他の資格
(2)更新 1
table1.column_name = table2.column_name ___内部結合 table2 _ _
列名 = 列値を設定します
ここで 資格

(3)複数テーブルの削除

削除 操作で使用した テーブルから削除したデータのテーブルを削除します
ここで 資格
複数のテーブルを区切るには、コンマを使用してください

(4)日付操作機能

now() は現在のシステム時刻を取得します
year( datevalue は、日付値の年を取得します
date_add( date 、間隔 計算値計算のフィールド );
注:計算値が0 より大きい場合は日付を戻すことを意味し、 0 より小さい場合 は日付を進めることを意味します。

4.データベースの最適化

1. クエリを最適化するには、全表スキャンを回避するようにしてください。最初に、 where および orderby に関係する列にインデックスを作成することを検討する必要があります。
2. where句のフィールドのnull値の判断 を回避するようにしてください。 そうしないと、エンジンはインデックスの使用を断念し、全表スキャンを実行します。データベースにはNULLを残さず、可能な限りデータベースNOT NULLを入力することをお勧めします。メモ、説明、コメントなどはNULLに設定できます。その他の場合は、 NULLを使用しないことをお勧めします
3. where句で!=または<>演算子を使用 しないようにしてください。使用しないと、エンジンはインデックスの使用を断念し、全表スキャンを実行します。
4. where句で条件を使用したり接続したりし ないようにしてください 。フィールドにインデックスがあり、フィールドにインデックスがない場合、エンジンはインデックスの使用を中止し、全表スキャンを実行します。

5.MySQLのインストールとダウンロード

https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.28-winx64.zip

6.演習

トピック

データシート:
従業員テーブル(従業員):従業員番号(empid、主キー)、名前(名前)、性別
(性別)、役職(役職)、生年月日(誕生日)、部門(depid)
部門(部門):部門番号(depid、主キー)、部門名(depname)
給与:従業員番号(empid)、基本給(basesalary)、ポジションワーカー
資本(タイトル給与)、控除(控除)

必要

DDLステートメント

職員:

CREATE TABLE `employee`(
  ` empid` int(20)NOT NULL AUTO_INCREMENT、
  `name` varchar(255)COLLATE utf8_bin DEFAULT NULL、
  ` sex` varchar(2)COLLATE utf8_bin DEFAULT NULL、
  `title` varchar(255)COLLATE utf8_bin DEFAULT NULL、
  `birthday` varchar(255)COLLATE utf8_bin DEFAULT NULL、
  ` depid` int(11)DEFAULT NULL、
  PRIMARY KEY( `empid`)
)ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_bin;

デパートメント:

CREATE TABLE `department`(
  ` depid` int(20)NOT NULL、
  `depname` varchar(255)COLLATE utf8_bin DEFAULT NULL、
  PRIMARY KEY(` depid`)
)ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_bin;

給料:

CREATE TABLE `salary`(
  ` empid` int(20)NOT NULL、
  `basesalary` decimal(10,2)DEFAULT NULL、
  ` titlesalary` decimal(10,2)DEFAULT NULL、
  `deduction` varchar(255)COLLATE utf8_bin DEFAULT NULL、
  主キー( `empid`)
)ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_bin;

1.テーブル構造を変更し、部門プロファイルフィールドを部門テーブルに追加します
ALTER TABLE department ADD departdesc VARCHAR(50);
2. Li Siの役職を「エンジニア」に変更し、基本給を2000に変更し、役職を700に変更します。
UPDATE employee e INNER JOIN salary s ON e.empid=s.empid SET e.title='工程师' ,s.basesalary=2000,s.titilsaraly=700 WHERE e.name='李四';
3.HR部門の部門レコードを削除します
DELETE FROM department WHERE depname='人事部';
4.各従業員の従業員数、実際の給与、および支払われる給与を確認します
SELECT empid,basesalary+titilsaraly-deduction AS '实发工资',basesalary+titilsaraly AS '应发工资' FROM salary;
5.名前がZhangで、年齢が40歳未満の従業員のレコードを照会します。
SELECT * FROM employee WHERE LIKE '张%' AND `DATABASE`(NOW(),`INTERVAL -40 YEAR)<birthday;
6.従業員の従業員番号、名前、役職、部門名、および実際の給与を照会します
SELECT empid,name,title,depid,basesalary+titilsaraly-deduction AS '实发工资' FROM salary
7.営業部門の従業員の名前と給与を照会します
SELECT e.name,e.basesalary,e.titilsaraly,e.deduction from employee e,department d,salary s WHERE w,empid=s.empid and w.empid=d.dename='销售部';
8.各タイトルの人数を数えます
SELECT title,COUNT(*) FROM employee GROUP BY title;
9.各部門の部門名、支払われた総給与、および平均給与に関する統計
SELECT dename,sum(s.basesalary+s.titilsaraly-s.deduction),AVG([DISTINCT] s.basesalary+s.titilsaraly-s.deduction) FROM employee e,department d,salary s WHERE
e.empid=s.empid AND d.empid=e.empid GROUP BY depname;
10.基本給が営業部門の全従業員よりも高い従業員の名前を見つけます
SELECT name,e.basesalaryfrom employee e,salary s WHERE e.empid=s.empid AND e.empid=s,empid AND e.basesalary>(SELECT MAX(basesalary) FROM employee e,salary s
department d WHERE e.empid=s.empid AND d,empid=e.empid AND d.department='销售部');


上級章は終わりました!

おすすめ

転載: blog.csdn.net/qinluyu111/article/details/123019947