SQl 语句 表的连接
当涉及到多个表查询时就需要使用将表连接的方法进行查询。
SQL语句连接的方式根本上分为5种:
•EQUI JOIN
•SEMI JOIN
3 •ANTI JOIN
4 •CROSS JOIN
•DIVISION
1.EQUI JOIN
这是最基本的JOIN(连接)操作包括:内连接,左连接,右连接,全连接
内连接:内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行。
语法格式:inner join
select *
from Student_One
inner join Student_Two
on Student_One.sno=Student_One.sno;
左连接:左连接的结果集包括left join 子句中指定的所有的行,不仅仅连接所匹配的行,如果左表的某行在右表中没有匹配行,在相关联的结果集行中右表的所有选择列表为空值。
语法格式:left join
select *
from Student_One
left join Student_Two
on Student_One.sno=Student_One.sno;
右连接:右连接是左连接的反向连接。返回右表的所有行,如果右表某行在左表没有匹配行,则左表对应的返回空值。
语法格式:right join
select *
from Student_One
right join Student_Two
on Student_One.sno=Student_One.sno;
全连接:返回左表和有右表中的所有行(有匹配的返回匹配的行)。当某行在另一个表中没有匹配时,另一个表的选择列表列包含空值。如果有匹配行,则整个结果集行包含基表的数据值。
语法格式:full join
select *
from Student_One
full join Student_Two
on Student_One.sno=Student_One.sno;
交叉连接:交叉连接返回左表中的所有行,左表的每一行与右表所有行组合。交叉连接也叫笛卡儿积。
注意:交叉连接有两种,显式和隐式的,没有on子句,返回的是两表的笛卡尔积。
隐式:
select *
from Student_One,Student_Two
显式:
select *
from Student_One
cross join Student_Two;
from子句中的表或者视图可通过内连接或全连接按任意顺序指定;但是用左连接或右连接指定表或视图的顺序很重要。
2.SEMI JOIN
这种连接关系在SQL中有两种表现方式:使用IN 或者 使用EXITS。
IN 比 EXITS 的可读性好
EXITS 比 IN 的表达性好(适合复杂的语句)
例子:
-- Using IN
select *
FROM author
where author.id IN (select book.author_id from book) -- Using EXISTS
select *
from author
where EXISTS (select 1 from book where book.author_id = author.id)
3.ANTI JOIN
这种连接的关系和SEMI JOIN 相反。在 IN 或 EXITS 前加 NOT 关键字
-- Using IN
select *
from author
where author.id NOT IN (select book.author_id from book) -- Using EXISTS
select *
from author
where NOT EXISTS (select 1 from book where book.author_id = author.id)
多表连接时SQl的常用技术 必须掌握!
SQl 语句 表的连接的更多相关文章
- 优化子查询sql语句为内连接
背景: 希望提高查询的效率,从sql语句中频繁出现的子查询入手. 数据表如下:Student表中的CityCode对应于City表中的Code. Student表: ...
- sql 语句的各种连接
数据表: 1.两种连接表现方式一样 其中 where 条件语句可以省略,当时join 的on 语句不可省略 2.左连接,右连接 左连接:返回左表的所有数据,并根据条件返回左右表的连接结果,如果未匹配到 ...
- SQL语句表名或者字段名和保留字冲突解决方法
最近开发遇到一个很奇葩的问题,简单做一下笔记 select * from Add ... 以上SQL语句会报错. 原因Add是表名,SQL语句保留字中又有Add 解决方法: select * from ...
- Sql语句 表中相同的记录(某个字段)只显示一条,按照时间排序显示最大或最小
原始表数据:
- 2016/05/13 thinkphp 3.2.2 ① 数据删除及执行原生sql语句 ②表单验证
[数据删除及执行原生sql语句] delete() 返回受影响的记录条数 $goods -> delete(30); 删除主键值等于30的记录信息 $goods -> delete( ...
- sql语句表连接
"Persons" 表: Id_P LastName FirstName Address City 1 Adams John Oxford Street London 2 Bush ...
- 【测试】使用hr用户下的employees和departments表写一条SQL语句,(MG连接)
SQL> select * from employees d, departments t where d.department_id=t.department_id; rows selecte ...
- sql语句表连接删除
DELETE 表1,表2FROM 表1 LEFT JOIN 表2 ON 表1.id=表2.id WHERE 表1.id=需要删除的ID
- Sql之表的连接总结
1.交叉连接(就是将两张表的数据 交叉组合在一起) 有两张表 客户表:[Sales.Customers] 和订单表:[Sales.Orders]. 业务需求:实现 Customer中custid(客户 ...
随机推荐
- 理解Underscore中的flatten函数
最近是在所在实习公司的第一个sprint,有个朋友又请假了,所以任务比较重,一直这么久都没怎么更新了,这个周末赖了个床,纠结了一会儿决定还是继续写这个系列,虽然比较乏味,但是学到的东西还是很多的. 之 ...
- 【[HNOI2005]狡猾的商人】
加权并查集 由于给出信息的是一些一个区间的和为多少,我们显然并不好处理出每一个点应该为多少,这我们根本做不到 但是我们想一下,如果要求一个区间\([l,r]\)的和,那么我们是不是可以利用前缀和\(p ...
- TensorFlow基础(二)实现神经网络
(1)前向传播算法 神经网络的前向传播算法主要构成部分: 1.神经网络的输入: 2.神经网络的连接结构:神经网络是由神经元(节点)构成的 3.每个神经元中的参数. (2)TensorFlow随机数生成 ...
- how to design Programs 学习笔记
how to design Programs 学习笔记 */--> how to design Programs 学习笔记 目录 1. 前言 1.1. 系统化程序设计 1.2. 输入和输出 2. ...
- js 实现商品放大镜效果
知识点,需熟悉下面属性及含义: offsetLeft //获取元素相对左侧的距离 (计算是从最左侧边框外开始) offsetTop //获取元素相对顶部的距离 ...
- 面试准备——(二)专业知识(4)C/C++语言
1. 预处理 断言 assert的功能,assert(statement),如果statement为真则程序继续执行,为假则整个程序中断退出 3. #define [ #ifndef DISKSIM_ ...
- 来看看Uber的司机支持服务签到及预约系统的架构设计思路
Uber的Greenlight Hubs(GLH)在全球拥有超过700个分支机构,为合作车主提供从账户和支付到车辆检查和车主注册等各方面的人工支持.为了给合作车主创造更好的体验并提高客户满意度,Ube ...
- linux设置容器(中间件)开机自启
/etc/rc.d/rc.local JAVA_HOME=/usr/java/jdk1.6.0_45 su - goldsign -c '/home/goldsign/Oracle/Middlew ...
- Vue--- 一点车项目 连接数据库
Vue--- 一点车项目 连接数据库 创建连接数据库配置 ###导入 const Koa = require('koa'); const Router = require('koa-router') ...
- RCF的简单使用教程以及什么是回调函数
RCF的使用教程 RCF(Remote Call Framework)是一个使用C++编写的RPC框架,在底层RCF支持多种传输实现方式(transport implementations). 包括T ...