mysql所有班级名称和人数_mysql数据库优化课程---12、mysql嵌套和链接查询(查询user表中存在的所有班级的信息?)...
mysql數據庫優化課程---12、mysql嵌套和鏈接查詢(查詢user表中存在的所有班級的信息?)
一、總結
一句話總結:
in:distinct:select * from class where id in(select distinct class_id from user);
mysql> select * from class where id in(select distinct class_id from user);
+----+--------+------------+
| id | name?? | ctime????? |
+----+--------+------------+
|? 1 | class1 | 1492086867 |
|? 2 | class2 | 1492086867 |
|? 3 | class3 | 1492086867 |
+----+--------+------------+
2、查詢班級表中每個班的所有學員信息?
mysql> select * from user where class_id in(select id from class);
+----+----------+-----+----------+
| id | username | age | class_id |
+----+----------+-----+----------+
|? 1 | user1??? |? 19 |??????? 1 |
|? 2 | user2??? |? 19 |??????? 1 |
|? 3 | user3??? |? 19 |??????? 1 |
|? 4 | user4??? |? 19 |??????? 1 |
|? 5 | user5??? |? 19 |??????? 2 |
|? 6 | user6??? |? 19 |??????? 3 |
|? 7 | user7??? |? 19 |??????? 2 |
|? 8 | user8??? |? 19 |??????? 1 |
|? 9 | user9??? |? 19 |??????? 2 |
| 10 | user10?? |? 19 |??????? 3 |
| 11 | user10?? |? 19 |??????? 4 |
+----+----------+-----+----------+
3、嵌套查詢為什么用的少?
因為嵌套查詢能做到的普通多表查詢和鏈接查詢一般都能做到
4、請統計每個班的總人數?
錯誤答案:select class_id,count(*) from user group by class_id;
left join:select class.name,count(user.id) tot? from class left join user on class.id=user.class_id group by class.id;
right join:select class.name,count(user.id) tot? from user right join class on class.id=user.class_id group by class.id;
需求6:請統計每個班的總人數?
1)錯誤答案
mysql> select class_id,count(*) from usergroup by class_id;
+----------+----------+
| class_id | count(*) |
+----------+----------+
|??????? 1 |??????? 5 |
|??????? 2 |??????? 3 |
|??????? 3 |??????? 2 |
+----------+----------+
2)正確答案
mysql> select class.name,count(user.id) tot? from class left join user on class.id=user.class_id group by class.id;
+--------+-----+
| name?? | tot |
+--------+-----+
| class1 |?? 5 |
| class2 |?? 3 |
| class3 |?? 2 |
| class4 |?? 0 |
+--------+-----+
3)正確答案
mysql> select class.name,count(user.id) tot? from user right join class on class.id=user.class_id group by class.id;
+--------+-----+
| name?? | tot |
+--------+-----+
| class1 |?? 5 |
| class2 |?? 3 |
| class3 |?? 2 |
| class4 |?? 0 |
+--------+-----+
5、嵌套查詢和索引的關系?
嵌套查詢里面或者外面的索引會失效,所以嵌套查詢沒有鏈接查詢速度快
6、count(id)的用處在哪?
left連接之后統計班級人數,就是這個class4的0人,這里用count(*)就不行
需求6:請統計每個班的總人數?
mysql> select class.name,count(user.id) tot? from class left join user on class.id=user.class_id group by class.id;
+--------+-----+
| name?? | tot |
+--------+-----+
| class1 |?? 5 |
| class2 |?? 3 |
| class3 |?? 2 |
| class4 |?? 0 |
+--------+-----+
7、鏈接查詢的條件字段是什么?
on:select class.name,count(user.id) tot? from class left join user on class.id=user.class_id group by class.id;
需求6:請統計每個班的總人數?
mysql> select class.name,count(user.id) tot? from class left join user on class.id=user.class_id group by class.id;
+--------+-----+
| name?? | tot |
+--------+-----+
| class1 |?? 5 |
| class2 |?? 3 |
| class3 |?? 2 |
| class4 |?? 0 |
+--------+-----+
8、鏈接查詢和普通多表查詢的區別是什么(查詢每個用戶的用戶名和對應的班級名稱)?
內鏈接:select user.username,class.name from user inner join class on class.id=user.class_id;
普通多表查詢:select user.username,class.name from user,class where user.class_id=class.id;
需求7: 查詢每個用戶的用戶名和對應的班級名稱?
1)正確答案(內鏈接)
mysql> select user.username,class.name from user inner join class on class.id=user.class_id;
+----------+--------+
| username | name?? |
+----------+--------+
| user1??? | class1 |
| user2??? | class1 |
| user3??? | class1 |
| user4??? | class1 |
| user5??? | class2 |
| user6??? | class3 |
| user7??? | class2 |
| user8??? | class1 |
| user9??? | class2 |
| user10?? | class3 |
+----------+--------+
2)正確答案(普通多表查詢)
mysql> select user.username,class.name from user,class where user.class_id=class.id;
+----------+--------+
| username | name?? |
+----------+--------+
| user1??? | class1 |
| user2??? | class1 |
| user3??? | class1 |
| user4??? | class1 |
| user5??? | class2 |
| user6??? | class3 |
| user7??? | class2 |
| user8??? | class1 |
| user9??? | class2 |
| user10?? | class3 |
+----------+--------+
二、內容在總結中
mysql多表查詢:
1.普通多表查詢
2.嵌套查詢或子查詢
3.鏈接查詢
1)左鏈接
2)右鏈接
3)內鏈接
查看class表數據:
mysql> select * from class;
+----+--------+------------+
| id | name?? | ctime????? |
+----+--------+------------+
|? 1 | class1 | 1492086867 |
|? 2 | class2 | 1492086867 |
|? 3 | class3 | 1492086867 |
+----+--------+------------+
查看user表數據:
mysql> select * from user;
+----+----------+-----+
| id | username | age |
+----+----------+-----+
|? 1 | user1??? |? 19 |
|? 2 | user2??? |? 29 |
|? 3 | user3??? |? 31 |
|? 4 | user4??? |? 22 |
|? 5 | user5??? |? 23 |
|? 6 | user6??? |? 18 |
|? 7 | user7??? |? 17 |
|? 8 | user8??? |? 25 |
|? 9 | user9??? |? 27 |
| 10 | user10?? |? 32 |
+----+----------+-----+
兩表無條件查詢:
mysql> select * from class,user;
+----+--------+------------+----+----------+-----+
| id | name?? | ctime????? | id | username | age |
+----+--------+------------+----+----------+-----+
|? 1 | class1 | 1492086867 |? 1 | user1??? |? 19 |
|? 2 | class2 | 1492086867 |? 1 | user1??? |? 19 |
|? 3 | class3 | 1492086867 |? 1 | user1??? |? 19 |
|? 4 | class4 | 1492087405 |? 1 | user1??? |? 19 |
|? 1 | class1 | 1492086867 |? 2 | user2??? |? 29 |
|? 2 | class2 | 1492086867 |? 2 | user2??? |? 29 |
|? 3 | class3 | 1492086867 |? 2 | user2??? |? 29 |
|? 4 | class4 | 1492087405 |? 2 | user2??? |? 29 |
|? 1 | class1 | 1492086867 |? 3 | user3??? |? 31 |
|? 2 | class2 | 1492086867 |? 3 | user3??? |? 31 |
|? 3 | class3 | 1492086867 |? 3 | user3??? |? 31 |
|? 4 | class4 | 1492087405 |? 3 | user3??? |? 31 |
|? 1 | class1 | 1492086867 |? 4 | user4??? |? 22 |
|? 2 | class2 | 1492086867 |? 4 | user4??? |? 22 |
|? 3 | class3 | 1492086867 |? 4 | user4??? |? 22 |
|? 4 | class4 | 1492087405 |? 4 | user4??? |? 22 |
|? 1 | class1 | 1492086867 |? 5 | user5??? |? 23 |
|? 2 | class2 | 1492086867 |? 5 | user5??? |? 23 |
|? 3 | class3 | 1492086867 |? 5 | user5??? |? 23 |
|? 4 | class4 | 1492087405 |? 5 | user5??? |? 23 |
|? 1 | class1 | 1492086867 |? 6 | user6??? |? 18 |
|? 2 | class2 | 1492086867 |? 6 | user6??? |? 18 |
|? 3 | class3 | 1492086867 |? 6 | user6??? |? 18 |
|? 4 | class4 | 1492087405 |? 6 | user6??? |? 18 |
|? 1 | class1 | 1492086867 |? 7 | user7??? |? 17 |
|? 2 | class2 | 1492086867 |? 7 | user7??? |? 17 |
|? 3 | class3 | 1492086867 |? 7 | user7??? |? 17 |
|? 4 | class4 | 1492087405 |? 7 | user7??? |? 17 |
|? 1 | class1 | 1492086867 |? 8 | user8??? |? 25 |
|? 2 | class2 | 1492086867 |? 8 | user8??? |? 25 |
|? 3 | class3 | 1492086867 |? 8 | user8??? |? 25 |
|? 4 | class4 | 1492087405 |? 8 | user8??? |? 25 |
|? 1 | class1 | 1492086867 |? 9 | user9??? |? 27 |
|? 2 | class2 | 1492086867 |? 9 | user9??? |? 27 |
|? 3 | class3 | 1492086867 |? 9 | user9??? |? 27 |
|? 4 | class4 | 1492087405 |? 9 | user9??? |? 27 |
|? 1 | class1 | 1492086867 | 10 | user10?? |? 32 |
|? 2 | class2 | 1492086867 | 10 | user10?? |? 32 |
|? 3 | class3 | 1492086867 | 10 | user10?? |? 32 |
|? 4 | class4 | 1492087405 | 10 | user10?? |? 32 |
+----+--------+------------+----+----------+-----+
結論:
1.兩表數據進行所有組合.
2.數據量是兩表條數乘積.
設計了關系的user表:
mysql> select * from user;
+----+----------+-----+----------+
| id | username | age | class_id |
+----+----------+-----+----------+
|? 1 | user1??? |? 19 |??????? 1 |
|? 2 | user2??? |? 19 |??????? 1 |
|? 3 | user3??? |? 19 |??????? 1 |
|? 4 | user4??? |? 19 |??????? 1 |
|? 5 | user5??? |? 19 |??????? 2 |
|? 6 | user6??? |? 19 |??????? 3 |
|? 7 | user7??? |? 19 |??????? 2 |
|? 8 | user8??? |? 19 |??????? 1 |
|? 9 | user9??? |? 19 |??????? 2 |
| 10 | user10?? |? 19 |??????? 3 |
+----+----------+-----+----------+
需求1:請查詢出每一個學員的姓名、年齡、班級名稱和班級創建時間?
mysql> select user.username,user.age,class.name,class.ctime from user,class where user.class_id=class.id;
+----------+-----+--------+------------+
| username | age | name?? | ctime????? |
+----------+-----+--------+------------+
| user1??? |? 19 | class1 | 1492086867 |
| user2??? |? 19 | class1 | 1492086867 |
| user3??? |? 19 | class1 | 1492086867 |
| user4??? |? 19 | class1 | 1492086867 |
| user5??? |? 19 | class2 | 1492086867 |
| user6??? |? 19 | class3 | 1492086867 |
| user7??? |? 19 | class2 | 1492086867 |
| user8??? |? 19 | class1 | 1492086867 |
| user9??? |? 19 | class2 | 1492086867 |
| user10?? |? 19 | class3 | 1492086867 |
+----------+-----+--------+------------+
需求2:請查詢出每一個學員的姓名、年齡、班級名稱和班級創建時間,并把時間戳轉成正常日期顯示出來?
mysql> select user.username,user.age,class.name,from_unixtime(class.ctime) ctime from user,class where user.class_id=class.id;
+----------+-----+--------+---------------------+
| username | age | name?? | ctime?????????????? |
+----------+-----+--------+---------------------+
| user1??? |? 19 | class1 | 2017-04-13 20:34:27 |
| user2??? |? 19 | class1 | 2017-04-13 20:34:27 |
| user3??? |? 19 | class1 | 2017-04-13 20:34:27 |
| user4??? |? 19 | class1 | 2017-04-13 20:34:27 |
| user5??? |? 19 | class2 | 2017-04-13 20:34:27 |
| user6??? |? 19 | class3 | 2017-04-13 20:34:27 |
| user7??? |? 19 | class2 | 2017-04-13 20:34:27 |
| user8??? |? 19 | class1 | 2017-04-13 20:34:27 |
| user9??? |? 19 | class2 | 2017-04-13 20:34:27 |
| user10?? |? 19 | class3 | 2017-04-13 20:34:27 |
+----------+-----+--------+---------------------+
需求3:請查詢出每一個學員的姓名、年齡、班級名稱和班級創建時間,并且只查詢1班學員?
mysql> select user.username,user.age,class.name,class.ctime from user,class where user.class_id=class.id and class.id=1;
+----------+-----+--------+------------+
| username | age | name?? | ctime????? |
+----------+-----+--------+------------+
| user1??? |? 19 | class1 | 1492086867 |
| user2??? |? 19 | class1 | 1492086867 |
| user3??? |? 19 | class1 | 1492086867 |
| user4??? |? 19 | class1 | 1492086867 |
| user8??? |? 19 | class1 | 1492086867 |
+----------+-----+--------+------------+
需求4:查詢user表中存在的所有班級的信息?
mysql> select * from class where id in(select distinct class_id from user);
+----+--------+------------+
| id | name?? | ctime????? |
+----+--------+------------+
|? 1 | class1 | 1492086867 |
|? 2 | class2 | 1492086867 |
|? 3 | class3 | 1492086867 |
+----+--------+------------+
需求5:查詢班級表中每個班的所有學員信息?
mysql> select * from user where class_id in(select id from class);
+----+----------+-----+----------+
| id | username | age | class_id |
+----+----------+-----+----------+
|? 1 | user1??? |? 19 |??????? 1 |
|? 2 | user2??? |? 19 |??????? 1 |
|? 3 | user3??? |? 19 |??????? 1 |
|? 4 | user4??? |? 19 |??????? 1 |
|? 5 | user5??? |? 19 |??????? 2 |
|? 6 | user6??? |? 19 |??????? 3 |
|? 7 | user7??? |? 19 |??????? 2 |
|? 8 | user8??? |? 19 |??????? 1 |
|? 9 | user9??? |? 19 |??????? 2 |
| 10 | user10?? |? 19 |??????? 3 |
| 11 | user10?? |? 19 |??????? 4 |
+----+----------+-----+----------+
左鏈接:
需求6:請統計每個班的總人數?
1)錯誤答案
mysql> select class_id,count(*) from user group by class_id;
+----------+----------+
| class_id | count(*) |
+----------+----------+
|??????? 1 |??????? 5 |
|??????? 2 |??????? 3 |
|??????? 3 |??????? 2 |
+----------+----------+
2)正確答案
mysql> select class.name,count(user.id) tot? from class left join user on class.id=user.class_id group by class.id;
+--------+-----+
| name?? | tot |
+--------+-----+
| class1 |?? 5 |
| class2 |?? 3 |
| class3 |?? 2 |
| class4 |?? 0 |
+--------+-----+
3)正確答案
mysql> select class.name,count(user.id) tot? from user right join class on class.id=user.class_id group by class.id;
+--------+-----+
| name?? | tot |
+--------+-----+
| class1 |?? 5 |
| class2 |?? 3 |
| class3 |?? 2 |
| class4 |?? 0 |
+--------+-----+
需求7: 查詢每個用戶的用戶名和對應的班級名稱?
1)正確答案(內鏈接)
mysql> select user.username,class.name from user inner join class on class.id=user.class_id;
+----------+--------+
| username | name?? |
+----------+--------+
| user1??? | class1 |
| user2??? | class1 |
| user3??? | class1 |
| user4??? | class1 |
| user5??? | class2 |
| user6??? | class3 |
| user7??? | class2 |
| user8??? | class1 |
| user9??? | class2 |
| user10?? | class3 |
+----------+--------+
2)正確答案(普通多表查詢)
mysql> select user.username,class.name from user,class where user.class_id=class.id;
+----------+--------+
| username | name?? |
+----------+--------+
| user1??? | class1 |
| user2??? | class1 |
| user3??? | class1 |
| user4??? | class1 |
| user5??? | class2 |
| user6??? | class3 |
| user7??? | class2 |
| user8??? | class1 |
| user9??? | class2 |
| user10?? | class3 |
+----------+--------+
總結
以上是生活随笔為你收集整理的mysql所有班级名称和人数_mysql数据库优化课程---12、mysql嵌套和链接查询(查询user表中存在的所有班级的信息?)...的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 赵薇在国外居然有一个酒庄,她的身价究竟值
- 下一篇: 预售票电影院有卖吗
