MySQL クイック クエリ - サブクエリ

MySQLのクイックチェック

日々の仕事や勉強の中で、mysql のステートメント、キーワード、操作などを忘れることがよくあるため、最近少し時間をとって mysql に関する次の内容を書きました。辞書のようなものです


MySQL パスワードのリセット
データ型
演算子
共通関数
データの整合性
データベースの基本操作 テーブル
自体の操作 テーブル
内のデータ
の操作この記事
マルチテーブル接続
インデックス
ビュー
前処理 SQL ステートメント
カスタム関数とストアド プロシージャ
MySQL でのプログラミング


前に書く

サブクエリは、select、insert、update、delete ステートメント (またはその他のサブクエリ) にネストされたクエリです。

  • 一般的なサブクエリ操作:
    • [ありませんで
    • どれでも
    • 全て
    • [存在しない
    • 論理演算子
  • クエリ結果によれば、次のように分類できます。
    • テーブルサブクエリ: テーブルを返します。
    • 行の自己クエリ: 1 つ以上の値を含む行を返します。
    • 列サブクエリ: 各行に対して 1 つの列のみを返します。
    • スカラーセルフクエリ: 値を返します。

注記:

  • サブクエリは最大 32 レベルまでネストできます
  • order by はサブクエリの外でのみ使用できます
  • テキスト、BLOB、ロングテキストなどのデータ型の列は取得できません。

例で使用されるテーブル

mysql> desc user;
+-------+---------------+------+-----+---------+----------------+
| Field | Type          | Null | Key | Default | Extra          |
+-------+---------------+------+-----+---------+----------------+
| id    | int           | NO   | PRI | NULL    | auto_increment |
| name  | char(10)      | YES  |     | NULL    |                |
| sex   | enum('f','m') | YES  |     | NULL    |                |
+-------+---------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

mysql> desc commodity;
+---------+-----------+------+-----+--------------+----------------+
| Field   | Type      | Null | Key | Default      | Extra          |
+---------+-----------+------+-----+--------------+----------------+
| id      | int       | NO   | PRI | NULL         | auto_increment |
| price   | int       | NO   |     | NULL         |                |
| name    | char(128) | YES  |     | 匿名商品     |                |
| user_id | int       | YES  |     | NULL         |                |
+---------+-----------+------+-----+--------------+----------------+
4 rows in set (0.01 sec)

テーブルに存在するデータを使用する

mysql> select * from user;
+----+--------+------+
| id | name   | sex  |
+----+--------+------+
|  1 | 铁子   | m    |
|  2 | 嘎子   | m    |
|  3 | 潘子   | m    |
|  4 | 翠花   | f    |
|  5 | 阿秀   | f    |
+----+--------+------+
5 rows in set (0.00 sec)

mysql> select * from commodity;
+----+-------+--------+---------+
| id | price | name   | user_id |
+----+-------+--------+---------+
|  1 |   100 | 手机   |       1 |
|  2 |   299 | 电脑   |       1 |
|  3 | 18990 | 假酒   |       3 |
|  4 | 18990 | 中华   |       3 |
|  5 |    18 | 中华   |       2 |
+----+-------+--------+---------+
5 rows in set (0.00 sec)

表現として使用する

# 查看id为3的user的购买数量
select name, 
	(select count(1) from commodity where user_id = 3) 购买数量
	from user
	where id = 3;
+--------+--------------+
| name   | 购买数量     |
+--------+--------------+
| 潘子   |            2 |
+--------+--------------+
1 row in set (0.00 sec)

where 句と一緒に使用します

# 查询购买单品价格大于100的用户的姓名和性别
select name, sex
	from user
	where id in (select user_id from commodity where price > 100);
+--------+------+
| name   | sex  |
+--------+------+
| 铁子   | m    |
| 潘子   | m    |
+--------+------+
2 rows in set (0.00 sec)

サブテーブルの生成

# 查询购买总价大于1000的人
select name as 姓名,sex as 性别 
from user 
where id in 
	(select user_id 
	from (select user_id,sum(price) total from commodity group by user_id) as newTable 
	where newTable.total > 100);
+--------+--------+
| 姓名   | 性别   |
+--------+--------+
| 铁子   | m      |
| 潘子   | m      |
+--------+--------+
2 rows in set (0.00 sec)

おすすめ

転載: blog.csdn.net/weixin_45345384/article/details/116983648