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. [PowerShell]–Checking the version of Office installed

    – Create and initialize the object $objExcel = New-Object -ComObject Excel.Application – Query the v ...

  2. Exchange Powershell:ForwardingAddress&InboxRule

    查询在邮箱上设置的转发功能: Get-Mailbox -server MX01 -Filter {ForwardingAddress -like '*'} | Select-Object Name, ...

  3. Setting IE11 with Group Policy Preferences

    一.Setting Home Page with Group Policy Preferences 1.Open the Group Policy Management Console and cre ...

  4. MyBatis 入门(一)

    1. MyBatis 概述 MyBatis 是一个半自动化的持久层框架; 核心SQL,开发人员可以进行优化; SQL和Java编码分开,功能边界清晰,一个专注业务,一个专注数据; JDBC: SQL ...

  5. Oracle11g的安装卸载及经常使用工具的使用

    Oracle11g的安装卸载及经常使用工具的使用 目的: (1) 掌握Oracle 11g数据库的安装与卸载过程. Oracle11g的安装卸载及经常使用工具的使用 目的: (1) 掌握Oracle  ...

  6. Node.js学习笔记(3):NPM简明教程

    Node.js学习笔记(3):NPM简明教程 NPM常用操作 更新NPM版本 npm install npm -g -g,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...

  7. Java技术学习路线

    转载 作者:David 链接:https://www.zhihu.com/question/25255189/answer/86898400来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...

  8. CreateWindow创建无边框 可拉伸窗体

    createwindow 定义 HWND WINAPI CreateWindow( _In_opt_ LPCTSTR lpClassName, _In_opt_ LPCTSTR lpWindowNam ...

  9. 20165101刘天野 2018-2019-2《网络对抗技术》Exp4 恶意代码分析

    20165101刘天野 2018-2019-2<网络对抗技术>Exp4 恶意代码分析 1. 实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件 ...

  10. Go语言学习之运算符(The way to go)

    生命不止,继续go go go 今天介绍go中的运算符. 运算符大概分为: Arithmetic Operators Relational Operators Logical Operators Bi ...