mysql数据库优化课程---11、mysql普通多表查询
mysql数据库优化课程---11、mysql普通多表查询
一、总结
一句话总结:select user.username,user.age,class.name,class.ctime from user,class where user.class_id=class.id;
1、sql中的注释是什么?
--
两个横杠
2、两表无条件查询的结果是什么?
条数乘积
select * from class,user;
1.两表数据进行所有组合.
2.数据量是两表条数乘积.
3、多表连接查询(有条件)的实质是什么?
排列组合
满足条件
在所有排列组合的情况下选出满足条件的记录
4、请查询出每一个学员的姓名、年龄、班级名称和班级创建时间?
select user.username,user.age,class.name,class.ctime from user,class where user.class_id=class.id;
5、请查询出每一个学员的姓名、年龄、班级名称和班级创建时间,并把时间戳转成正常日期显示出来?
select user.username,user.age,class.name,from_unixtime(class.ctime) ctime from user,class where user.class_id=class.id;
6、查询每个用户的用户名和对应的班级名称?
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数据库优化课程---11、mysql普通多表查询的更多相关文章
- mysql数据库优化课程---17、mysql索引优化
mysql数据库优化课程---17.mysql索引优化 一.总结 一句话总结:一些字段可能会使索引失效,比如like,or等 1.check表监测的使用场景是什么? 视图 视图建立在两个表上, 删除了 ...
- mysql数据库优化课程---15、mysql优化步骤
mysql数据库优化课程---15.mysql优化步骤 一.总结 一句话总结:索引优化最立竿见影 1.mysql中最常用最立竿见影的优化是什么? 索引优化 索引优化,不然有多少行要扫描多少次,1亿行大 ...
- mysql数据库优化课程---12、mysql嵌套和链接查询
mysql数据库优化课程---12.mysql嵌套和链接查询 一.总结 一句话总结:查询user表中存在的所有班级的信息? in distinct mysql> select * from cl ...
- mysql数据库优化课程---10、mysql数据库分组聚合
mysql数据库优化课程---10.mysql数据库分组聚合 一.总结 一句话总结:select concat(class,' 班') 班级,concat(count(*),' 人') 人数 from ...
- mysql数据库优化课程---2、命令其实也就是那几个单词
mysql数据库优化课程---2.命令其实也就是那几个单词 一.总结 一句话总结: 比如show,use,alter 1.开启和关闭mysql服务? Windows下:net start/stop m ...
- mysql数据库优化课程---18、mysql服务器优化
mysql数据库优化课程---18.mysql服务器优化 一.总结 一句话总结: 1.四种字符集问题:字符集都设置为utf-82.slow log慢查询日志问题3.root密码丢失 1.mysql存在 ...
- mysql数据库优化课程---16、mysql慢查询和优化表空间
mysql数据库优化课程---16.mysql慢查询和优化表空间 一.总结 一句话总结: a.慢查询的话找到存储慢查询的那个日志文件 b.优化表空间的话可以用optimize table sales; ...
- mysql数据库优化课程---14、常用的sql技巧
mysql数据库优化课程---14.常用的sql技巧 一.总结 一句话总结:其实就是sql中那些函数的使用 1.mysql中函数如何使用? 选择字段 其实就是作用域select的选择字段 3.转大写: ...
- mysql数据库优化课程---13、mysql基础操作
mysql数据库优化课程---13.mysql基础操作 一.总结 一句话总结:mysql复制表,索引,视图 1.mysql如何复制表? like select * 1.复制表结构 create tab ...
随机推荐
- 巨蟒python全栈开发flask2
内容回顾: 上节回顾: Flask .response 三剑客: render_template 模板 redirect 重定向 - URL地址 "" 字符串 HTTPRespon ...
- c++用vector创建二维数组
1 vector二维数组的创建和初始化 std::vector <int> vec(10,90); //将10个一维动态数组初始为90std::vector<std::vector& ...
- Replay attack 回放攻击
w http://baike.baidu.com/item/重放攻击 重放攻击(Replay Attacks)又称重播攻击.回放攻击或新鲜性攻击(Freshness Attacks),是指攻击者发送一 ...
- jQuery实现图片预览
摘自:http://www.cnblogs.com/leejersey/p/3660202.html JS代码: /* *名称:图片上传本地预览插件 v1.1 *作者:周祥 *时间:2013年11月2 ...
- “技术产品”面向市场的表达方法思辨——BY Me
“技术产品”面向市场的表达方法思辨 首先,我们来看看“技术产品”在面向市场去表达的时候,怎么表述是容易被市场接受和理解的,“目标受众是谁?”.“市场切入点是什么?”,做到有的放矢,打动目标受众.切中其 ...
- Android studio怎么修改文件名
选中需要重新命名的文件 点击Android studio菜单中列表中的Refactor的选项 选择下拉菜单中的“rename”的选项 弹出rename的选项框,在输入框中输入需要重新的命名的名称. 点 ...
- go——方法
方法是与对象实例绑定的特殊函数.方法是面向对象编程的基本概念,用于维护和展示对象的自身状态.对象是内敛的,每个实例都有各自不同的独立特征,以属性和方法来暴露对外通信接口.普通函数则专注于算法流程,通过 ...
- java基本类型和包装器类
java是一种面向对象语言,java中的类把方法与数据连接在一起,并构成了自包含式的处理单元.但在java中不能定义基本类型(primitive type),为了能将基本类型视为对象来处理,并能连接相 ...
- C# 复杂算法
1.添加命名空间引用using Microsoft.JScript; //formula 是公式如:(1+2)*3/10 private double GetComputeValueByStringF ...
- Python 字符串连接问题归结
一.概述 Python 字符串连接场景较为普遍.由于编者对 Java 等语言较为熟悉,常常将两者语法混淆. 加之,Python 语法较为灵活.例如,单单实现字符串连接,就有数种方法.在此,一并归结! ...