子查询Subquery

出现在其他sql语句内的select子句。

子查询的外层查询可以是:SELECT,INSERT,UPDATE,SET或DO。

子查询可以返回标量,一行,一列或子查询。

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

operand comparison_operator subquery (←子查询返回一条)

operand comparison_operator ANY (subquery)

operand comparison_operator SOME (subquery) (←any和some等价 符合其中一个就行)

operand comparison_operator ALL (subquery) (←符合全部)

eg1.SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price >= (SELECT ROUND(AVG(goods_price),2) FROM tdb_goods);

eg2.SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price >= ANY(SELECT goods_price FROM tdb_goods WHERE goods_cate = '超极本');

②[NOT] IN的子查询

operand comparison_operator [NOT] IN (subquery)

=ANY 运算符与IN等效

!=ALL或 <>ALL运算符与NOT IN等效

③[NOT] EXISTS的子查询(←使用较少)


多表更新(参照另外的表来更新本表)

①UPDATE table_references SET col_name1={expr1 | DEFAULT}

[,col_name2 = {expr2 | DEFAULT}] …

[WHERE where_condition]

table_references :表的参照关系

eg.UPDATE tbd_goods INNER JOIN tbd_goods_cates ON goods_cate = cate_name

SET goods_cate = cate_id;

②创建数据表同时将查询结果写入到数据表

CREATE TABLE [IF NOT EXISTS] tbl_name [(create_definition,…)] select_statement

eg1.CREATE TABLE tbd_goods_brands(

brand_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

brand_name VARCHAR(40) NOT NULL)

SELECT brand_name FROM tdb_goods GROUP BY brand_name;

eg2.UPDATE tbd_goods AS g INNER JOIN tbd_goods_brands AS b ON g.brand_name = b.brand_name SET g.brand_name =b.brand_id;

③修改表的数据类型和名字

ALTER TABLE tbd_goods

CHANGE goods_cate cate_id SMALLINT UNSIGNED NOT NULL,

CHANGE brand_name brand_id SMALLINT UNSIGNED NOT NULL;


连接:表的参照关系(事实的外键)

table_reference

{[INNER | CROSS] JOIN | {LEFT | RIGHT} [OUTER] JOIN}

table_reference

ON conditional_expr

conditional_expr (连接条件)

连接类型:

INNER JOIN 内连接:MySQL中 JOIN,INNER JOIN 和 CROSS JOIN等价

LEFT [OUTER] JOIN 左外连接

RIGHT[OUTER] JOIN 右外连接

数据表参照

table_reference

tbl_name [[AS] alias] | table_subquery [AS] alias

table_subquery 可以作为子查询使用在FROM子句中,这样的子查询必须为其赋予别名

连接条件

使用ON设定连接条件,用WHERE进行结果集记录的过滤

eg.tdb_goods 结构

tdb_goods_cates结构

内连接INNER JOIN (显示交集)

eg.SELECT goods_id,goods_name,cate_name FROM tdb_goods AS g INNER JOIN tdb_goods_cates AS b ON g.cates_id = b.cates_id;

左外连接 LEFT [OUTER] JOIN

在没有指定WHERE条件下,左外连接条件决定如何检索数据表B

如果A表中某条记录符合WHERE条件,但是在数据表B不存在符合连接条件的记录,则结果中会出现一条空记录的B行

右外连接 RIGHT [OUTER] JOIN

多表连接

SELECT goods_id,goods_name,cate_name,brand_name,goods_price FROM tdb_goods AS g

INNER JOIN tdb_goods_cates AS c ON g.cate_id = c.cate_id

INNER JOIN tdb_goods_brands AS b ON g.brand_id = b.brand_id;

连了三张表,输出品牌名和类型名等等


豆知识

使用SET NAME 编码; 来避免查询时乱码的发生

