mysql查询数据教程_MySQL 查询数据
sql 語句的關聯查詢
左關聯: left join ... on ...
右關聯: right join... on ...
格式:
select 字段 from 表1 left join 表2 on 條件 (一般為表1與表2的關聯條件)
查詢用戶的所有訂單信息 :
user 用戶表
orders 訂單表
select * from user left join orders on user.id = orders.user_id
稍微復雜點 統計用戶的訂單數量 (需要分組,通過用戶的id)
select user.username,orders.id,count(*) from user right join orders on user.id = orders.user_id GROUP BY user.id;
mysql> select user.username,orders.id,count(*) from user right join orders on user.id = orders.user_id GROUP BY user.id;
+----------+----+----------+
| username | id | count(*) |
+----------+----+----------+
| 王五 | 3 | 2 |
| 張三 | 5 | 1 |
+----------+----+----------+
2 rows in set (0.07 sec)
這里顯示名為王五(id=3)的用戶有2個訂單 張三(id=5)1個訂單
這里是右關聯查詢,用右關聯查詢是有道理的, 因為左關聯和有關聯 是有差別的查詢,區別:left join on 左邊的表為主表 right join on 右邊的表為主表
這個統計訂單的查詢有一個問題 就是 用戶表中有用戶新信息,但是這個用戶沒有訂單信息
請看下面的查詢;
---------------------
單表查詢
---------------------
mysql> select * from user;
+----+----------+------------+------+----------+
| id | username | birthday | sex | address |
+----+----------+------------+------+----------+
| 1 | 王五 | 2017-11-25 | 3 | 南陽 |
| 10 | 張三 | 2014-07-10 | 1 | 北京市 |
| 16 | 張小明 | NULL | 1 | 河南鄭州 |
| 22 | 陳小明 | NULL | 1 | 河南鄭州 |
| 24 | 張三豐 | NULL | 1 | 河南鄭州 |
| 25 | 陳小明 | NULL | 1 | 河南鄭州 |
| 26 | 王五 | NULL | NULL | NULL |
| 29 | 小黑 | 2017-11-26 | NULL | NULL |
| 30 | 抖森 | 2017-11-25 | 1 | 山村 |
+----+----------+------------+------+----------+
9 rows in set (0.03 sec)
mysql> select * from orders;
+----+---------+---------+---------------------+------+
| id | user_id | number | createtime | note |
+----+---------+---------+---------------------+------+
| 3 | 1 | 1000010 | 2015-02-04 13:22:35 | NULL |
| 4 | 1 | 1000011 | 2015-02-03 13:22:41 | NULL |
| 5 | 10 | 1000012 | 2015-02-12 16:13:23 | NULL |
+----+---------+---------+---------------------+------+
3 rows in set (0.03 sec)
--------------------------
關聯查詢
-------------------------
左關聯
------------------------
mysql> select user.* ,orders.number from user left join orders on user.id = orders.user_id;
+----+----------+------------+------+----------+---------+
| id | username | birthday | sex | address | number |
+----+----------+------------+------+----------+---------+
| 1 | 王五 | 2017-11-25 | 3 | 南陽 | 1000010 |
| 1 | 王五 | 2017-11-25 | 3 | 南陽 | 1000011 |
| 10 | 張三 | 2014-07-10 | 1 | 北京市 | 1000012 |
| 16 | 張小明 | NULL | 1 | 河南鄭州 | NULL |
| 22 | 陳小明 | NULL | 1 | 河南鄭州 | NULL |
| 24 | 張三豐 | NULL | 1 | 河南鄭州 | NULL |
| 25 | 陳小明 | NULL | 1 | 河南鄭州 | NULL |
| 26 | 王五 | NULL | NULL | NULL | NULL |
| 29 | 小黑 | 2017-11-26 | NULL | NULL | NULL |
| 30 | 抖森 | 2017-11-25 | 1 | 山村 | NULL |
+----+----------+------------+------+----------+---------+
10 rows in set (0.04 sec)
-----------------------------
右關聯
-----------------------------
mysql> select user.* ,orders.number from user right join orders on user.id = orders.user_id;
+----+----------+------------+-----+---------+---------+
| id | username | birthday | sex | address | number |
+----+----------+------------+-----+---------+---------+
| 1 | 王五 | 2017-11-25 | 3 | 南陽 | 1000010 |
| 1 | 王五 | 2017-11-25 | 3 | 南陽 | 1000011 |
| 10 | 張三 | 2014-07-10 | 1 | 北京市 | 1000012 |
+----+----------+------------+-----+---------+---------+
3 rows in set (0.05 sec)
很明顯此處錯誤的選擇left會導致查出不必要的數據,可以說是垃圾信息,因為是要查出訂單信息(攜帶用戶信息)沒有訂單的用戶就不必要查詢出來。
Narule
Narule
jun***r33@sina.com2年前 (2018-09-11)
總結
以上是生活随笔為你收集整理的mysql查询数据教程_MySQL 查询数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql和php的登录注册界面_php
- 下一篇: mysql+monitor+下载_详解M