文档章节

MySql--复杂查询

丿咖啡灬微凉
 丿咖啡灬微凉
发布于 2017/04/17 23:56
字数 755
阅读 7
收藏 0

MySql拥有着非常丰富的查询方式,除了之前总结的简单查询和子查询外,还提供复杂查询的方式,可以进行分组查询、多表查询和合并查询结果,现将之总结一下。


/*****************************分组查询**************************************/

create table studentInfo(id int PRIMARY KEY, name VARCHAR(20), score decimal(4,2), subject VARCHAR(20), teacher VARCHAR(20));

1、对单列进行分组查询

select subject, COUNT(*) from studentInfo GROUP BY subject;

2、使用HAVING的分组查询

select subject, AVG(score) from studentInfo GROUP BY subject HAVING subject = '数学';

3、对多列进行分组查询

select subject, teacher, AVG(score) from studentInfo GROUP BY subject, teacher;

4、在分组查询中使用ORDER BY

select teacher, SUM(score) from studentInfo GROUP BY teacher ORDER BY sum(score) desc;

/*****************************************************************************/




/*****************************多表查询**************************************/

create table newInfo(id int PRIMARY KEY, name VARCHAR(20), score decimal(4,2), subjectid int, teacherid int);
create table subjectInfo(id int PRIMARY KEY, subjectname VARCHAR(30));
create table teacherInfo(id int PRIMARY KEY, teachername VARCHAR(30));

1、等值连接

mysql> select newInfo.name,subjectInfo.subjectname from newInfo,subjectInfo where newInfo.subjectid=subjectInfo.id;
+--------+-------------+
| name   | subjectname |
+--------+-------------+
| 小明   | 数学        |
| 小红   | 英语        |
| 小李   | 语文        |
+--------+-------------+
3 rows in set (0.00 sec)

mysql> select newInfo.name,subjectInfo.subjectname,teacherInfo.teachername from newInfo,subjectInfo,teacherInfo 
     > where newInfo.subjectid = subjectInfo.id and newInfo.teacherid = teacherInfo.id;
+--------+-------------+-------------+
| name   | subjectname | teachername |
+--------+-------------+-------------+
| 小明   | 数学        | 张老师      |
| 小红   | 英语        | 王老师      |
| 小李   | 语文        | 吴老师      |
+--------+-------------+-------------+
3 rows in set (0.00 sec)

2、笛卡尔积   3*4列和5*7列表不加条件查询,得到8*28列表

select * from newInfo,subjectInfo,teacherInfo;
查询所得结果非常庞大,并且非常臃肿,对实际的应用没有什么太大的意义,在实际应用中要加指定查询条件,避免笛卡尔积的出现

3、外连接

  (1)左外连接

mysql> select newInfo.name,subjectInfo.subjectname from newInfo LEFT OUTER JOIN subjectInfo 
     > ON newInfo.subjectid = subjectInfo.id;
+--------+-------------+
| name   | subjectname |
+--------+-------------+
| 小明   | 数学        |
| 小红   | 英语        |
| 小李   | 语文        |
| 小胡   | NULL        |
+--------+-------------+
4 rows in set (0.00 sec)

  (2)右外连接

mysql> select newInfo.name,subjectInfo.subjectname from newInfo RIGHT OUTER JOIN subjectInfo 
     > ON newInfo.subjectid = subjectInfo.id;
+--------+-------------+
| name   | subjectname |
+--------+-------------+
| 小李   | 语文        |
| 小明   | 数学        |
| 小红   | 英语        |
| NULL   | 计算机      |
+--------+-------------+
4 rows in set (0.00 sec)


4、内连接 相当于等值连接  相比较更加明显是多表查询

mysql> select newInfo.name,subjectInfo.subjectname from newInfo INNER JOIN subjectInfo 
     > ON newInfo.subjectid = subjectInfo.id;
+--------+-------------+
| name   | subjectname |
+--------+-------------+
| 小李   | 语文        |
| 小明   | 数学        |
| 小红   | 英语        |
+--------+-------------+
3 rows in set (0.00 sec)


mysql> select newInfo.name,subjectInfo.subjectname,teacherInfo.teachername 
    -> from newInfo INNER JOIN subjectInfo INNER JOIN teacherInfo 
    -> ON newInfo.subjectid=subjectInfo.id and newInfo.teacherid=teacherInfo.id;
	+--------+-------------+-------------+
	| name   | subjectname | teachername |
	+--------+-------------+-------------+
	| 小明   | 数学        | 张老师      |
	| 小红   | 英语        | 王老师      |
	| 小李   | 语文        | 吴老师      |
	+--------+-------------+-------------+
	3 rows in set (0.00 sec)


/*****************************************************************************/




/*****************************合并查询结果**************************************/

