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. ...
随机推荐
- Laravel 5.2 整合 Uploadify 上传图片
前端: <!-- 引入CSS.JS --> <link rel="stylesheet" type="text/css" href=" ...
- 移动端测试===Android内存管理: 理解App的PSS
Android内存管理: 理解App的PSS 原文链接:http://www.littleeye.co/blog/2013/06/11/android-memory-management-unders ...
- 使用UpdatePanel时FileUpload失效的问题
出处:http://www.cnblogs.com/caicainiao/archive/2010/12/08/1900377.html 1.使用UpdatePanel后,FileUpload的Has ...
- WEB前端之HTML5~HTML5与HTML4的区别
推出的理由及目标 WEB浏览器存在的问题包括以下三点 世界知名浏览器厂商对HTML5的支持 语法的改变 DOCTYPE的声明 XHTML的DOCTYPE声明方式 HTML4的DOCTYPE声明方式 H ...
- 【Java基础】重写equals需要重写hashcode
Object里的equals用来比较两个对象的相等性,一般情况下,当重写这个方法时,通常有必要也重写hashcode,以维护hashcode方法的常规协定,或者说这是JDK的规范,该协定声明相等对象必 ...
- eclipse 配置jsp
1.安装jdk和jre 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ...
- 无锁的对象引用:AtomicReference
http://www.dewen.net.cn/q/9588 首先volatile是java中关键字用于修饰变量,AtomicReference是并发包java.util.concurrent.ato ...
- DataTable.DefaultView.Sort 排序方法
今天在整合一个东西,需要用到DataTable的一个排序方法, 前我是将DataTable存到DataView里面的,所以刚开始就使用了DataView.Sort="ColumnName A ...
- hdu 4632(区间dp)
Palindrome subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65535 K (Java/ ...
- window下线程同步之(Critical Sections(关键代码段、关键区域、临界区域)
关键区域(CriticalSection) 临界区是为了确保同一个代码片段在同一时间只能被一个线程访问,与原子锁不同的是临界区是多条指令的锁定,而原子锁仅仅对单条操作指令有效;临界区和原子锁只能控制同 ...