背景 left join在我们使用mysql查询的过程中可谓非常常见,比如博客里一篇文章有多少条评论.商城里一个货物有多少评论.一条评论有多少个赞等等.但是由于对join.on.where等关键字的不熟悉,有时候会导致查询结果与预期不符,所以今天我就来总结一下,一起避坑. 这里我先给出一个场景,并抛出两个问题,如果你都能答对那这篇文章就不用看了. 假设有一个班级管理应用,有一个表classes,存了所有的班级:有一个表students,存了所有的学生,具体数据如下(在线SQL:https://w…
关于 “A LEFT JOIN B ON 条件表达式” 的一点提醒 ON 条件(“A LEFT JOIN B ON 条件表达式”中的ON)用来决定如何从 B 表中检索数据行,即使on中包含有A表中的列的限制条件,也不会过滤A的任何数据(A的数据只会通过where过滤). 如果 B 表中没有任何一行数据匹配 ON 的条件,将会额外生成一行所有列为 NULL 的数据 在匹配阶段 WHERE 子句的条件都不会被使用.仅在匹配阶段完成以后,WHERE 子句条件才会被使用.它将从匹配阶段产生的数据中检索过…
背景:随着业务模块的不断在增多,数据库mysql容量也是越来越大,做测试时,整个备份还原比较耗费时间,由于有时候仅仅需要单个表或者少数几个表,要想从整个备份文件中提取指定的表以及数据,需要以下方法. 说明:mysql常规备份还原后续补充.. 废话不说,直接上干货: 1.从整个.sql备份文件中提取表结构 提取"sp_money_detail"表结构(表创建语句) [root@centos7-50 data]# sed -e'/./{H;$!d;}' -e 'x;/CREATE TABL…
Mysql Join-连接查询(中) 认识 就我平时的数据接触来看, 连接查询也没有很复杂,不够是非常需要耐心和逻辑的, 一点点将数据查出来, 拼接等. 没有什么技巧, 多练习就会了. 无非就是表之间根据共同key来连接, 查询时结合union, where, 子查询这些..., 真的不难的, 就是有点烦, 有时会嵌套很多层,会晕. 实现 这里在网上找了一些培训班的查询练习资料做演示, 其实市场面上的培训班资料, 怎么说的, 优势在于覆盖面广, 重视应用, 缺点是很肤浅,只适合入门了解. 部门表…
需要知道sql中关键字的执行顺序. FROM-> ON->JOIN-> WHERE->GROUP BY-> HAVING->SELECT-> DISTINCT->ORDER BY->LIMIT on在join前边.join在where前边.知道这两点,那就好说了. 注意join中的on是对关联表起作用,不是对主表. 如果想过滤主表中的数据,要用where. 具体案例可以参照:http://xianglp.iteye.com/blog/868957…
left join中关于where和on条件的几个知识点: 1.多表left join是会生成一张临时表,并返回给用户 2.where条件是针对最后生成的这张临时表进行过滤,过滤掉不符合where条件的记录,是真正的不符合就过滤掉. 3.on条件是对left join的右表进行条件过滤,但依然返回左表的所有行,右表中没有的补为NULL 4.on条件中如果有对左表的限制条件,无论条件真假,依然返回左表的所有行,但是会影响右表的匹配值.也就是说on中左表的限制条件只影响右表的匹配内容,不影响返回行数…
left join中关于where和on条件的几个知识点: .多表left join是会生成一张临时表,并返回给用户 .where条件是针对最后生成的这张临时表进行过滤,过滤掉不符合where条件的记录,是真正的不符合就过滤掉. .on条件是对left join的右表进行条件过滤,但依然返回左表的所有行,右表中没有的补为NULL .on条件中如果有对左表的限制条件,无论条件真假,依然返回左表的所有行,但是会影响右表的匹配值.也就是说on中左表的限制条件只影响右表的匹配内容,不影响返回行数. 结论…
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机整数, 可使用以下语句: SELECT FLOOR(7 + (RAND() * 6)); 以上摘抄自MySQL手册 从 Mysql 表中随机读取数据不难,方法还挺多的,但是如果要考虑效率,得到一个快速的高效率的方法,那就不是一件简单的事情了(至少对我来说不简单). 随机获得Mysql数据表的一条或多…
学习下Mysql子查询IN中使用LIMIT的方法. 这两天项目里出了一个问题,mysql LIMIT使用后报错. 需求是这样的,我有3张表,infor信息表,mconfig物料配置表,maaply物料申请表,要求是读出申请表中哪些人申请哪些物料 于是,首先这样写: SELECT infor.name,infor.phone,infor.add, mconfig.mname,mapply.acount,from_unixtime(mapply.atime,'%Y-%m-%d') as 'atime…
1.join     1.1 OUTER JOIN:想要包含右侧表中的所有行,以及左侧表中有匹配记录的行.        1.11 Mysql中有左连接(left join):             SELECT * FROM a LEFT JOIN  b ON a.aID =b.bID             left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.         1.12 右连接(right join):        …
举例进行说明,我们现在有两个表,即商品表(products)与sales_detail(销售记录表).我们主要是通过这两个表来对MySQL关联left join 条件on与where 条件的不同之处进行讲述. 1.数据准备 创建products表并插入数据 drop table if exists products; CREATE TABLE `products` ( `pid` INT (3) NOT NULL auto_increment, `pname` VARCHAR (20) NOT…
一.为什么要用小表驱动大表 1.驱动表的定义 当进行多表连接查询时, [驱动表] 的定义为: 1)指定了联接条件时,满足查询条件的记录行数少的表为[驱动表] 2)未指定联接条件时,行数少的表为[驱动表](Important!) 忠告:如果你搞不清楚该让谁做驱动表.谁 join 谁,请让 MySQL 运行时自行判断 既然“未指定联接条件时,行数少的表为[驱动表]”了,而且你也对自己写出的复杂的 Nested Loop Join 不太有把握(如下面的实例所示),就别指定谁 left/right jo…
5.5 版本之前,MySQL本身只支持一种表间关联方式,就是嵌套循环(Nested Loop).如果关联表的数据量很大,则join关联的执行时间会非常长.在5.5以后的版本中,MySQL通过引入BNL算法来优化嵌套执行[Nested Loop Join]       NLJ 算法:将驱动表/外部表的结果集作为循环基础数据,然后循环从该结果集每次一条获取数据作为下一个表的过滤条件查询数据,然后合并结果.如果有多表join,则将前面的表的结果集作为循环数据,取到每行再到联接的下一个表中循环匹配,获取…
转载  一张图看懂 SQL 的各种 join 用法 一.JOIN 使用介绍 下面例子使用的数据表如下: -- ---------------------------- -- Table structure for dancing_hobby -- ---------------------------- DROP TABLE IF EXISTS `dancing_hobby`; CREATE TABLE `dancing_hobby` ( `id` ) NOT NULL COMMENT '主键'…
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机整数, 可使用以下语句: SELECT FLOOR(7 + (RAND() * 6)); 以上摘抄自MySQL手册 从 Mysql 表中随机读取数据不难,方法还挺多的,但是如果要考虑效率,得到一个快速的高效率的方法,那就不是一件简单的事情了(至少对我来说不简单). 随机获得Mysql数据表的一条或多…
以下的文章主要讲述的是MySQL关联left join 条件on与where 条件的不同之处,我们现在有两个表,即商品表(products)与sales_detail(销售记录表).我们主要是通过这两个表来对MySQL关联left join 条件on与where 条件的不同之处进行讲述. products: pid pname pcode 1 商品1 AC90 2 商品2 DE78 3 商品3 XXXX sales_detail: aid pcode saletime 1 AC90 2008-0…
写在前面 1.不要求每个人一定理解 联表查询(join/left join/inner join等)时的mysql运算过程 2.不要求每个人一定知道线上(现在或未来)哪张表数据量大,哪张表数据量小 3.但把mysql客户端(如SQLyog,如HeidiSQL)放在桌面上,时不时拿出来 explain 一把,这是一种美德! 在实例讲解之前,我们先回顾一下联表查询的基础知识 联表查询的基础知识 引子:为什么第一个查询using temporary,第二个查询不用临时表呢? 下面两个查询,它们只差了一…
MySQL左右连接查询中的NULL的数据筛选问题 xpression 为 Null,则 IsNull 将返回 True:否则 IsNull 将返回 False. 如果 expression 由多个变量组成,则任何成员变量中的 Null 将导致为整个表达式返回 True. SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where not I…
# 现象 left join在我们使用mysql查询的过程中可谓非常常见,比如博客里一篇文章有多少条评论.商城里一个货物有多少评论.一条评论有多少个赞等等.但是由于对join.on.where等关键字的不熟悉,有时候会导致查询结果与预期不符,所以今天我就来总结一下,一起避坑. 这里我先给出一个场景,并抛出两个问题,如果你都能答对那这篇文章就不用看了. 假设有一个班级管理应用,有一个表classes,存了所有的班级:有一个表students,存了所有的学生,具体数据如下(感谢廖雪峰的在线SQL):…
问题背景 最近用explain命令分析查询sql执行计划,时而能看到Extra中显示为"Using index"或者"Using where; Using Index",对这两者之间的明确区别产生了一些疑惑,于是通过网上搜索.自行实验探究了一番其具体区别. 测试数据准备 以下表作为测试表进行sql分析. CREATE TABLE `test_table` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `f0`…
本文首先介绍了MySQL的查询计划中ken_len的含义:然后介绍了key_len的计算方法:最后通过一个伪造的例子,来说明如何通过key_len来查看联合索引有多少列被使用. key_len的含义 在MySQL中,可以通过explain查看SQL语句所走的路径,如下所示: mysql> create table t(a int primary key, b int not null, c int not null, index(b)); Query OK, 0 rows affected (0…
今天在查询视图时,遇到了一个问题. 因为mysq不能嵌套select的子查询.所以我把子查询建成了视图b,主查询通过left join on关联视图b ,形成视图a. 由于视图b中也有left join , 通过left join 关联表c .通过c确定视图b中的字段state.如果c中有数据,则state=1,否则为0. 然后,在视图a中,取state的值,计算结果. 但是在select嵌套查询的时候,结果完全正确.但是建立两个视图来查询的时候,结果却出错. 后来,通过left join 取差…
table a(id, type): id     type ---------------------------------- 1      1 2      1 3      2 table b(id, class): id    class --------------------------------- 1      1 2      2 sql语句1:select a.*, b.* from a left join b on a.id = b.id and a.type = 1;…
  MySql的like语句中的通配符:百分号.下划线和escape   %:表示任意个或多个字符.可匹配任意类型和长度的字符. Sql代码 select * from user where username like '%huxiao';       select * from user where username like 'huxiao%';       select * from user where username like '%huxiao%';    另外,如果需要找出u_na…
文正整理自:http://www.csdn.net/article/2014-06-10/2820160 可扩展性 架构的可扩展性往往和并发是息息相关,没有并发的增长,也就没有必要做高可扩展性的架构,这里对可扩展性进行简单介绍一下,常用的扩展手段有以下两种: Scale-up:纵向扩展,通过替换为更好的机器和资源来实现伸缩,提升服务能力 Scale-out:横向扩展,  通过加节点(机器)来实现伸缩,提升服务能力 对于互联网的高并发应用来说,无疑横向扩展才是出路,同时通过纵向购买更高端的机器也一…
事务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查询语句因为崩溃或其他原因而无法执行,那么所有的语句就都不会执行.也就是说,事务内的语句要么全部执行,要么一句也不执行. 事务的特性:acid,也称为事务的四个测试(原子性,一致性,隔离性,持久性) automicity:原子性,事务所引起的数据库操作,要么都完成,要么都不执行 consisitency:一致性,事务执行前的总和和事务执行后的总和是不变的…
事务的概念 事 务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查 询语句因为崩溃或其他原因而无法执行,那么所有的语句就都不会执行.也就是说,事务内的语句要么全部执行,要么一句也不执行. 事务的特性:acid,也称为事务的四个测试(原子性,一致性,隔离性,持久性) automicity:原子性,事务所引起的数据库操作,要么都完成,要么都不执行consisitency:一致性,事务执行前的总和和事务执行后…
一.Hive的參数设置 1.  三种设定方式:配置文件 ·   用户自己定义配置文件:$HIVE_CONF_DIR/hive-site.xml ·   默认配置文件:$HIVE_CONF_DIR/hive-default.xml 用户自己定义配置会覆盖默认配置. 另外,Hive也会读入Hadoop的配置,由于Hive是作为Hadoop的client启动的,Hadoop的配置文件包含 ·   $HADOOP_CONF_DIR/hive-site.xml ·   $HADOOP_CONF_DIR/h…
MySql的like语句中的通配符:百分号.下划线和escape %代表任意多个字符 select * from user where username like '%huxiao'; select * from user where username like 'huxiao%'; select * from user where username like '%huxiao%'; _代表一个字符 select * from user where username like '_'; sele…
inner join.left join.right join中where和and的作用 .内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现 2.外连接: 包括  (1)左外连接 (左边的表不加限制) select a.studentno, a.studentname, b.classname    from students a, classes b where a.classid = b.classid(+);  (2)右外连接(右边的表不加限制) select a.studen…