MySQL学习笔记(5)的更多相关文章

  1. Mysql学习笔记(三)对表数据的增删改查。

    正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...

  2. MySQL学习笔记一

    MySQL 学习笔记 一 一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系 ...

  3. Mysql学习笔记(二)数据类型 补充

    原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...

  4. Mysql学习笔记(一)数据类型

    原文:Mysql学习笔记(一)数据类型 学习内容: Mysql基本数据类型. 1.数字类型.. i.整型     Mysql数据类型             含义(有符号)     tinyint(m ...

  5. 初识mysql学习笔记

    使用VMVirtualBox导入Ubuntu后,可以通过sudo apt-get install mysql-server命令下载mysql. 在学习过程中,我遇到了连接不上Xshell的问题.最终在 ...

  6. MySQL学习笔记-锁相关话题

    在事务相关话题中,已经提到事务隔离性依靠锁机制实现的.在本篇中围绕着InnoDB与MyISAM锁机制的不同展开,进而描述锁的实现方式,多种锁的概念,以及死锁产生的原因.   Mysql常用存储引擎的锁 ...

  7. MySQL学习笔记-事务相关话题

    事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...

  8. MySQL学习笔记-数据库文件

    数据库文件 MySQL主要文件类型有如下几种 参数文件:my.cnf--MySQL实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类 ...

  9. MySQL学习笔记-数据库内存

    数据库内存 InnoDB存储引擎内存由以下几个部分组成:缓冲池(buffer pool).重做日志缓冲池(redo log buffer)以及额外的内存池(additional memory pool ...

  10. MySQL学习笔记-数据库后台线程

    数据库后台线程 默认情况下讲述的InnoDB存储引擎,以后不再重复声明.后台线程有7个--4个IO thread,1个master thread,1个锁监控线程,1个错误监控线程.IO thread的 ...

随机推荐

  1. 人生第一场组队赛---2014.8 zju monthly

    暑期集训中段就组了队,不过一直没机会打比赛 昨天kitkat突然发现了zju要搞月赛,我想了一下题目对于我这种渣实在是有点难,于是想到干脆打一次组队赛吧,跟队友商量了一下也同意了 12点---17点  ...

  2. naive bayes

    场景:垃圾邮件预测 目标: $p(y|w) = \frac{p(w|y)p(y)}{p(w)}$ 对于一封邮件来说,它的单词相同,所以$p(w)$可以不关心,计算得到分子就能知道更属于哪一类 所以,关 ...

  3. Android Notivation的使用

    官方帮助文档:http://wear.techbrood.com/guide/topics/ui/notifiers/notifications.html 博文推荐:http://blog.csdn. ...

  4. 解决itunesconnect无法訪问

    今天打开https://itunesconnect.apple.com出现了无法訪问提示,例如以下图, 我起初以为苹果在维护呢,但想想,假设是维护提示页面也应该会友好些.带着疑问,google一搜,看 ...

  5. C#中使用日志类,添加dll时出现错误

    警告 1 未能解析引用的程序集 “log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, proces ...

  6. React系列(一):React入门

    React简介 1.由来 React是有Facebook开发出来用于构建前端界面的JS组件库,由于其背后的强大背景,使得这款库在技术开发上完全没有问题. 2.React的优势 解决大规模项目开发中数据 ...

  7. Spring IOC的描述和Spring的注解(转)

    Spring常用的注解 本文系转载:转载网址: http://www.cnblogs.com/xdp-gacl/p/3495887.html http://ljhzzyx.blog.163.com/b ...

  8. 一个证书多次使用-导出p12文件

    在苹果开发者网站申请的证书,是授权mac设备的开发或者发布的证书,这意味着一个设备对应一个证书,但是99美元账号只允许生成3个发布证书,两个开发证书,这满足不了多mac设备的使用,使用p12文件可以解 ...

  9. Rectangles

    Given two rectangles and the coordinates of two points on the diagonals of each rectangle,you have t ...

  10. C语言的声明和定义

    在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事. 下面我就简单的把他们的区别介绍如下: 变量的声明有两种情况: (1)一种 ...