MYSQL复习笔记10-连接
Date: 20140219
Auth: Jin
一、介绍
连接是二元运算,可以对两个表或多个表进行查询。
T-SQL中分两大类,一是符合SQL标准的连接谓词表示形式,二是T-SQL扩展的使用关键字JOIN的表示形式。
二、连接谓词
where子句使用比较运算符给出连接条件对表进行连接,将这种表示形式称为连接谓词表示形式。
连接谓词中的比较字符可以是〈,〈=,〉,〉=,!=,〈〉,!<, !>,当比较符为=时就是等值连接。若在目标列中除去相同的字段名(重复的只保留一个
),则为自然连接。
1、select
mysql> select Product.*,ProductPrice.* from Product,ProductPrice where Product.productId=ProductPrice.productId;
mysql> select a.*,b.* from Product as a,ProductPrice as b where a.productId=b.productId;
mysql> select a.*,b.* from Product as a,ProductPrice as b where a.productId>b.productId;
注意:a的id会依次和b每一个id对比。
2.delete
mysql> delete a.*,b.* from Product as a,ProductPrice as b where a.productId=b.productId and a.created < '2004-01-01';
Query OK, 8 rows affected (0.00 sec)
3.update
mysql> update Product as a,ProductPrice as b set b.price=a.price*0.8 where a.productId=b.productId;
三、以JOIN关键字指定的连接
INNER JOIN 内连接
OUTER JOIN 外连接
CROSS JOIN 交叉连接
1、内连接 INNER
tableA as a INNER JOIN tableB as B ON A.productId = B.productId
tableA P INNER JOIN tableB PP ON P.productId = PP.productId
内连接是系统默认,可以省略关键字,使用内连接后仍可以使用WHERE子句指定条件。
mysql> select a.*,b.* from Product as a INNER JOIN ProductPrice as b ON a.productID = b.productID WHERE a.created < '2004-
01-01';
mysql> delete a.*,b.* from Product as a INNER JOIN ProductPrice as b ON a.productID = b.productID WHERE a.created < '2004-
01-01';
mysql> update Product as a INNER JOIN ProductPrice as b ON a.productId=b.productId set b.price=a.price*0.6 where a.created <
'2004-01-01';
2.外连接 OUTER
左外连接 LEFT OUTER JOIN: 结果表中除了包含满足连接条件的行外,还包括左表的行
右外连接 RIGHT OUTER JOIN: 结果表中除了包含满足连接条件的行外,还包括右表的行
完全外连接 FULL OUTER JOIN: 结果表中除了包含满足连接条件的行外,还包括两个表的所有行
四,例题
1.SQL SERVER中
USE PXSCJ
GO
select * from A;
1 a
2 b
3 c
4 d
5 e
select * from B;
1 A
2 B
2 C
5 D
内连接 4个记录
select * from A inner join B on A.id=B.id;
1 a 1 A
2 b 2 B
2 b 2 C
5 e 5 D
自然连接 4个记录
select A.*,B.uname from A inner join B on A.id=B.id;
1 a A
2 b B
2 b C
5 e D
左外连接 加左边表的记录 6个
select * from A left outer join B on A.id=B.id;
1 a 1 A
2 b 2 B
2 b 2 C
3 c NULL NULL
4 d NULL NULL
5 e 5 D
右外连接 加左边表的记录 4个
select * from A right outer join B on A.id=B.id;
1 a 1 A
2 b 2 B
2 b 2 C
5 e 5 D
完全外连接 包括两个表的所有行 6
select * from A full outer join B on A.id=B.id;
1 a 1 A
2 b 2 B
2 b 2 C
3 c NULL NULL
4 d NULL NULL
5 e 5 D
2、MYSQL
1)准备数据
mysql> create table A( id int(6) not null, name char(6) );
mysql> create table B( id int(6) not null, uname char(6) );
mysql> insert into A(id,name) value (1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e');
mysql> select * from A;
+----+------+
| id | name |
+----+------+
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
| 5 | e |
+----+------+
5 rows in set (0.00 sec)
mysql> insert into B(id,Uname) value (1,'A'),(2,'B'),(2,'C'),(5,'D');
mysql> select * from B;
+----+-------+
| id | uname |
+----+-------+
| 1 | A |
| 2 | B |
| 2 | C |
| 5 | D |
+----+-------+
2 连接
内连接 4个记录
mysql> select * from A inner join B on A.id=B.id;
+----+------+----+-------+
| id | name | id | uname |
+----+------+----+-------+
| 1 | a | 1 | A |
| 2 | b | 2 | B |
| 2 | b | 2 | C |
| 5 | e | 5 | D |
+----+------+----+-------+
4 rows in set (0.01 sec)
自然连接 4个记录
mysql> select A.*,B.uname from A inner join B on A.id=B.id;
+----+------+-------+
| id | name | uname |
+----+------+-------+
| 1 | a | A |
| 2 | b | B |
| 2 | b | C |
| 5 | e | D |
+----+------+-------+
4 rows in set (0.00 sec)
左外连接 加左边表的记录 6个
mysql> select * from A left outer join B on A.id=B.id;
+----+------+------+-------+
| id | name | id | uname |
+----+------+------+-------+
| 1 | a | 1 | A |
| 2 | b | 2 | B |
| 2 | b | 2 | C |
| 3 | c | NULL | NULL |
| 4 | d | NULL | NULL |
| 5 | e | 5 | D |
+----+------+------+-------+
6 rows in set (0.03 sec)
右外连接 加左边表的记录 4个
mysql> select * from A right outer join B on A.id=B.id;
+------+------+----+-------+
| id | name | id | uname |
+------+------+----+-------+
| 1 | a | 1 | A |
| 2 | b | 2 | B |
| 2 | b | 2 | C |
| 5 | e | 5 | D |
+------+------+----+-------+
4 rows in set (0.00 sec)
完全外连接 包括两个表的所有行 6
mysql> select * from A full outer join B on A.id=B.id;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'outer join B
on A.id=B.id' at line 1
由于mysql 不支持 full join 经过查资料可以这样写
mysql> select * from A left outer join B on A.id=B.id union select * from A right outer join B on A.id=B.id;
+------+------+------+-------+
| id | name | id | uname |
+------+------+------+-------+
| 1 | a | 1 | A |
| 2 | b | 2 | B |
| 2 | b | 2 | C |
| 3 | c | NULL | NULL |
| 4 | d | NULL | NULL |
| 5 | e | 5 | D |
+------+------+------+-------+
6 rows in set (0.00 sec)
MYSQL复习笔记10-连接的更多相关文章
- MYSQL复习笔记6-字符集
Date: 20100101 Auth: Jin 参考http://blog.sina.com.cn/s/blog_9707fac301016wxm.html 一.字符集介绍 计算机只处理二进制代码 ...
- MYSQL复习笔记5-select-from-where子句
Date: 20140125Auth: Jin参考:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#select一.select子句主要定 ...
- MYSQL复习笔记3-用户和安全
Date: 20140115Auth: Jin参考:http://dev.mysql.com/doc/refman/5.1/en/security.html 一.权限系统实现方式相关权限信息存储在几个 ...
- MYSQL复习笔记2-自带工具介绍
Date: 20140102Auth: Jin 一.mysql 命令行客户端1)base-h host-P port--socket=path,-S path用于连接的套接字文件替换使用IP PORT ...
- MYSQL复习笔记1-物理文件和系统架构
date:20140101auth:Jin 一.物理组成(一) 日志文件参考:http://dev.mysql.com/doc/refman/5.1/en/server-logs.html1.错误日志 ...
- mysql复习笔记
阅读目录 1.什么是SQL语句2.使用sql语句创建数据库和表3.创建数据表4.数据完整性约束5.四中基本字符类型说明6.SQL基本语句7.类型转换函数8.日期函数9.数学函数10.字符串函数11.联 ...
- MySQL 复习笔记
本文内容 SQL 语句 创建数据库 创建数据表 数据完整性约束 四种基本字符类型说明 SQL 基本语句 类型转换函数 日期函数 数学函数 字符串函数 合并结果集 union CASE 函数用法 IF ...
- MYSQL复习笔记12-视图
Date: 20140223Auth: Jin参考:http://blog.sina.com.cn/s/blog_436732df0100e768.html 一.介绍1.概念视图是从一个或几个基本表( ...
- MYSQL复习笔记9-存储过程
date: 20140208auth: Jin参考引用:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html mysql存储过程详解一.基本介绍1. ...
随机推荐
- 【DeepLearning学习笔记】Coursera课程《Neural Networks and Deep Learning》——Week2 Neural Networks Basics课堂笔记
Coursera课程<Neural Networks and Deep Learning> deeplearning.ai Week2 Neural Networks Basics 2.1 ...
- ifa_local 和 ifa_address
ifa_local 和 ifa_address区别联系: 1. 在配置了支持广播的接口上,与IFA_LOCAL一样,同样表示本地ip地址: 2. 对于点对点链路,IFA_ADDRESS表示的是对端的地 ...
- 为什么要用Jedis连接池+浅谈jedis连接池使用
为什么要使用Jedis连接池 Redis作为缓存数据库理论上和MySQL一样需要客户端和服务端建立起来连接进行相关操作,使用MySQL的时候相信大家都会使用一款开源的连接池,例如C3P0.因为直连会消 ...
- 解决TextView多行滑动与NestedScrollView等,滑动冲突,我的解决方案
1.首先要明白,什么时候回TextView处理滑动,什么时候不处理滑动 1.1往上滑动,到达文本底部就不要再处理了,如果往上滑动不在底部则继续TextView滑动 1.2往下滑动,到达文本顶部就不要再 ...
- VPS速度测试(4):上传下载速度、服务器带宽、Ping响应时间
1.VPS的速度好坏经常是我们选择某一个VPS商家的重要参考指标,对于国外的VPS主机我们可以执行以下命令来测试VPS入口带宽是多少. wget https://cachefly.cachefly.n ...
- dev....把pivotgridview和chart一起导出
首先~: 命名空间: using DevExpress.XtraPrinting;using DevExpress.XtraCharts.Native;using DevExpress.XtraPri ...
- PHP常用函数总结(180多个)
PHP常用函数总结 数学函数 1.abs(): 求绝对值 $abs = abs(-4.2); //4.2 数字绝对值数字 2.ceil(): 进一法取整 echo ceil(9.999); // 10 ...
- EL表达式使用时出现NumberFormatException异常
从后端数据库取出书本集合,然后循环输出到前端表格: <c:forEach items="${bookManagedBean.bookList}" var="book ...
- 关于多属性查找问题的sphinx解决方案
需求描述 mysql中,每一个文档都有多个标签,查询时可以筛选一个标签也可以筛选同时拥有多个标签的文档. 数据示例 文档 标签 1 1,2,3,4,5 2 2,3,4,5,6 3 3,4,5,6,7 ...
- [水煮 ASP.NET Web API2 方法论](12-4)OData 支持的 Function 和 Action
问题 在 Web API 中使用 OData Function 和 Action. 解决方案 可以通过 ODataModelBuilder,使用 OData 构建 ASP.NET Web API, E ...