データベース操作(2) 高度なクエリ(選択)

この記事では実験にnavicatを使用しており、ID、名前、住所、パスワード、メール、数学、英語、中国語の8フィールドを含む15行8列のデータテーブルを使用しています。
使用される完全なデータベース テーブルは次のとおりです。データベースの作成に関する関連操作については、前回のブログ投稿に記載されています。
この記事で使用されている完全なデータシート


1. 重複排除 (個別)

ここに画像の説明を挿入


2 番目に並べ替え (並べ替え)

# 以下三句都是按照英语成绩来排序
# select * from users ORDER BY 7;
# select id,name,mail,english from users ORDER BY english;
select id,name,mail,english from users ORDER BY 4;

ここに画像の説明を挿入

# 如果order by后面使用数字,但是该数字的值超出了数据库的列数则产生报错。
#(该原理常用在sql注入中,用来判断数据库列数)
select * from users ORDER BY 9;

ここに画像の説明を挿入


3. 共同クエリ(ユニオン)

# 在sql注入中我们时常会使用这样的句式“union select 1,2,3”,用来找显示位。
#(前提是已经通过order by 知道列数)
select id,name,password from users union select 1,2,3;

ここに画像の説明を挿入

# union正常的作用是将两个查询语句合并在一起,可以是同一个表的,也可以是不同表的数据、
# select id,name,password from users union select Math,english,chinese from users;
# 下面的students表和users表为同一数据库中的表
select * from users union select * from students;

ここに画像の説明を挿入


4. 指定範囲(どこ)

# where操作符可与 <,>,=,!=,>=,<=,and,or,not 这些运算符结合使用
# 筛选出数学成绩大于等于80分,并且英语成绩小于50分的同学
select * from users where math>=80 and english<50;

ここに画像の説明を挿入


5. ファジークエリ(のようなもの)

# LIKE(模糊查询)子句通常用在搜索(WHERE)里面。
# %(通配符)表示任何字符出现任意次数,_表示任何字符出现一次(_只能带一个)
select * from users where mail like '%@189.com';

ここに画像の説明を挿入


6. グループ化

group by 構文は、特定のフィールドまたは式に従って選択クエリの結果セットをグループ化し、グループのセットを取得し、各グループから指定されたフィールドまたは式の値を抽出します。

各領域のスコアの合計をクエリします。

select address,sum(math) from users group by address;

ここに画像の説明を挿入

また、group by ステートメントを初めて使用したときに、次のような多くのエラーが発生しました。

select address,math from users group by address
> 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.users.math' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

このエラーの理由は、group by ステートメントの select で指定されたフィールドが「group by フィールド」である必要があり、他のフィールドを select に表示するには集計関数に含める必要があるためです。
たとえば、例では group by の後にアドレスが続いています。アドレスはグループ化の基準として使用されますが、スコアの内容も同時に確認したい場合は、スコアを集計に入れる必要があります。 sum(math) などの関数。

# 常用聚合函数
sum()  max()  min()  avg()  count()
first()  last()  # 仅Access数据库支持

上映(ある)

Have 句は、集計後にグループ レコードをフィルタリングします。

地域ごとの使用数

-- 使用count()对所有地区的人员进行分类并计数
select address,count(chinese) num from users group by address;
-- 加上having筛选出总人数大于2的地区
select address,count(chinese) num from users group by address having num>2;

ここに画像の説明を挿入
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/zibery/article/details/127202089