MySQLチュートリアル(5):DQL学習

MySQLチュートリアル(5):DQL学習

DQLData Query Languageデータ クエリ言語。查询数据库中表的记录

1 基本的な文法

DQL クエリ ステートメントの構文構造は次のとおりです。

SELECT
	字段列表
FROM
	表名列表
WHERE
	条件列表
GROUP BY
	分组字段列表
HAVING
	分组后条件列表
ORDER BY
	排序字段列表
LIMIT
	分页参数

次の部分に分かれています。

  • 基本的なクエリ (条件なし)
  • 条件付きクエリ (WHERE)
  • 集計関数 (カウント、最大、最小、平均、合計)
  • グループクエリ(グループ化)
  • 並べ替えクエリ (並べ替え)
  • ページング クエリ (制限)

2 基本的なクエリ

複数のフィールドをクエリする

SELECT 字段1, 字段2, 字段3... FROM 表名;
SELECT * FROM 表名;

注: * はすべての単語のクエリを表すため、実際の開発ではできるだけ使用しないでください (直感的ではなく、効率に影響します)。

フィールド設定エイリアス

SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... FROM 表名;

AS省略することもできます:

SELECT 字段1 [ 别名1 ] , 字段2 [ 别名2 ] ... FROM 表名;

重複したレコードを削除する

SELECT DISTINCT 字段列表 FROM 表名;

場合

A. 指定されたフィールドをクエリしnameを返しますworknoage

select name, worknum, age from empolyee;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-mVs1bEXJ-1689737094170) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719105556960.png)]

B. 従業員の ID 番号を確認し、エイリアスを作成する

SELECT name, idcard '身份证号' FROM empolyee;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-PrhV6Hpc-1689737094171) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719105748800.png)]

C. 従業員の年齢を重複なくクエリする

SELECT DISTINCT age '年龄' FROM empolyee;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-ELVu3trW-1689737094171) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719105926010.png)]

3条件クエリ

文法

SELECT 字段列表 FROM 表名 WHERE 条件列表;

状態

一般的に使用される比較アルゴリズム

比較アルゴリズム 関数
> 以上
>= 以上
< 未満
<= 以下
= 等しい
<> または != 等しくない
…と…の間 一定の範囲内(最小値、最大値を含む)
で(…) 複数選択後のリスト内の値
「いいね!」プレースホルダー あいまい一致 (_ は単一の文字に一致し、% は任意の数の文字に一致します)
無効である 無効である

よく使用される論理演算子

論理演算子 関数
および または && そして (複数の条件が同時に満たされる)
または または || または (複数の条件のいずれか 1 つが true)
そうではない、あるいは! いいえ、いいえ

場合

年龄等于21従業員情報のクエリ

SELECT * FROM empolyee WHERE age=21;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-XoNBZSEV-1689737094172) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719110525388.png)]

年龄大于21従業員情報のクエリ

SELECT * FROM empolyee WHERE age>21;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-KHMgIzSL-1689737094172) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719110552571.png)]

身份证号为空従業員情報のクエリ

SELECT * FROM empolyee WHERE idcard IS NULL;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-XRdd492C-1689737094172) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719110959208.png)]

身份证号不为空従業員情報のクエリ

SELECT * FROM empolyee WHERE idcard IS NOT NULL;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-91EtIAcj-1689737094172) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719111042476.png)]

年龄不等于21従業員情報のクエリ

SELECT * FROM empolyee WHERE age != 21;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-0ZAwHW1g-1689737094173) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719111134473.png)]

年龄大于等于22并且小于等于24従業員情報のクエリ

SELECT * FROM empolyee WHERE age>=22 && age<=24;

SELECT * FROM empolyee WHERE age>=22 AND age<=24;

# BETWEEN后跟的是最小值,AND后跟的是最大值,切不可写反了
SELECT * FROM empolyee WHERE age BETWEEN 22 AND 24;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-qOna1zHU-1689737094173) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719111257433.png)]

クエリ年龄为24性别为女従業員情報

SELECT * FROM empolyee WHERE age=24 AND gender='女';

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-Dun3vDo6-1689737094173) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719111532428.png)]

お問い合わせ年龄为24または21従業員情報

SELECT * FROM empolyee WHERE age=24 OR age=21;

SELECT * FROM empolyee WHERE age IN (21, 24);

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-kmFw4yJB-1689737094173) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719111608847.png)]

姓名为两个字従業員情報のクエリ

SELECT * FROM empolyee WHERE name like '__';

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-nCJeV1ni-1689737094173) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719111815549.png)]

身份证号最后一位是X従業員情報のクエリ

SELECT * FROM empolyee WHERE idcard LIKE '%X';

SELECT * FROM empolyee WHERE idcard LIKE '_________________X';

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-AabY1qWa-1689737094174) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719112039324.png)]

4 集計関数

集計関数とは何ですか?

データの列を全体として取得し、垂直方向の計算を実行します。

一般的な集計関数

関数 関数
カウント 総数
最大 最大値
最小値
平均 平均値

文法

SELECT 聚合函数(字段列表) FROM 表名 ;

注: NULL 値は、すべての集計関数の操作に参加するわけではありません。

場合

A. 統計员工数量

SELECT COUNT(*) FROM empolyee;

SELECT COUNT(idcard) FROM empolyee;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-wY6mSGVv-1689752070614) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719153316863.png)]

B. 従業員の統計平均年龄

SELECT AVG(age) FROM empolyee;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-Mgc4q1mo-1689752070614) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719153303255.png)]

C. 統計職員最大年龄

SELECT MAX(age) FROM empolyee;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-tAxfPFkc-1689752070614) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719153255630.png)]

D. 従業員の統計最小年龄

