文档章节

四、连接查询

swift_hua
 swift_hua
发布于 2017/08/03 16:11
字数 834
阅读 1
收藏 0

-- 交叉连接
select * from my_student cross join my_class;
-- my_student cross join my_class是数据源

-- 内连接
select * from my_student inner join my_class on my_student.c_id = my_class.id;
select * from my_student inner join my_class on c_id = my_class.id;
select * from my_student inner join my_class on c_id = id; -- 两张表都有id字段

-- 字段和表别名
select s.*,c.name as c_name,c.room from -- 字段别名
my_student as s inner join my_class as c -- 表别名
on s.c_id = c.id;


-- where代替on
select s.*,c.name as c_name,c.room from -- 字段别名
my_student as s inner join my_class as c -- 表别名
where s.c_id = c.id;

-- 左连接
select s.*,c.name as c_name,c.room from
my_student as s left join my_class as c -- 左表为主表: 最终记录数至少不少于左表已有的记录数
on s.c_id = c.id;

-- 右连接
select s.*,c.name as c_name,c.room from
my_student as s right join my_class as c -- 右表为主表: 最终记录数至少不少于右表已有的记录数
on s.c_id = c.id;


select s.*,c.name as c_name,c.room from
my_class as c right join my_student as s -- 左表为主表: 最终记录数至少不少于左表已有的记录数
on s.c_id = c.id;

-- 自然内连接
select * from my_student natural join my_class;

-- 自然左外连接
select * from my_student natural left join my_class;

-- 外连接模拟自然外连接: using
select * from my_student left join my_class using(id);

 

SQL中将连接查询分成四类: 内连接,外连接,自然连接和交叉连接

 

交叉连接: cross join, 从一张表中循环取出每一条记录, 每条记录都去另外一张表进行匹配: 匹配一定保留(没有条件匹配), 而连接本身字段就会增加(保留),最终形成的结果叫做: 笛卡尔积.

基本语法: 左表 cross join 右表; ===== from 左表,右表;

笛卡尔积没有意义: 应该尽量避免(交叉连接没用)

交叉连接存在的价值: 保证连接这种结构的完整性

 

内连接: [inner] join, 从左表中取出每一条记录,去右表中与所有的记录进行匹配: 匹配必须是某个条件在左表中与右表中相同最终才会保留结果,否则不保留.

基本语法

左表 [inner] join 右表 on 左表.字段 = 右表.字段; on表示连接条件: 条件字段就是代表相同的业务含义(如my_student.c_id和my_class.id)

内连接可以没有连接条件: 没有on之后的内容,这个时候系统会保留所有结果(笛卡尔积)

内连接还可以使用where代替on关键字(where没有on效率高)

 

外连接: outer join, 以某张表为主,取出里面的所有记录, 然后每条与另外一张表进行连接: 不管能不能匹配上条件,最终都会保留: 能比配,正确保留; 不能匹配,其他表的字段都置空NULL.

外连接分为两种: 是以某张表为主: 有主表

Left join: 左外连接(左连接), 以左表为主表

Right join: 右外连接(右连接), 以右表为主表

基本语法: 左表 left/right join 右表 on 左表.字段 = 右表.字段;

 

自然连接: natural join, 自然连接, 就是自动匹配连接条件: 系统以字段名字作为匹配模式(同名字段就作为条件, 多个同名字段都作为条件).

自然连接: 可以分为自然内连接和自然外连接.

自然内连接: 左表 natural join 右表;

© 著作权归作者所有

共有 人打赏支持
swift_hua
粉丝 0
博文 33
码字总数 20868
作品 0
成都
程序员
数据库多表连接查询

学习数据库查询的时候对多表连接查询的有些概念还比较模糊。而连接查询是在数据库查询操作的时候肯定要用到的。对于此概念 我用通俗一些的语言和例子来进行讲解。这个例子是我讲课的时候经常...

liuzs1208
2014/12/03
0
0
SQL 左右连接

学习数据库查询的时候对多表连接查询的有些概念还比较模糊。而连接查询是在数据库查询操作的时候肯定要用到的。对于此概念 我用通俗一些的语言和例子来进行讲解。这个例子是我讲课的时候经常...

黄金小瓜
2011/07/22
128
0
穆建情/AgileDataAccess

#AgileDataAccess Agile.DataAccess基于FluentData扩展重写,提供高效的性能与风格简洁的API,支持多种主流数据库访问。当前市面上的 ORM 框架,如 Entity Framework 和 NHibernate,都过于复...

穆建情
2017/06/18
0
0
MYSQL学习笔记(四)查询数据

某个班级学生信息表t_grade结构和数据如下: 一、单表查询 1.查询所有字段 2.查询特定字段 3.where条件查询 4.带in关键字查询 5 .带between and关键字查询 6.带like的模糊查询 7.空值查询 8....

iborder
2016/09/05
2
0
MySQL5.7 galera cluster 死锁

问题: 数据库更换成 mysql galera cluster(三台服务器) + keepalived lvs(两台服务器)后,tomcat 日志偶尔报出 mysql deadlock,详细日志如下: 以前环境: 四台 tomcat 服务器连接一台...

Colben
07/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

TypeScript基础入门之声明合并(二)

转发 TypeScript基础入门之声明合并(二) 声明合并 合并命名空间 与接口类似,同名的命名空间也将合并其成员。 由于名称空间同时创建了名称空间和值,因此我们需要了解它们是如何合并的。 要合...

durban
6分钟前
0
0
centos7系统安装sersync+rsync实现服务器同步功能

centos7系统安装sersync+rsync实现服务器同步功能 MQ_douer0人评论21708人阅读2017-04-08 15:49:03 一、为什么要用sersync+rsync架构? 1、sersync是基于inotify开发的,类似于inotify-tools...

linjin200
7分钟前
1
0
Windows下安装phpRedis扩展

Windows下安装phpRedis扩展 通常在做PHP程序测试时,会用到Redis。而一般测试都是在Windows下进行的,所以需要在Windows环境下安装phpRedis扩展,用以支持php对Redis的访问。 工具/原料 php调...

梦梦阁
12分钟前
1
0
HTTPConnectionPool(host:XX)Max retries exceeded with url 解决方法

HTTPConnectionPool(host:XX)Max retries exceeded with url 解决方法 在做双十一压测时,高并发调用requests时报错.问题解决方法 问题原因 是因为在每次数据传输前客户端要和服务器建立TCP...

_Change_
16分钟前
0
0
iosdfgh

复制 IO流 (***** 了解 *****) 1.1 概述 之前我们学习了 File 类,这个类中有很多操作文件本身的方法, File类它只能操作文件或文件夹,并不能去访问文件中的数据。真正保存数据的是文件,数据...

码农屌丝
17分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部