Mysqlテーブルの追加、削除、変更、および高度なエントリと実際の戦闘の確認

Mysqlの追加、削除、変更、およびチェック(詳細)

1.制約タイプ

  • NOTNULL-列にNULL値を格納できないことを示します。
  • UNIQUE-列の各行に一意の値が必要であることを確認します。
  • DEFAULT-列に値が割り当てられていない場合のデフォルト値を指定します。
  • PRIMARY KEY-NOTNULLとUNIQUEの組み合わせ。列(または2つの列と複数の列の組み合わせ)に一意の識別子があることを確認してください。これにより、テーブル内の特定のレコードをより簡単かつ迅速に見つけることができます。
  • FOREIGNKEY-あるテーブルのデータが別のテーブルの値と一致することを保証する参照整合性。
  • チェック-列の値が指定された条件を満たすことを確認します。MySQLデータベースの場合、CHECK句は分析されますが、CHECK句は無視されます。

2.テーブルデザイン(3つのパラダイム)

2.11対1

  • 説明:2つのテーブル(個人テーブル、IDテーブル)があり、個人テーブルで個人を指定するメッセージによると、IDテーブルで唯一のレコードが見つかり、それに応じて個人テーブルでも同じレコードが見つかります。 IDカードのIDに唯一の人を見つけてください。これは1対1です。
    ここに画像の説明を挿入

2.21対多

  • 説明:学生テーブル内のメッセージによると、あなたがに対応することができ、クラス番号とレコードクラステーブルクラステーブル内のクラスの数によると、あなたは見つけることができ、複数のレコードを学生テーブル内に存在しなければならないので(クラス内の複数の学生)、これは1対多です。

    ここに画像の説明を挿入

2.3多対多

  • 説明:
    1。多対多。一般に、2つのテーブルが関連していない場合、それらの間に関係はありません
    。2。たとえば、学生がコースを選択しなかった場合、または受講した場合、学生テーブルと以下のコーステーブルこのコースの試験、彼らは問題ではありませんが、学生がそのようなコースを選択すると、学生は学生とコースの関係を確立するためのタイムテーブルを生成します
    。3。学生は複数のコースを選択しますコースは複数の学生によって選択されます。コースとタイムテーブルの間には1対多があります
    。4。同じタイムテーブル内の1つのコースについて、コースの中央のテーブルに複数のレコードがあり、の中央のテーブルに1つのレコードがあります。コース、コースの印刷も1対多です
    。5。このようにして、この中間テーブルを介して、学生テーブルとカリキュラムテーブルの間に多対多が確立されます。
    ここに画像の説明を挿入
  • 演習では、多対多のテーブル作成の方法を説明します

2.4学校の寮管理システム

  • 質問:要件には、寮情報、学生情報、および毎日の寮ラウンドが含まれます

3つのテーブル:学生テーブル、寮のラウンドレコードテーブル(中央のテーブル)、寮のテーブル。

  • 思考の分析:(中央のテーブル)学生番号を介して学生テーブルに連絡し、寮の建物番号を介して寮の建物に連絡します。

    //学生(stu)テーブルを作成します(学生番号(主キー)、名前、寮番号)

    //寮(家)テーブルを作成します(寮の建物番号(主キー)、寮番号、学生学生番号、学生寮番号)

    //寮のラウンドレコード(h_record)テーブル(中間テーブル)(日付(主キー)、学生番号(外部キー)、寮の建物(外部キー)、存在しないかどうか)を作成します

2.4.1学生(stu)テーブル(学生番号、名前、寮番号)を作成します
create table stu (id varchar(20) primary key,
name varchar(20),
h_id int
);
2.4.2寮(家)のテーブルを作成します(寮の建物番号(主キー)、学生の学生番号、学生の寮番号)
create table house(number int primary key,
s_id varchar(20),
h_id int
);
2.4.3寮のラウンドレコード(h_record)テーブル(中央のテーブル)(日付(主キー)、学生番号(外部キー)、寮の建物番号(外部キー)、存在しないかどうか)を作成します。
create table h_record(time timestamp primary key,
s_id varchar(20),
number int,
absence varchar(5),
foreign key (s_id) references stu(id),
foreign key (number) references house(number)
);

