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. ...
随机推荐
- C++之初始化问题
首先,我们应该明确的是在C++中初始化不是赋值,因为初始化是必要的,如果读取了未初始化的值将会导致不明确的行为.初始化指创建变量并且给它赋初值,而赋值则是擦除对象的当前值并用新值代替.C++支持两种初 ...
- ADC 計算時,階數的選擇
reference : ADC 階數的計算
- HighGUI图形图像界面初步——鼠标操作
OpenCV中的鼠标操作和滑动条的消息映射方式很类似,都是通过一个中介函数配合一个回调函数来实现的,创建和指定滑动条回调函数为createTrackbar, 而指定鼠标操作消息回调函数的函数为setM ...
- mysql utf8改utf8mb4
由于需要用到utf8mb4,之前是utf8现在给改成utf8mb4 查看当前环境 SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' ...
- leetcode 121 122 123 . Best Time to Buy and Sell Stock
121题目描述: 解题:记录浏览过的天中最低的价格,并不断更新可能的最大收益,只允许买卖一次的动态规划思想. class Solution { public: int maxProfit(vector ...
- UVALive 6426
UVALive 6426 /** 题意:给一个n*m的矩阵,求某一个区间的数的数量 做法:刚开始想用树状数组,但是RE,题目中说数据是从二进制流中读入, 用scanf会挂掉 所以用fread 读入 s ...
- web前端—css面试题
1.CSS 选择符有哪些? 2.CSS 优先级的选择过程? 优先级复合就近原则,同权重的情况下有限选择最近的属性. 载入样式的话是以最后载入的定位为准. 优先级: !important > id ...
- 前端读者 | 从一行代码里面学点JavaScript
本文来自 @张小俊128:链接:http://www.html-js.com/article/A-day-to-learn-from-a-line-of-code-inside-the-JavaScr ...
- centos7 mariaDB安装
参考:http://www.linuxidc.com/Linux/2016-03/128880.htm
- 洛谷P1196 [NOI2002] 银河英雄传说
#include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #includ ...