MySQL学习笔记(5)
子查询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)的更多相关文章
- Mysql学习笔记(三)对表数据的增删改查。
正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...
- MySQL学习笔记一
MySQL 学习笔记 一 一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系 ...
- Mysql学习笔记(二)数据类型 补充
原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...
- Mysql学习笔记(一)数据类型
原文:Mysql学习笔记(一)数据类型 学习内容: Mysql基本数据类型. 1.数字类型.. i.整型 Mysql数据类型 含义(有符号) tinyint(m ...
- 初识mysql学习笔记
使用VMVirtualBox导入Ubuntu后,可以通过sudo apt-get install mysql-server命令下载mysql. 在学习过程中,我遇到了连接不上Xshell的问题.最终在 ...
- MySQL学习笔记-锁相关话题
在事务相关话题中,已经提到事务隔离性依靠锁机制实现的.在本篇中围绕着InnoDB与MyISAM锁机制的不同展开,进而描述锁的实现方式,多种锁的概念,以及死锁产生的原因. Mysql常用存储引擎的锁 ...
- MySQL学习笔记-事务相关话题
事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...
- MySQL学习笔记-数据库文件
数据库文件 MySQL主要文件类型有如下几种 参数文件:my.cnf--MySQL实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类 ...
- MySQL学习笔记-数据库内存
数据库内存 InnoDB存储引擎内存由以下几个部分组成:缓冲池(buffer pool).重做日志缓冲池(redo log buffer)以及额外的内存池(additional memory pool ...
- MySQL学习笔记-数据库后台线程
数据库后台线程 默认情况下讲述的InnoDB存储引擎,以后不再重复声明.后台线程有7个--4个IO thread,1个master thread,1个锁监控线程,1个错误监控线程.IO thread的 ...
随机推荐
- Aix字符集
aix 安装中文字符集 1.看到系统安装过的字符集 locale -a 2.安装 smitty-->System Environments-->Manage Language Enviro ...
- UVA 116 Unidirectional TSP 经典dp题
题意:找最短路,知道三种行走方式,给出图,求出一条从左边到右边的最短路,且字典序最小. 用dp记忆化搜索的思想来考虑是思路很清晰的,但是困难在如何求出字典序最小的路. 因为左边到右边的字典序最小就必须 ...
- getline(cin,s) bug workaround
#include<iostream>using namespace std;#include<string> int main(){int n;stirng s;cin> ...
- Hibernate 、多表关联映射-多对一关系(many-to-one)
Hibernate.cfg.xml: <session-factory name="sessionFactory"> <property name="h ...
- PHP自学2——将用户提交表单存储到外部普通文件中
在上一节中我们已经实现了将用户的订单信息提交到服务器端,然后服务器端将提交信息返回并显示到页面上.这一节将把上一节用户的订单信息保存到外部的普通文件中(即.txt文本文件中). 本节代码将用户提交的订 ...
- AngularJs 常用函数
/** * [intersect 取两个数组的交集] var firstArray = [1,3,5]; var secondArray = [2,5,8]; var result */ .filte ...
- Android开发问题汇总(持续更新)
在Android开发中,总会有一些很小的问题.由于我们的不仔细,很容易忽略掉,从而导致在该问题上花费了很多的时间,造成工作进度的延迟. 为此,在这里做一下记录,避免再次浪费许多时间在这些问题上. 1. ...
- iOS修改截取图片不规范问题
+(UIImage *) imageCompressForWidth:(UIImage *)sourceImage targetWidth:(CGFloat)defineWidth{ UIImage ...
- maven 引用自己的jar
<build> <plugins> <plugin> <groupId>org.apache.maven.pl ...
- Java学习之Java实现CallBack功能
回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数.而那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利用这个机会在 ...