SELECT MIN(age) FROM empolyee;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-H9CTmqkk-1689752070614) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719153246045.png)]

E. 男性従業員の統計年龄之和

SELECT SUM(age) FROM empolyee WHERE gender = '男';

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-CveZdeuh-1689752070615) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719153236042.png)]

5 グループクエリ

文法

SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后过滤条件 ];

どこにあるかと持っているの違い

  • 実行タイミングが異なります。where はグループ化する前にフィルタリングされます。where 条件が満たされない場合、グループ化は参加されません。
  • そして、グループ化した後に結果をフィルタリングする必要があります。判定条件が異なり、集計関数は判定できないが、ある場合は判定できる。

知らせ:

  • グループ化後、クエリされるフィールドは通常、集計関数とグループ化フィールドであり、他のフィールドをクエリしても意味がありません。
  • 実行順序: where> 集計関数 > having
  • 複数フィールドのグループ化をサポートします。具体的な構文は次のとおりです。group by columnA,columnB

A.性別によるグループ、統計男性员工 和 女性员工的数量

SELECT gender, COUNT(*) FROM empolyee GROUP BY gender;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-79a5Rg20-1689752870980) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719154635811.png)]

B.性別によるグループ、統計男性员工 和 女性员工的平均年龄

SELECT gender, AVG(age) FROM empolyee GROUP BY gender;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-6a1AH9qN-1689752870980) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719154628571.png)]

C.年龄小于45従業員にクエリを実行し、それに基づいて勤務先住所工作地址分组を取得します。员工数量大于等于2

SELECT workaddress, count(*) address_count
FROM empolyee
WHERE age < 45
GROUP BY workaddress
HAVING address_count >= 2;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-xeQtPjgv-1689752870980) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719154621138.png)]

D.工作地址就業中の男女の統計数量

SELECT workaddress, gender, count(*) '数量'
FROM empolyee
GROUP BY gender , workaddress;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-4QEKn9qk-1689752870980) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719154611960.png)]

6 ソートクエリ

文法

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;

並べ替え

  • ASC: 昇順 (デフォルト)
  • DESC: 降順

知らせ:

昇順の場合は、ソート方法として「ASC」を指定する必要はありません。

複数フィールドの並べ替えの場合、最初のフィールドの値が同じ場合にのみ、2 番目のフィールドが並べ替えられます。

場合:

A. 従業員の年齢に基づいたテストを実施する升序排序

SELECT * FROM empolyee ORDER BY age ASC;

SELECT * FROM empolyee ORDER BY age;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-aoV3w0xl-1689753482314) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719155457723.png)]

B. 入社日に応じた社員研修の実施降序排序

SELECT * FROM empolyee ORDER BY entrydate DESC;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-nHn45H0r-1689753482314) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719155601265.png)]

C. 年齢に応じた処遇升序排序同一年齢の場合、入社日により配属されます。降序排序

SELECT * FROM empolyee ORDER BY age ASC , entrydate DESC;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-HbPklQzS-1689753482315) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719155710736.png)]

7 ページングクエリ

文法

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;

予防:

  • 開始インデックスは 0 から始まり、開始インデックス = (クエリ ページ番号 - 1) * 各ページに表示されるレコードの数になります。
  • ページング クエリはデータベースの方言であり、データベースが異なれば実装も異なります。MySQL では、これは LIMIT です。
  • クエリがデータの最初のページに対するものである場合、開始インデックスを省略して、単純に制限 10 に短縮できます。

場合

A. ページ 1 で従業員データをクエリし、各ページに 10 件のレコードを表示します

SELECT * FROM empolyee LIMIT 0, 5;

SELECT * FROM empolyee LIMIT 5;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-Otz8HjdH-1689753848341) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719160302119.png)]

B. ページ 2 の従業員データをクエリし、各ページに 10 レコードを表示します -------> (ページ番号 -1) * ページに表示されるレコードの数

SELECT * FROM empolyee LIMIT 5, 5;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-xRrWDktE-1689753848342) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719160355413.png)]

8件

20歳、21歳、22歳、23歳の女性社員に質問

SELECT * FROM empolyee 
WHERE gender='女' 
AND age in (20,21,22,23);

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-VWzMVFje-1689754717639) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719160611781.png)]

性別が男性、年齢が 22 ~ 23 歳、名前が 2 文字の従業員をクエリします。

SELECT * FROM empolyee 
		WHERE gender='男' 
		AND age 
		BETWEEN 22 AND 23 
		AND name LIKE '__';

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-2pqKwdyQ-1689754717639) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719160655552.png)]

60歳未満の男性および女性従業員の数を照会します。

SELECT gender, COUNT(*) FROM empolyee 
						WHERE age < 60 
						GROUP BY gender;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-hnslKXqM-1689754717640) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719161119264.png)]

35歳以下の従業員の名前と年齢をクエリし、年齢の昇順にソートし、年齢が同じ場合は入社日の降順にソートします。

SELECT name, age FROM empolyee 
                 WHERE age <= 35 
                 ORDER BY age ASC, entrydate DESC;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-0bDeHciB-1689754717640) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719161457772.png)]

性別が男性、年齢が20~40代の従業員5名の情報を照会し、年齢の昇順にソートし、年齢が同じ場合は入社日の昇順にソートします。

SELECT * FROM empolyee 
         WHERE gender='男' AND 
               age BETWEEN 20 AND 40 
         ORDER BY age ASC, entrydate DESC LIMIT 5;

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-LjrbrLAE-1689754717640) (C:\Users\Administrator\AppData\Roaming\Typora\) typora-user-images\ image-20230719161757900.png)]

9 実行シーケンス

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/WwLK123/article/details/131804855