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普通多表查询的更多相关文章

  1. mysql数据库优化课程---17、mysql索引优化

    mysql数据库优化课程---17.mysql索引优化 一.总结 一句话总结:一些字段可能会使索引失效,比如like,or等 1.check表监测的使用场景是什么? 视图 视图建立在两个表上, 删除了 ...

  2. mysql数据库优化课程---15、mysql优化步骤

    mysql数据库优化课程---15.mysql优化步骤 一.总结 一句话总结:索引优化最立竿见影 1.mysql中最常用最立竿见影的优化是什么? 索引优化 索引优化,不然有多少行要扫描多少次,1亿行大 ...

  3. mysql数据库优化课程---12、mysql嵌套和链接查询

    mysql数据库优化课程---12.mysql嵌套和链接查询 一.总结 一句话总结:查询user表中存在的所有班级的信息? in distinct mysql> select * from cl ...

  4. mysql数据库优化课程---10、mysql数据库分组聚合

    mysql数据库优化课程---10.mysql数据库分组聚合 一.总结 一句话总结:select concat(class,' 班') 班级,concat(count(*),' 人') 人数 from ...

  5. mysql数据库优化课程---2、命令其实也就是那几个单词

    mysql数据库优化课程---2.命令其实也就是那几个单词 一.总结 一句话总结: 比如show,use,alter 1.开启和关闭mysql服务? Windows下:net start/stop m ...

  6. mysql数据库优化课程---18、mysql服务器优化

    mysql数据库优化课程---18.mysql服务器优化 一.总结 一句话总结: 1.四种字符集问题:字符集都设置为utf-82.slow log慢查询日志问题3.root密码丢失 1.mysql存在 ...

  7. mysql数据库优化课程---16、mysql慢查询和优化表空间

    mysql数据库优化课程---16.mysql慢查询和优化表空间 一.总结 一句话总结: a.慢查询的话找到存储慢查询的那个日志文件 b.优化表空间的话可以用optimize table sales; ...

  8. mysql数据库优化课程---14、常用的sql技巧

    mysql数据库优化课程---14.常用的sql技巧 一.总结 一句话总结:其实就是sql中那些函数的使用 1.mysql中函数如何使用? 选择字段 其实就是作用域select的选择字段 3.转大写: ...

  9. mysql数据库优化课程---13、mysql基础操作

    mysql数据库优化课程---13.mysql基础操作 一.总结 一句话总结:mysql复制表,索引,视图 1.mysql如何复制表? like select * 1.复制表结构 create tab ...

随机推荐

  1. JavaScript 学习(1)--window对象

    JavaScript 学习--Window对象 window对象方法 1.1 创建新窗体 //窗体打开 var newWindow=Window.open("default.html&quo ...

  2. Linux的.a、.so和.o文件 windows下obj,lib,dll,exe的关系

    Linux的.a..so和.o文件 - chlele0105的专栏 - CSDN博客 https://blog.csdn.net/chlele0105/article/details/23691147 ...

  3. access variables from the global scope 在全局范围内访问变量的2种方法

    w http://php.net/manual/zh/language.variables.scope.php http://php.net/manual/en/language.variables. ...

  4. 删除Windows服务

    或者开始→运行 ,输入“regedit”,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 下找到需要删除的服务名,直接删除即可.

  5. django之多表查询-2

    2018-11-14 一 \\ 基于双下划线的跨表查询: 套路一样,用__跨表 -一对多 -多对多 from app.models import * 查询出版社为北京出版社出版的所有图书的名字,价格 ...

  6. Django继承

    Django目前支持两种不同的继承方式,包括抽象基础类和多表继承. 1.抽象基础类: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 cla ...

  7. sql server性能调优

    转自:https://www.cnblogs.com/woodytu/tag/%E6%80%A7%E8%83%BD%E8%B0%83%E4%BC%98%E5%9F%B9%E8%AE%AD/defaul ...

  8. 005-环境安装【docker、fabric】

    1.参考地址:https://hyperledger-fabric.readthedocs.io/en/latest/prereqs.html#install-curl 一.前置条件和系统配置 1.安 ...

  9. IOS JAVA PHP 安卓 通用加密方式

    PHP代码: class Aes { private $hex_iv = '00000000000000000000000000000000'; // converted JAVA byte code ...

  10. pandas(九)数据转换

    移除重复数据 dataframe中常常会出现重复行,DataFrame对象的duplicated方法返回一个布尔型的Series对象,可以表示各行是否是重复行.还有一个drop_duplicates方 ...