この記事では、MySQL の単一テーブル クエリ操作について説明します。ご参考までに、詳細は以下の通りです。 文法 1. 単一テーブルクエリ構文
2. キーワード実行の優先順位(ポイント) 最も重要なポイント:キーワード実行の優先順位 から 1. テーブル 2. whereで指定された制約に従って、ファイル/テーブルからレコードを1つずつ取得します。 3. 取得したレコードを group by でグループ化します。group by がない場合、レコード全体が 1 つにグループ化されます。 4.グループ化された結果をフィルタリングするには、 5. 選択を実行する 6. 重複排除 7. 結果を条件で並べ替える: order by 8. 表示される結果の数を制限する (1)制約条件 where演算子 where句は、 (2)クエリによるグループ化
次のSQL文を実行するとエラーは報告されませんが、それ自体は意味がありません。 mysql> 従業員グループから投稿別に * を選択します。 +----+---------+--------+-----------+------------+------------------------------------------+--------------+------------+------------+ | ID | 名前 | 性別 | 年齢 | 入社日 | 職位 | 投稿コメント | 給与 | 勤務先 | 退職ID | +----+---------+--------+-----------+------------+------------------------------------------+--------------+------------+------------+ | 14 | 張 イエ | 男性 | 28 | 2016-03-11 | 操作 | NULL | 10000.13 | 403 | 3 | | 9 | 歪歪| 女性 | 48 | 2015-03-11 | セール | NULL | 3000.13 | 402 | 2 | | 2 | alex | 男性 | 78 | 2015-03-02 | 教師 | | 1000000.31 | 401 | 1 | | 1 | egon | 男性 | 18 | 2017-03-01 | 沙河の旧少年院の大使 | NULL | 7300.33 | 401 | 1 | +----+---------+--------+-----------+------------+------------------------------------------+--------------+------------+------------+ セット内の 4 行 (0.00 秒) sql_mode を ONLY_FULL_GROUP_BY に設定し、終了してから再度入力すると、設定が有効になります。 mysql> グローバル sql_mode を 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ONLY_FULL_GROUP_BY' に設定します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) 再入力 mysql> @@sql_mode を選択します。 +-----------------------------------------------------------------------------------+ | @@sql_mode | +-----------------------------------------------------------------------------------+ | ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION | +----------------------------------------------------------------------------------- mysql> select * from emp group by post; // この場合、ERROR 1054 (42S22): Unknown column 'post' in 'group statement' が報告されます。 mysql> 従業員グループから投稿別に * を選択します。 エラー 1055 (42000): 't1.employee.id' は GROUP BY にありません mysql> post ごとに従業員グループから投稿を選択します。 +-----------------------------------------+ | 投稿 | +-----------------------------------------+ | 操作 | | セール | | 先生 | | 沙河のOld Boys Officeの外交大使 | +-----------------------------------------+ セット内の 4 行 (0.00 秒) または以下のように使用する mysql> post,name によって employee グループから name,post を選択します。 +------------+------------------------------------------+ | 名前 | 役職 | +------------+------------------------------------------+ | 張野| 作戦 | | 程耀進 | オペレーション | | チェン・ヤオティエ | オペレーション | | チェン・ヤオトン | オペレーション | | チェン・ヤオイン | オペレーション | | ディンディン | セール | | ヤヤ | セール | | スター | セール | | ゲゲ | セール | | ワイワイ | セール | | アレックス | 先生 | | jinliyang | 先生 | | ジンシン | 先生 | | liwenzhou | 教師 | | wupeiqi | 先生 | | xiaomage | 先生 | | yuanhao | 先生 | | egon | 沙河のOld Boys Officeの外交大使 | +------------+------------------------------------------+ セット内の行数は 18 です (0.00 秒) mysql> post ごとに従業員グループから post、count(id) を選択します。 +-----------------------------------------+-----------+ | 投稿 | カウント(ID) | +-----------------------------------------+-----------+ | 操作 | 5 | | セール | 5 | | 教師 | 7 | | 沙河事務所のOld Boys外交大使 | 1 | +-----------------------------------------+-----------+ セット内の 4 行 (0.00 秒) (3)集計関数 max()は最大値を求める #強調: 集計関数はグループの内容を集計します。グループがない場合は、デフォルトで 1 つのグループになります。# 各部門には何人の従業員がいますか? select post, count(id) from employee group by post; # 各部門の最高給与 select post,max(salary) from employee group by post; # 各部門の最低給与 select post,min(salary) from employee group by post; # 各部門の平均給与 select post,avg(salary) from employee group by post; # 各部門のすべての給与 select post,sum(age) from employee group by post; (4)フィルタリング HAVINGとWHEREの違いは
mysql> 給与が1000000の場合、従業員から*を選択します。 +----+------+------+-----+------------+----------+--------------+-------------+-----------+------------+ | ID | 名前 | 性別 | 年齢 | 入社日 | 職位 | 投稿コメント | 給与 | 勤務先 | 退職ID | +----+------+------+-----+------------+----------+--------------+-------------+-----------+------------+ | 2 | alex | 男性 | 78 | 2015-03-02 | 教師 | | 1000000.31 | 401 | 1 | +----+------+------+-----+------------+----------+--------------+-------------+-----------+------------+ セット内の 1 行 (0.00 秒) mysql> 給与が1000000を超える従業員から*を選択します。 エラー 1463 (42000): グループ化されていないフィールド 'salary' が HAVING 句で使用されています # group_concat() 関数を使用してすべての名前の値を連結するには、group by を使用する必要があります。mysql> select post,group_concat(name) from emp group by post having salary > 10000; ##エラー、グループ化後に給与フィールドを直接取得することはできません。ERROR 1054 (42S22): 'field list' に不明な列 'post' があります 練習する 1. 各職位の従業員数が2人未満の職位名と、各職位の従業員名と人数を照会する 答え mysql> post、group_concat(name)、count(id) を employee group by post から選択します。 +-----------------------------------------+--------------------------------------------------------+-----------+ | 投稿 | group_concat(名前) | count(ID) | +-----------------------------------------+--------------------------------------------------------+-----------+ | 操作 | Cheng Yaotie、Cheng Yaotong、Cheng Yaoyin、Cheng Yaojin、Zhang Ye | 5 | | セール | Gege、Xingxing、Dingding、Yaya、Waiwai | 5 | | 先生 | xiaomage、jinxin、jingliyang、liwenzhou、yuanhao、wupeiqi、alex | 7 | | 沙河事務所の旧友外交大使 | egon | 1 | +-----------------------------------------+--------------------------------------------------------+-----------+ セット内の 4 行 (0.00 秒) mysql> 従業員グループから、count(id)<2 を持つ post で post、group_concat(name)、count(id) を選択します。 +-----------------------------------------+--------------------+-----------+ | 投稿 | group_concat(名前) | count(ID) | +-----------------------------------------+--------------------+-----------+ | 沙河事務所の旧友外交大使 | egon | 1 | +-----------------------------------------+--------------------+-----------+ セット内の 1 行 (0.00 秒) #質問2: mysql> 従業員グループから post、avg(salary) を選択します。post は avg(salary) > 10000 を持ちます。 +-----------+---------------+ | 役職 | 平均(給与) | +-----------+---------------+ | 操作 | 16800.026000 | | 教師 | 151842.901429 | +-----------+---------------+ セット内の 2 行 (0.00 秒) #質問3: mysql> avg(salary) > 10000 かつ avg(salary) <20000 である post を持つ従業員グループから post、avg(salary) を選択します。 +-----------+--------------+ | 役職 | 平均(給与) | +-----------+--------------+ | 操作 | 16800.026000 | +-----------+--------------+ セット内の 1 行 (0.00 秒) (5) クエリソートによる順序 単一列で並べ替え SELECT * FROM employee ORDER BY age; SELECT * FROM employee ORDER BY age ASC; SELECT * FROM employee ORDER BY age DESC; 複数の列で並べ替える: 最初に年齢の昇順で並べ替え、年齢が同じ場合は ID の降順で並べ替えます。 従業員から*を選択 年齢順(ASC) id DESC; (5)制限は、照会されるレコードの数を制限します。 例: SELECT * FROM 従業員 ORDER BY 給与 DESC LIMIT 3; #デフォルトの初期位置は0です SELECT * FROM 従業員 ORDER BY 給与 DESC LIMIT 0,5; #0番から開始します。つまり、最初に最初の項目を照会し、次にこの項目を含む次の5つの項目を照会します。SELECT * FROM employee ORDER BY salary DESC LIMIT 5,5; #5番目の項目から開始します。つまり、最初に6番目の項目を見つけ、次にこれを含む次の5つの項目を見つけます。 練習: 一度に5つのアイテムを表示する # ページ 1 datamysql> select * from employee limit 0,5; +----+-----------+-----+-----+-------------+------------------------------------------+--------------+------------+------------+------------+ | ID | 名前 | 性別 | 年齢 | 入社日 | 職位 | 投稿コメント | 給与 | 勤務先 | 退職ID | +----+-----------+-----+-----+-------------+------------------------------------------+--------------+------------+------------+------------+ | 1 | egon | 男性 | 18 | 2017-03-01 | 沙河の旧少年院の大使 | NULL | 7300.33 | 401 | 1 | | 2 | alex | 男性 | 78 | 2015-03-02 | 教師 | | 1000000.31 | 401 | 1 | | 3 | wupeiqi | 男性 | 81 | 2013-03-05 | 教師 | NULL | 8300.00 | 401 | 1 | | 4 | yuanhao | 男性 | 73 | 2014-07-01 | 教師 | NULL | 3500.00 | 401 | 1 | | 5 | liwenzhou | 男性 | 28 | 2012-11-01 | 教師 | NULL | 2100.00 | 401 | 1 | +----+-----------+-----+-----+-------------+------------------------------------------+--------------+------------+------------+------------+ セット内の行数は 5 です (0.00 秒) # ページ 2 datamysql> select * from employee limit 5,5; +----+------------+--------+-----------+-----------+-----------+--------------+-----------+-----------+------------+ | ID | 名前 | 性別 | 年齢 | 入社日 | 職位 | 投稿コメント | 給与 | 勤務先 | 退職ID | +----+------------+--------+-----------+-----------+----------+--------------+-----------+-----------+------------+ | 6 | jingliyang | 女性 | 18 | 2011-02-11 | 教師 | NULL | 9000.00 | 401 | 1 | | 7 | jinxin | 男性 | 18 | 1900-03-01 | 教師 | NULL | 30000.00 | 401 | 1 | | 8 | xiaomage | 男性 | 48 | 2010-11-11 | 教師 | NULL | 10000.00 | 401 | 1 | | 9 | 歪歪| 女性 | 48 | 2015-03-11 | セール | NULL | 3000.13 | 402 | 2 | | 10 | ヤヤ | 女性 | 38 | 2010-11-01 | セール | NULL | 2000.35 | 402 | 2 | +----+------------+--------+-----------+-----------+----------+--------------+-----------+-----------+------------+ セット内の行数は 5 です (0.00 秒) # ページ 3 datamysql> select * from employee limit 10,5; +----+-----------+---------+-----------+------------+------------+--------------+---------+-----------+------------+ | ID | 名前 | 性別 | 年齢 | 入社日 | 職位 | 投稿コメント | 給与 | 勤務先 | 退職ID | +----+-----------+---------+-----------+------------+------------+--------------+---------+-----------+------------+ | 11 | Ding Ding | 女性 | 18 | 2011-03-12 | セール | NULL | 1000.37 | 402 | 2 | | 12 | スター | 女性 | 18 | 2016-05-13 | セール | NULL | 3000.29 | 402 | 2 | | 13 | 格| 女性 | 28 | 2017-01-27 | セール | NULL | 4000.33 | 402 | 2 | | 14 | 張 イエ | 男性 | 28 | 2016-03-11 | 操作 | NULL | 10000.13 | 403 | 3 | | 15 | チェン・ヤオジン | 男性 | 18 | 1997-03-12 | 操作 | NULL | 20000.00 | 403 | 3 | +----+-----------+---------+-----------+------------+------------+--------------+---------+-----------+------------+ セット内の行数は 5 です (0.00 秒) MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキル」、および「MySQL データベース ロック関連スキルの概要」 この記事が皆様のMySQLデータベース設計に役立つことを願っています。 以下もご興味があるかもしれません:
|
>>: Nginx Webサーバーのサンプルコードの設定方法の詳細な説明
rpmコマンドがソフトウェアのインストールに使用するパラメータはどれですか: -i rpm コマンド...
通常のプロジェクト開発中に、MySQL バージョンが 5.6 から 5.7 にアップグレードされた場...
美しい HTML コードの外観 美しい HTML コードの書き方。外国人が書いた記事: 美しい HT...
この記事では、Docker で構築された Laravel および Vue プロジェクトの開発環境を紹...
MySQL 5.7.21 winx64無料インストールバージョンの設定方法、参考までに、具体的な内容...
js 配列はどこでも使用されているため、おそらく誰もがよく知っているでしょうが、配列クラス (疑似配...
Tomcatの設定まずTomcatをインストールするTomcatのインストールは、Tomcatのイン...
MySQLキーワードDistinctの使い方の紹介DDL SQLを準備します: テーブルテストを作成...
目次01 YAMLファイルの概要YAML---キー値型YAML---リスト型02 K8Sにおけるマス...
最近では、特定のフォルダ内の特定のファイルを自動的に検索する必要があり、ファイルパスとファイル名を別...
1. mysqlをインストールします。 udo apt-getでmysql-serverをインストー...
今日、jsp ページを書きました。<div style="margin:0 auto...
方法1: </html>の後に次のコードを追加してください。コードをコピーコードは次のと...
カーソルの作成まず、MySql でデータ テーブルを作成します。 存在しない場合はテーブルを作成 `...
docker コンテナを使用する場合、vim がインストールされていないことがあり、vim コマンド...