文档章节

MySQL教程(十三)—— 子查询

o
 osc_mi06gsf5
发布于 2018/02/19 20:24
字数 956
阅读 22
收藏 0
tdb

行业解决方案、产品招募中!想赚钱就来传!>>>

1  准备工作

建立数据库,按照附件中的指令,先建立表,再插入数据:

更改编码:

(以显示gbk编码格式,只能生效一次)

查询数据:

(‘\G’是按照表格的形式输出)

2  子查询(Subquery)概念

2.1  子查询

定义:子查询是指在另一个查询语句中的SELECT子句。

1 SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);

备注:

  1. SELECT * FROM t1 ...称为Outer Query[外查询](或者Outer Statement)。
  2. SELECT column1 FROM t2 称为Sub Query[子查询]。
  3. 子查询是嵌套在外查询内部。
  4. 事实上它有可能在子查询内部再嵌套子查询。
  5. 子查询必须出现在圆括号内。
  6. 子查询可以包含多个关键字或条件,如DISTINCT、GROUP BY、ORDER BY、LIMIT、函数等。
  7. 子查询的外层查询可以是:SELECT、INSERT、UPDATE、SET或DO。
  8. 子查询返回结果可以是标量、一行、一列或子查询。

2.2  行级子查询

1 SELECT * FROM t1 WHERE (col1,col2) = (SELECT col3, col4 FROM t2 WHERE id = 10);
2 SELECT * FROM t1 WHERE ROW(col1,col2) = (SELECT col3, col4 FROM t2 WHERE id = 10);

备注:

  1. 行级子查询的返回结果最多为一行。
  2. 优化子查询。

3  使用比较运算符的子查询

比较运算符:=、<、>、<=、>=、<>、!=、<=>等。

语法结构:operand comparison_operator subquery

(求所有商品的平均价格,AVG为聚合函数(MAX、MIN、COUNT、SUM))

(同上,但是只保留两位小数)

(查询所有价格大于平均价格的商品,并且按价格降序排序,但是平均价格是一个数)

(与上述功能相同,但是将上面两条语句联合起来,组合成一条子查询语句)

(查询类型为“超级本”的商品价格)

(使用子查询语句,查询价格大于或等于"超级本"价格的商品,并且按价格降序排列)

注意:如果子查询在返回多个结果时,可以使用ANY、SOME、ALL来做修饰。ANY=SOME,指只要符合其中的一个就行,而ALL要符合全部。如上例,若不加ANY则会出现错误。

4  使用[ NOT ] IN 的子查询

4.1  使用[ NOT ] IN 的子查询

语法结构:

  • operand comparison_operator [ NOT ] IN (subquery)
  • IN 与 = ANY 等效,注意是与“=ANY”等效。
  • != ALL或<>ALL运算符与NOT IN等效。

(与上述例子相同,只不过用IN代替=ANY)

4.2  使用[ NOT ] EXISTS 的子查询

如果子查询返回任何行,EXISTS将返回TRUE,否则返回FALSE。

5  使用INSERT...SELECT插入记录

(创建一张商品分类表,注意与普通表的不同)

(查看机型的分类)

(将分组结果写入到tdb_goods_cates数据表)

(查看商品分类表)

6  多表更新

作用:参照另外的表,来更新本表内的数据。

1 UPDATE table_references
2 SET col_name1={expr1 | DEFAULT}
3 [,col_name2={expr2 | DEFAULT}]...
4 [WHERE where_condition]

语法结构:

1 table_references
2 {[INNER | CROSS]JOIN | {LEFT | RIGHT} [OUTER] JOIN}
3 table_reference
4 ON conditional_expr

连接类型:

  • INNER JOIN,内连接
  • 在MySQL中,JOIN,CROSS JOIN和INNER JOIN是等价的。
  • LEFT [OUTER] JOIN,左外连接
  • RIGHT [OUTER] JOIN,右外连接

(通过tdb_goods_cates数据表来更新tdb_goods表)

(更新后查看,确实被更改)

7  多表更新之一步到位

