慕课网--mysql开发技巧一 学习笔记
现在存在下面的两张表,表的结构如下所示
师徒四人表结构:
id,user_name,over
数据:
id user_name over
1 唐僧 旃檀功德佛
2 猪八戒 净坛使者
3 孙悟空 斗战胜佛
4 沙僧 金身罗汉
孙悟空朋友表结构:
id,user_name,over
数据:
id user_name over
1 孙悟空 成佛
2 牛魔王 被降服
3 蛟魔王 被降服
4 鹏魔王 被降服
5 狮驼王 被降服
over字段表示最后的成就
我们创建上面的两张表
CREATE TABLE `shitu` (
`id` tinyint(3) unsigned NOT NULL auto_increment,
`user_name` varchar(22) NOT NULL,
`over` varchar(22) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `friend` (
`id` tinyint(4) NOT NULL auto_increment,
`user_name` varchar(22) default NULL,
`over` varchar(22) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
左连接:
mysql> select a.user_name , a.over ,b.over from shitu as a left join friend as b on a.user_name = b.user_name;
+-----------+------------+----------+
| user_name | over | over |
+-----------+------------+----------+
| 唐僧 | 旃檀功德佛 | NULL |
| 猪八戒 | 净坛使者 | NULL |
| 孙悟空 | 斗战剩发 | 斗战胜佛 |
| 沙僧 | 金剩罗汉 | NULL |
+-----------+------------+----------+
4 rows in set
inner join 连接:
mysql> select a.user_name , a.over ,b.over from shitu as a
join friend as b on a.user_name = b.user_name;
+-----------+----------+----------+
| user_name | over | over |
+-----------+----------+----------+
| 孙悟空 | 斗战剩发 | 斗战胜佛 |
+-----------+----------+----------+
1 row in set
右连接
mysql> select a.user_name , a.over ,b.over from shitu as a right
join friend as b on a.user_name = b.user_name;
+-----------+----------+----------+
| user_name | over | over |
+-----------+----------+----------+
| 孙悟空 | 斗战剩发 | 斗战胜佛 |
| NULL | NULL | 被降服 |
| NULL | NULL | 被降服 |
+-----------+----------+----------+
3 rows in set
9. 使用join从句更新表
把同时存在于取经四人组和悟空兄弟表中的记录的人在取经四人表中的over字段更新为“齐天大圣”
1、第一步 首先取出两张表中都同时存在的人得到集合C
mysql> select a.user_name , a.over ,b.over from shitu as a join friend as b on a.user_name = b.user_name;
2、第二步:判断shitu表中那些人的人名在集合c中存在,如果存在将该记录更新成“齐天大圣”
上面是一种经典的设计思路,我们来看下面的代码
mysql> update
shitu as tmp1
set
tmp1.over = '齐天大圣'
where
tmp1.user_name
in
(
select
a.user_name
from
shitu as a
join
friend as b
on
a.user_name = b.user_name )
; 1093 - You can't specify target table 'tmp1' for update in FROM clause
如何解决该问题了
增加一个临时表解决上面的问题
mysql> update
shitu as tmp1
set
tmp1.over = '齐天大圣'
where
tmp1.user_name
in
(
select t2.user_name
from
(
select
a.user_name
from
shitu as a
join
friend as b
on
a.user_name = b.user_name ) as t2 )
;
Query OK, 1 row affected
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from shitu;
+----+-----------+------------+
| id | user_name | over |
+----+-----------+------------+
| 1 | 唐僧 | 旃檀功德佛 |
| 2 | 猪八戒 | 净坛使者 |
| 3 | 孙悟空 | 齐天大圣 |
| 4 | 沙僧 | 金剩罗汉 |
+----+-----------+------------+
4 rows in set
参看博客:http://blog.csdn.net/fdipzone/article/details/52695371
上面这种代码比较复杂,可以进行优化,使用下面的代码进行优化,在数据量很大的时候上面的sql语句性能较低,可以使用下面的代码进行优化
慕课网--mysql开发技巧一 学习笔记的更多相关文章
- 慕课网,我的yii2学习笔记(基础篇)
一.关于PHP知识点 1.命名空间:存放类文件的空间,可以随便定义,建议与类文件目录一致,方便管理. 注:(1).如果类没有设置命名空间,默认为顶级命名空间,在程序中可以用一下方式实例化. $mode ...
- 慕课网-Linux达人养成计划学习笔记
mkdir -p [目录]创建目录-p 递归创建ls 查看当前目录下的文件和目录等其他文件 cd [目录]命令英文愿意:change directory切换所在目录简化操作cd ~ 进入当前用户的家目 ...
- MySQL实战45讲学习笔记:第三十九讲
一.本节概况 MySQL实战45讲学习笔记:自增主键为什么不是连续的?(第39讲) 在第 4 篇文章中,我们提到过自增主键,由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧 ...
- 【MySql】赶集网mysql开发36条军规
[MySql]赶集网mysql开发36条军规 2012-05-14 14:02:33 分类: Linux 写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒 ...
- 多IDC数据分布--MySQL多机房部署 - 学习笔记 - 51CTO技术博客
多IDC数据分布--MySQL多机房部署 - 学习笔记 - 51CTO技术博客 多IDC数据分布--MySQL多机房部署
- [赶集网] 【MySql】赶集网mysql开发36条军规
[赶集网] [MySql]赶集网mysql开发36条军规 (一)核心军规(1)不在数据库做运算 cpu计算务必移至业务层:(2)控制单表数据量 int型不超过1000w,含char则不超过50 ...
- MySQL事务控制语句(学习笔记)
MySQL事务控制语句(学习笔记) MySQL事务控制语句 在mysql命令行的默认下,事务都是自动提交的,sql语句提交后马上会执行commit操作.因此开启一个事务必须使用begi ...
- 赶集网mysql开发36军规
赶集网mysql开发36军规 写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒过. (一)核心军规 (1)不在数据库做运算:cpu计算务必移至业务层 (2)控 ...
- 《疯狂前端开发讲义jQuery+Angular+Bootstrap前端开发实践》学习笔记
<疯狂前端开发讲义jQuery+Angular+Bootstrap前端开发实践>学习笔记 二〇一九年二月十三日星期三2时28分54秒 前提:本书适合有初步HTML.CSS.JavaScri ...
随机推荐
- 五、Java - 集合
一.集合 Java 中的集合类存放于 java.util 包中,是一个存放对象的容器. 集合存放的是对对象的引用,对象本身还是存在于 JVM 堆内存中. 存放的是对象,即引用数据类型,对于基本数据类型 ...
- Rocket - debug - DebugCustomXbar再讨论
https://mp.weixin.qq.com/s/YPFa6kE6I_Ud_MJGvzmS-g 简单讨论输入边/输出边Bundle的方向. 1. 上游节点的地址不重复 仔细看了一下sourceFn ...
- Java实现 LeetCode 749 隔离病毒(DFS嵌套)
749. 隔离病毒 病毒扩散得很快,现在你的任务是尽可能地通过安装防火墙来隔离病毒. 假设世界由二维矩阵组成,0 表示该区域未感染病毒,而 1 表示该区域已感染病毒.可以在任意 2 个四方向相邻单元之 ...
- Java实现 蓝桥杯VIP 算法训练 P1101
有一份提货单,其数据项目有:商品名(MC).单价(DJ).数量(SL).定义一个结构体prut,其成员是上面的三项数据.在主函数中定义一个prut类型的结构体数组,输入每个元素的值,计算并输出提货单的 ...
- Java实现 蓝桥杯VIP 算法训练 集合运算
问题描述 给出两个整数集合A.B,求出他们的交集.并集以及B在A中的余集. 输入格式 第一行为一个整数n,表示集合A中的元素个数. 第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素. 第三行 ...
- Java实现 LeetCode 167 两数之和 II - 输入有序数组
167. 两数之和 II - 输入有序数组 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1 和 index2,其中 index1 必 ...
- Java实现 LeetCode 88 合并两个有序数组
88. 合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元 ...
- Java实现 LeetCode 20 有效的括号
20. 有效的括号 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. ...
- Java实现 洛谷 P1582 倒水
import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import ...
- java解决poi导出excel文字水印,导出excel不可操作问题
首先需求是用户提出导出excel数据需使用水印备注其用途: 其实就是在导出excel的同时带有自定义文字水印的导出. 那么我们首先想到的肯定是以一个什么样的思路去解决该问题,首先查找poi导出exce ...