記事のディレクトリ
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で埋められます。
文法
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つのテーブルの名前が交換され、左結合を使用して完了することができるため、一般的には使用されません。