CREATE...SELECT语句:

1 //创建表的同时,将查询结果写入到数据表中
2 CREATE TABLE [IF NOT EXISTS] tbl_name
3 [(create_definition,...)]
4 select_statement

(查看品牌的分类)

(通过CREATE...SELECT来创建数据表并且同时写入记录)

(查看新表数据)

(按照正常语法,会提示错误,说是字段模糊,这种情况下只能给表起别名)

(利用AS语句给表起别名)

(查看表结构)

(通过ALTER TABLE语句修改数据表结构)

(再次查看表结构,发现数据类型以改变)

(分别在tdb_goods_cates和tdb_goods_brands表插入记录)

(在tdb_goods数据表写入任意记录)

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
我的架构演化笔记 功能1: 基本的用户注册

“咚咚”,一阵急促的敲门声, 我从睡梦中惊醒,我靠,这才几点,谁这么早, 开门一看,原来我的小表弟放暑假了,来南京玩,顺便说跟我后面学习一个网站是怎么做出来的。 于是有了下面的一段...

强子哥哥
2014/05/31
976
3
数据库代码辅助工具--MaoCaiJun.Database

MaoCaiJun.DataBase 是一个用于 Microsoft Visual Studio 的数据库代码生成组件。它是基于 xml 文件的代码创建工具,支持sql2000,sql2005,sql2008,access, SQLite MaoCaiJun.Database 数据库...

mccj
2013/02/06
2.3K
1
Javascript图元绘制库--ternlight

基于HTML CANVAS API的Javascript库,提供在HTML页面上绘制图元——如流程图的能力。 目前已支持简单的矩形图元和图元间的连线(直线、直角连线两种),拖拽图元等能力。 该javascript librar...

fancimage1
2013/02/07
6.2K
1
实时分析系统--istatd

istatd是IMVU公司工程师开发的一款优秀的实时分析系统,能够有效地收集,存储和搜索各种分析指标,类似cacti,Graphite,Zabbix等系统。实际上,istatd修改了Graphite的存储后端,重新实现了...

匿名
2013/02/07
2.9K
1
数据库表单生成器--SQLScreens

SQLScreens 是一个使用 Tcl/TK 编写的简单关系型数据库表单生成工具。可让你快速创建查询界面,并指定相应的表和字段。支持多种数据库,包括:MySQL, SQLite, and INFORMIX, and ODBC for o...

匿名
2013/02/17
893
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在Pandas的DataFrame中的行上进行迭代? - How to iterate over rows in a DataFrame in Pandas?

问题: I have a DataFrame from pandas: 我有一个来自熊猫的DataFrame : import pandas as pdinp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]df = pd.DataFrame(......

富含淀粉
42分钟前
20
0
与电商节伴生,平台销量榜单背后还有被低估的营销价值

文 | 曾响铃 来源 | 科技向令说(xiangling0815) 时至今日,电商节已经成为各巨头零售平台例行的活动,花样在不断创新,玩法也在不断涌现。 在这个过程中,伴随电商节的各种品牌、产品销量榜...

曾响铃
44分钟前
22
0
volatile关键字详解

前言 提到JAVA的并发编程,就不得不提volatile关键字,不管是在面试还是实际开发中,volatile关键字的使用都是一个应该掌握的技能。它之所以重要,是因为它和JAVA并发编程中会遇到三种重要问...

ls_cherish
今天
15
0
比继承更偏爱组成? - Prefer composition over inheritance?

问题: Why prefer composition over inheritance? 为什么更喜欢使用组合而不是继承? What trade-offs are there for each approach? 每种方法都有哪些取舍? When should you choose inher...

javail
今天
26
0
2020软件测试工程师史上最全面试题(内含答案)-看完BATJ面试官对你竖起大拇指!

以下是软件测试相关的面试题及答案,欢迎大家参考! 我不是至尊宝,也不是孙悟空,我只是那城墙下的一猿。  1、你的测试职业发展是什么?  测试经验越多,测试能力越高。所以我的职业发展是需...

程序员一凡
今天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部