MySQLデータベース_データクエリ_ページング、リンククエリ

MySQLデータベース

ページネーション

いくつかの行を取得します

  • データ量が多すぎると、1ページでデータを表示するのが非常に面倒です。

文法

select * from 表名 limit start,count

説明

  • 最初から、カウントデータを取得します
--限制查询出来的个数
select * from students where gender=1 limit 2;

--查询前5个数据
select * from students limit 0, 5;

--查询6-10(包含)的数据
select * from students limit 5, 5;



--每页显示2个,第1个页面
select * from students limit 0, 2;

--每页显示2个,第2个页面
select * from students limit 2, 2;

--每页显示2个,第3个页面
select * from students limit 4, 2;

--每页显示2个,第4个页面
select * from students limit 6, 2;    -- ---> limit (第n页-1)*每个的个数,每一页的个数;

--每页显示2个,显示第6也的信息,按照年龄从小到大排序
--错误的查询方法1:select * from students limit 2*(6-1), 2;
--错误的查询方法2:select * from students limit 10, 2 order by age asc;

select * from students order by age asc limit 10, 2;

select * from students where gender=2 order by height desc limit 0, 2;

リンククエリ

  • クエリ結果の列が複数のテーブルからのものである場合、複数のテーブルを大きなデータセットに結合してから、返す適切な列を選択する必要があります
  • 通常、複数テーブルのクエリに使用されますが、単一テーブルのクエリの場合はほとんど役に立ちません。

mysqlは、次の3種類の接続クエリをサポートしています。

  • 内部結合クエリ:クエリの結果は、2つのテーブルと一致するデータです。

インナージョイン

  • 外部リンクは「左リンクと右リンク」に分かれています

    • 左結合クエリ:クエリの結果は、2つのテーブルと一致するデータ、左のテーブルに固有のデータ、および右のテーブルに存在しないデータはnullで埋められます。

    左結合

    • 右結合クエリ:クエリの結果は、2つのテーブルと一致するデータ、右のテーブルに固有のデータ、および左のテーブルに存在しないデータはnullで埋められます。

    rightjoin

文法

select * from 表1 inner或left或right join 表2 on 表1.列 = 表2.列

内部リンククエリの例:

  • 取る交集
--查询 有能够对应班级的学生以及班级信息
select * from students inner join classes on students.cls_id=classes.id;

--按照要求显示姓名、班级
select students.*,classes.name from students inner join classes on students.cls_id=classes.id;

select students.name,classes.name from students inner join classes on students.cls_id=classes.id;

--给数据表起名字
select s.name,c.name from students as s. inner join classes as c on s.cls_id = c.id;

--查询 有能够对应班级的学生以及班级信息,显示学生的所有信息,只显示班级名称
select s.*,c.name from student as s inner join classes as c on s.cls_id=c.id;

--在以上的查询中,将班级姓名显示在第1列
select c.name,s.* from students as s inner join classes as c on s.cls_id=c.id;

--查询 有能够对应班级的学生以及班级信息,按照班级进行排序
select c.name,s.* from students as s inner join classes as c on s.cls_id=c.id order by c.name;

--当是同一个班的时候,按照学生的id进行从小到大排序
select c.name,s.* from students as s inner join classes as c on s.cls_id=c.id order by c.name,s.id;

左リンククエリの例:

  • 左側の表で、データを取得するためのベンチマークとして表を使用します。取得できない場合、デフォルトはNULL
--查询每位学生对应的班级信息
select * from students as s left join classes as c on s.cls_id=c.id;

--查询没有对应班级信息的学生
select * from students as s left join classes as c on s.cls_id=c.id having c.id is null;

select * from students as s left join classes as c on s.cls_id=c.id where c.id is null;
  • 使用havingしてはwhere達成することができますが、2つの違いはどこにありますか?
    • 結果が元のテーブルから判断される場合は、 where
    • 検索からの新しい結果が結果セットと見なされる場合、結果は結果セットで判断され、次に使用します。 having

右リンククエリの例:

  • 右側の表で、データを取得するためのベンチマークとして表を使用します。取得できない場合、デフォルトはNULL
  • 通常の状況では、2つのテーブルの名前が交換され、左結合を使用して完了することができるため、一般的には使用されません。

おすすめ

転載: blog.csdn.net/weixin_42250835/article/details/90423457