1、使用UNION关键字合并查询结果(多表查询的数据表) 两张表的列数相同,数据类型相同

mysql> select * from teacherInfo
		-> UNION
		-> select * from subjectInfo;
	+----+-------------+
	| id | teachername |
	+----+-------------+
	|  1 | 张老师      |
	|  2 | 王老师      |
	|  3 | 吴老师      |
	|  1 | 语文        |
	|  2 | 数学        |
	|  3 | 英语        |
	|  4 | 计算机      |
	+----+-------------+
	7 rows in set (0.00 sec)


2、对合并后的查询结果排序

mysql> select * from teacherInfo
		-> UNION
		-> select * from subjectInfo 
		-> ORDER BY id;
	+----+-------------+
	| id | teachername |
	+----+-------------+
	|  1 | 张老师      |
	|  1 | 语文        |
	|  2 | 数学        |
	|  2 | 王老师      |
	|  3 | 英语        |
	|  3 | 吴老师      |
	|  4 | 计算机      |
	+----+-------------+
	7 rows in set (0.00 sec)

3、限制组合查询结果的行数

mysql> select * from teacherInfo
		-> UNION
		-> select * from subjectInfo 
		-> LIMIT 3;
	+----+-------------+
	| id | teachername |
	+----+-------------+
	|  1 | 张老师      |
	|  2 | 王老师      |
	|  3 | 吴老师      |
	+----+-------------+
	3 rows in set (0.00 sec)



/*****************************************************************************/

本文转载自:http://blog.csdn.net/hjf161105/article/details/68928210

共有 人打赏支持
丿咖啡灬微凉
粉丝 1
博文 70
码字总数 0
作品 0
私信 提问
高可扩展性的分布式中间件--DBLE

dble是上海爱可生信息技术股份有限公司基于mysql的高可扩展性的分布式中间件,存在以下几个优势特性: 数据水平拆分 随着业务的发展,您可以使用dble来替换原始的单个MySQL实例。 兼容Mysql...

匿名
2018/01/01
1K
2
DBLE —— 基于 MySQL 的高可扩分布式中间件

DBLE是上海爱可生信息技术股份有限公司基于mysql的高可扩展性的分布式中间件,存在以下几个优势特性: 数据水平拆分 随着业务的发展,您可以使用dble来替换原始的单个MySQL实例。 兼容Mysql...

王练
2018/01/04
13
0
Mysql中Explain详解

当我们使用索引的时候,通常会用explain来检查我们索引使用的情况。 id列: 这一列总是包含一个编号,标示select所属的行。如果在语句当中没有子查询或联合,那么只会有的select,于是每一个...

扬花落尽丶
2017/11/01
0
0
zg手册 之 Mysql 开发(1)-- 中文全文检索插件开发

目前的中文检索查询方案 基于数据库的模糊匹配(运行时字符串查找,查询速度比较慢) 专有的全文检索引擎(sphinx, lucene等) 我曾经遇到一个项目,数据量在百万级别,不需要高级的全文检索...

东昕
2014/06/02
0
0
RadonDB技术手册――RadonDB复杂SQL体验

  【IT168 技术】背景   此场景目的是体验RadonDB的复杂查询兼容性能力。   一般中间件对SQL处理上的约束:   ● 全局排序不支持   ● 查询中不包含分区键的,不支持或是性能不好 ...

it168网站
2018/05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

AWS的自动部署工具codedeploy 部署前的准备工作

开始部署codedeploy: 1.先预置IAM用户: 创建一个IAM用户或使用一个与AWS相关联的用户; 复制以下的策略附加到IAM用户,向IAM用户赋予对codedeploy(及codedeploy所依赖的AWS服务和操作)的...

守护-创造
28分钟前
0
0
这可能是最详细的一线大厂Mysql面试题详解了

1、MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联; 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 从:io线程——在使用start slave 之后...

Java干货分享
38分钟前
1
0
人的精力是什么?如何强化精力

人的精力是什么? 人的精力是什么? 精力指精神和体力。精神包括一个人的精神状态,兴奋度,做事情的投入度,专注度,持续时间等。 人的精力来源 人的精力有4种来源,身体的、情感的、思想的和...

莫库什勒
57分钟前
2
0
JFinal开发的旅游线路营销Saas平台演示系统我部署了一个

今天部署了一个旅游线路营销管理系统的演示版: 演示地址:http://lvyou.jfinalxueyuan.com 演示账号:(暂时只给一个门店版的吧,批发商和总部的如果需要 演示看看 单独联系我微信:1876673...

山东-小木
今天
2
0
如何学习大数据技术

学习大数据技术,首先要明确大数据的概念。 大数据的概念作者认为有如下几点: 1.数据的来源多样性。例如关系数据库+文本+excel等 2.数据量大。TB级别的数据。 3.业务应用领域。实时性高与实...

董黎明
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部