3.新規(クエリ結果を挿入)

/*将学生表中的所有数据复制到用户表*/
insert into test_user(name, email) select name, qq_mail from student

4.クエリ

4.1集計クエリ

4.1.1集計関数
  • count():クエリされたデータ(結果セット)の数を返します。
select count(*) from student where id > 2;
  • sum():意味のない数値ではなく、クエリされたデータの合計を返します。
 select sum(列名) from student;
  • avg():クエリされたデータの平均値を返します。意味のない数値ではありません
 select avg(列名) from student;
  • max():クエリされたデータの最大値を返します。意味のない数値ではありません。
 select max(列名) from student;
  • min():数値ではなく、クエリされたデータの最小値を返します。意味がありません。
 select min(列名) from student;
4.1.2 group by句(グループ化)
  • 1.グループアップフィールド、グループクエリ、クエリフィールドはグループフィールドである必要があります。非グループフィールドの場合は、最小の粒度を使用する必要があります。

select * from student group by name;/*将学生表中名字一样的放在一组,*一般只使用分组列和计数列(count);
4.1.3ステートメントを持っている(グループ化後のフィルタリングを表す)(グループ化の前に使用される場所、... group by ...)
  • 平均給与が1500未満の役割とその平均給与を示します
select role,max(salary),min(salary),avg(salary) from emp group by role
having avg(salary)<1500;/*先分组在写having条件*/

4.2共同クエリ

4.2.1内部接続
  • 文法:

    select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件;
    select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;
    
4.2.2外部接続
  • 概念:外部結合は、左外部結合と右外部結合に分けられます。クエリが組み合わされている場合は、左の表は、完全に表示されていると我々はそれが左外部結合であると言う右の表が完全に表示され、我々は右の外部結合と呼ばれています。

  • 構文:(左:左接続右:右接続)

-- 左外连接,表1完全显示
select 字段名  from 表名1 left join 表名2 on 连接条件;
-- 右外连接,表2完全显示
select 字段 from 表名1 right join 表名2 on 连接条件;
4.2.3自己接続
  • 概念:自己結合とは、同じテーブルで自分自身を結合することによってクエリを実行することを指します。
4.2.4サブクエリ
  • 概念:サブクエリは、ネストされたクエリとも呼ばれる、他のSQLステートメントに埋め込まれたselectステートメントを指します
  • 分類:単一行サブクエリ、複数行サブクエリ
4.2.5結合クエリ(union、union all)
  • union:この演算子は、2つの結果セットの和集合を取得するために使用されます。この演算子を使用すると、結果セット内の重複する行自動的に削除されます。
  • union all:この演算子は、2つの結果セットの和集合を取得するために使用されます。この演算子を使用すると、結果セット内の重複する行は削除されません

5.印象を深める練習

  • テーブルを作成してデータを追加する
drop table if exists A;
create table A(name varchar(32),
	grade int
);
/*添加数据*/
insert into A VALUES('zhangshan',80),
('list',60),
('wangwu',84);

ここに画像の説明を挿入

  • Bテーブルを作成してデータを追加する
drop table if exists B;
create table B(name varchar(32),
	age int
);
/*添加数据*/
insert into B VALUES('zhangshan',26),
('list',24),
('wangwu',26),
('wutian',26);

ここに画像の説明を挿入

  • 外部接続の正しい接続に応じて、次の表を表示できます(表Aは3レコードのみ、Bは4レコードです。AとBとの接続を確立することにより、4レコードを表示できます)
select B.name,A.grade,B.age
from A right join B
on A.name = B.name;

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_45665172/article/details/109632060