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
、を返しますworkno
。age
select name, worknum, age from empolyee;
B. 従業員の ID 番号を確認し、エイリアスを作成する
SELECT name, idcard '身份证号' FROM empolyee;
C. 従業員の年齢を重複なくクエリする
SELECT DISTINCT age '年龄' FROM empolyee;
3条件クエリ
文法
SELECT 字段列表 FROM 表名 WHERE 条件列表;
状態
一般的に使用される比較アルゴリズム
比較アルゴリズム | 関数 |
---|---|
> | 以上 |
>= | 以上 |
< | 未満 |
<= | 以下 |
= | 等しい |
<> または != | 等しくない |
…と…の間 | 一定の範囲内(最小値、最大値を含む) |
で(…) | 複数選択後のリスト内の値 |
「いいね!」プレースホルダー | あいまい一致 (_ は単一の文字に一致し、% は任意の数の文字に一致します) |
無効である | 無効である |
よく使用される論理演算子
論理演算子 | 関数 |
---|---|
および または && | そして (複数の条件が同時に満たされる) |
または または || | または (複数の条件のいずれか 1 つが true) |
そうではない、あるいは! | いいえ、いいえ |
場合
年龄等于21
従業員情報のクエリ
SELECT * FROM empolyee WHERE age=21;
年龄大于21
従業員情報のクエリ
SELECT * FROM empolyee WHERE age>21;
身份证号为空
従業員情報のクエリ
SELECT * FROM empolyee WHERE idcard IS NULL;
身份证号不为空
従業員情報のクエリ
SELECT * FROM empolyee WHERE idcard IS NOT NULL;
年龄不等于21
従業員情報のクエリ
SELECT * FROM empolyee WHERE age != 21;
年龄大于等于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;
クエリ年龄为24
と性别为女
従業員情報
SELECT * FROM empolyee WHERE age=24 AND gender='女';
お問い合わせ年龄为24
または21
従業員情報
SELECT * FROM empolyee WHERE age=24 OR age=21;
SELECT * FROM empolyee WHERE age IN (21, 24);
姓名为两个字
従業員情報のクエリ
SELECT * FROM empolyee WHERE name like '__';
身份证号最后一位是X
従業員情報のクエリ
SELECT * FROM empolyee WHERE idcard LIKE '%X';
SELECT * FROM empolyee WHERE idcard LIKE '_________________X';
4 集計関数
集計関数とは何ですか?
データの列を全体として取得し、垂直方向の計算を実行します。
一般的な集計関数
関数 | 関数 |
---|---|
カウント | 総数 |
最大 | 最大値 |
分 | 最小値 |
平均 | 平均値 |
和 | 和 |
文法
SELECT 聚合函数(字段列表) FROM 表名 ;
注: NULL 値は、すべての集計関数の操作に参加するわけではありません。
場合
A. 統計员工数量
SELECT COUNT(*) FROM empolyee;
SELECT COUNT(idcard) FROM empolyee;
B. 従業員の統計平均年龄
SELECT AVG(age) FROM empolyee;
C. 統計職員最大年龄
SELECT MAX(age) FROM empolyee;
D. 従業員の統計最小年龄
SELECT MIN(age) FROM empolyee;
E. 男性従業員の統計年龄之和
SELECT SUM(age) FROM empolyee WHERE gender = '男';
5 グループクエリ
文法
SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后过滤条件 ];
どこにあるかと持っているの違い
- 実行タイミングが異なります。where はグループ化する前にフィルタリングされます。where 条件が満たされない場合、グループ化は参加されません。
- そして、グループ化した後に結果をフィルタリングする必要があります。判定条件が異なり、集計関数は判定できないが、ある場合は判定できる。
知らせ:
- グループ化後、クエリされるフィールドは通常、集計関数とグループ化フィールドであり、他のフィールドをクエリしても意味がありません。
- 実行順序:
where
> 集計関数 >having
。- 複数フィールドのグループ化をサポートします。具体的な構文は次のとおりです。
group by columnA,columnB
A.性別によるグループ、統計男性员工 和 女性员工的数量
SELECT gender, COUNT(*) FROM empolyee GROUP BY gender;
B.性別によるグループ、統計男性员工 和 女性员工的平均年龄
SELECT gender, AVG(age) FROM empolyee GROUP BY gender;
C.年龄小于45
従業員にクエリを実行し、それに基づいて勤務先住所工作地址分组
を取得します。员工数量大于等于2
SELECT workaddress, count(*) address_count
FROM empolyee
WHERE age < 45
GROUP BY workaddress
HAVING address_count >= 2;
D.工作地址
就業中の男女の統計数量
SELECT workaddress, gender, count(*) '数量'
FROM empolyee
GROUP BY gender , workaddress;
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;
B. 入社日に応じた社員研修の実施降序排序
SELECT * FROM empolyee ORDER BY entrydate DESC;
C. 年齢に応じた処遇升序排序
同一年齢の場合、入社日により配属されます。降序排序
SELECT * FROM empolyee ORDER BY age ASC , entrydate DESC;
7 ページングクエリ
文法
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;
予防:
- 開始インデックスは 0 から始まり、開始インデックス = (クエリ ページ番号 - 1) * 各ページに表示されるレコードの数になります。
- ページング クエリはデータベースの方言であり、データベースが異なれば実装も異なります。MySQL では、これは LIMIT です。
- クエリがデータの最初のページに対するものである場合、開始インデックスを省略して、単純に制限 10 に短縮できます。
場合
A. ページ 1 で従業員データをクエリし、各ページに 10 件のレコードを表示します
SELECT * FROM empolyee LIMIT 0, 5;
SELECT * FROM empolyee LIMIT 5;
B. ページ 2 の従業員データをクエリし、各ページに 10 レコードを表示します -------> (ページ番号 -1) * ページに表示されるレコードの数
SELECT * FROM empolyee LIMIT 5, 5;
8件
20歳、21歳、22歳、23歳の女性社員に質問
SELECT * FROM empolyee
WHERE gender='女'
AND age in (20,21,22,23);
性別が男性、年齢が 22 ~ 23 歳、名前が 2 文字の従業員をクエリします。
SELECT * FROM empolyee
WHERE gender='男'
AND age
BETWEEN 22 AND 23
AND name LIKE '__';
60歳未満の男性および女性従業員の数を照会します。
SELECT gender, COUNT(*) FROM empolyee
WHERE age < 60
GROUP BY gender;
35歳以下の従業員の名前と年齢をクエリし、年齢の昇順にソートし、年齢が同じ場合は入社日の降順にソートします。
SELECT name, age FROM empolyee
WHERE age <= 35
ORDER BY age ASC, entrydate DESC;
性別が男性、年齢が20~40代の従業員5名の情報を照会し、年齢の昇順にソートし、年齢が同じ場合は入社日の昇順にソートします。
SELECT * FROM empolyee
WHERE gender='男' AND
age BETWEEN 20 AND 40
ORDER BY age ASC, entrydate DESC LIMIT 5;