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. ...
随机推荐
- Linux 入门记录:二十、Linux 包管理工具 YUM
一.YUM(Yellowdog Updater, Modified) 1. YUM 简介 RPM 软件包形式管理软件虽然方便,但是需要手动解决软件包的依赖问题.很多时候安装一个软件首先需要安装 1 个 ...
- ZOJ 3537 Cake 求凸包 区间DP
题意:给出一些点表示多边形顶点的位置(如果多边形是凹多边形就不能切),切多边形时每次只能在顶点和顶点间切,每切一次都有相应的代价.现在已经给出计算代价的公式,问把多边形切成最多个不相交三角形的最小代价 ...
- Centos_Lvm_Create pv vg lv and mount
re-scan new disks without restarting CentOS re-scan new disks(/dev/sdc): #ls /sys/class/scsi_host/ h ...
- 设计模式之笔记--适配器模式(Adapter)
适配器模式(Adapter) 定义 适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 适配器模式 ...
- CF1064 E - Dwarves, Hats and Extrasensory Abilities
题意 交互题, 本来应该是在平面上进行的. 实际上换成一条直线就可以, 其实换成在平面上更复杂一些. Solution 假设\(l\)点是黑点, \(r\)处是白点, 那么就把下一个点的位置放置在\( ...
- sql查询语句查询顺序
一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...
- window.screen.height和window.screen.availHeight和document.body.clientHeight和document.documentElement.clientHeight
说这几个属性前 我说一下我的设备 我的设备有两个,一个高度为1080的显示器,一个高度为800的电脑 第一种:window.screen.height 这个方法是获取用户电脑屏幕的高度,是不关浏览器或 ...
- Intersection of Two Linked Lists——经典问题
Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...
- Java学习笔记(十)——xml
[前面的话] 学习过程中还是效率不够高,老是容易注意力不集中,着急啊.不能在这样了,要好好学习,好好努力. 学习过程中的小知识点总结,基础知识,选择阅读. [xml定义] 定义:可扩展标记语言(英语: ...
- coercing to Unicode错误的一个解决办法
http://blog.csdn.net/happen23/article/details/46683813