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. 第5章 IDA Pro

    5.1 加载一个可执行文件 默认情况下IDA Pro的反汇编代码中不包含PE头或资源节,可以手动指定加载. 5.2 IDA Pro接口 5.2.1 反汇编窗口模式 二进制模式/图形模式: 图形模式:红 ...

  2. create-trigger-insert-pwd

    delimiter | drop trigger if exists default_insert_Pwd; create trigger default_insert_Pwd before inse ...

  3. a标签的href和onclick

    1.链接的onclick事件被先执行,href的事件后执行 2.就今天遇到的问题说一下,通过a标签的onclick事件实现点击后定位到指定的div,或者是执行其他函数(比如弹出artdialog等), ...

  4. win7下设置smtp的方法

    在win7中开启SMTP服务的方法如下: 1. 首先确定是否开启IIS服务:在运行中输入“inetmgr”,若提示出错,则表明未安装.进入步骤2,否则进入步骤3: 2.打开控制面板->程序-&g ...

  5. 我的Android进阶之旅------>解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

    1.问题描述 首先,需要解析的Json数据类似于下面的格式,但是包含了Java关键字abstract: { ret: 0, msg: "normal return.", news: ...

  6. 商业模式画布模板——From 《商业模式新生代》

    看过<商业模式新生代>这本书,确实受益匪浅.书籍本身编写的形式很新颖,以此为模板可以启发自己对于商业模式的思考和定义,五星推荐!!! 下面是用PPT重新绘制的商业模式画布以及说明,希望对大 ...

  7. 删除pentaho用户和用户文件夹

    获取所有用户 http://xxxxxxxx.com:8888/pentaho/api/repo/files/home/children 获取单个用户 http://whfxpt.itestcn.co ...

  8. django(python manage.py migrate)同步数据库出错后的解决办法

    执行python manage.py migrate同步数据库前一次执行 python manage.py makemigrations 时生成的文件及之后所有的文件删除即可,然后修改models.p ...

  9. 在python中有多少种运算符?解释一下算术运算符

    在python中,我们有7种运算符:算术运算符.关系运算符.赋值运算符.逻辑运算符.位运算符.成员运算符.身份运算符 我们有7个算术运算符,能让我们对数值进行算术计算 1.加号(+),将两个值相加 2 ...

  10. Oracle事务和锁机制

    事务 1. 说明 一组SQL,一个逻辑工作单位,执行时整体修改或者整体回退. 2.事务相关概念 1)事务的提交和回滚:COMMIT/ROLLBACK 2)事务的开始和结束 开始事务:连接到数据库,执行 ...