SQL 语句多表联查
前言
最近面试实习生,发现一般来说,公司喜欢通过一些 SQL 语句来考察你对数据库的使用熟不熟悉。所以我来总结一下我在面试中遇到多表联查是怎么联查的。
三表联查
首先来说多表联查的一些知识点。
多表是指等于或者多余三个表以上的数据库查询。多表联查的类型有:
- 内连接:join,inner join
- 外连接:left join,left outer join,right join,right outer join,union
- 交叉连接:cross join
解释一下,外连接是指将两个表进行合并,如果有不相同的列,那么另外一个表将显示 null。而内连接是指内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。也就是说,运算符可以是 =,也可以是 >、>=、<=、<、!>、!<和<>。
内连接
假如我们有两个表
student.table
id name clsId
1 tjc 1
2 zhangsan 2
3 李四 3
4 刘五 4
5 黄六 5
class.table
clsId clsName
1 软件1班
2 软件2班
3 软件3班
4 软件4班
为了查询上面两个表,我们可以使用两种查询语句:
- select * from student as s,class as as c where s.clsId = class.clsId
- select * from student as s inner join class as c on s.clsId = class.clsId
两种结果都是:
id name clsId clsId clsName
1 tjc 1 1 软件1班
2 zhangsan 2 2 软件2班
3 李四 3 3 软件3班
4 刘五 4 4 软件4班
外连接
外连接跟内连接不同之处,如果查询的表中,如果通过关联标示符中,一个表的数据而另外一个表没有响应的数据项,那么就显示 null。
左连接
查询 SQL 语句为:
select * from student as s left join class as c on s.clsId = c.clsId
以左表为基准,如果右表没有相应的数据项,那么右表显示为 null。
右连接
select * from student as s right join class as c on s.clsId = c.clsId
以右表为基准,如果左表没有相应的数据项,那么左表显示为 null。
全连接
select * from student as s full outer join class c on s.clsId = c.clsId
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
交叉连接
交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。
select * from student as s cross join class as c order by s.id
SQL 语句多表联查相关推荐
- SQL语句---多表联查、改、删
SQL语句-多表联查.改.删 1.多表联查 select* from Student t1 inner join Teacher t2 on t1.no=t2.no where t2.Tname='M ...
- sql语句———多表联查
连接查询 内连接: 相当于查询集合A与集合B的交集部分 外连接 左外连接:查询左表所有数据,以及两张表交集部分数据 右外连接:查询右表所有数据,以及两张表交集部分数据 自连接:当前表与自身的连接查询, ...
- sql语句 四表联查
header("Content-Type: text/html;charset=utf-8"); $mysql_server="xxxxx"; $mysql_u ...
- sql序列(2) sql语句功能表
这里提供一份 sql语句功能表,大家可以根据关键字去梳理自己的知识点 https://files.cnblogs.com/files/namedL/sql%E8%AF%AD%E5%8F%A5%E5%8 ...
- 用一条sql语句删除表中所相同记录
用一条sql语句删除表中所相同记录如下一.具有主键的情况 a.具有唯一性的字段id(为唯一主键) delete table where id not in ( select max(id) from ...
- 用MS SQL 语句修改表中字段类型
[问题]用SQL 语句判断表中是否存在password字段,不存在则新增字段,若存在password字段,把字段的类型由int 类型改为text类型. [实现方法] if exists( select ...
- 【SQL】SQL语句多表联合查询
SQL语句多表联合查询 CREATE TABLE orders( id int not null primary key identity(1,1), customerName varchar(100 ...
- 轩小陌的Python笔记-day26 必备SQL语句、表关系及授权
day26 必备SQL和表关系及授权 课程目标:掌握开发中最常见的SQL语句和表关系及授权相关知识点. 课程概要: 必备SQL(8个必备) 表关系 授权 1. 必备SQL语句 上一节讲解了最基础SQL ...
- SQL语句多表查询:【多表连查】和【子查询】
SQL语句多表查询:[多表连查]和[子查询] 说明:insert.update.delete只针对[一张表]执行操作. 说明:select可以查询一张表.也可以查询多张表. 说明:多表查询分为:[多表 ...
最新文章
- 100法拉电容生猛无线充电背后原因
- 搭建Modelsim SE仿真环境-使用do文件仿真
- OpenStack Heat 如何来实现和支持编排
- jquery validate 插件:(2)简单示例
- 玩转Mixly – 8、Arduino AVR编程 之 变量
- 链表表示八进制加法c语言,用单链表实现八进制加法操作,恳请大家看看Add( )函数的问题...
- Thymeleaf与Spring集成(第2部分)
- ceph 数据库_Facebook打开了动画库,Ceph在Red Hat找到了新家,等等
- mysql日志输出到syslog_在chroot环境下将MySQL日志输出到syslog
- fullPage.js给网站加上全屏幻灯片的展示效果
- osip和mysql_Windows下编译eXosip、osip,以及UAC和UAS的例子
- RS232和RS485区别
- mongodb mongod 参数解释
- Python 疾病诊断归一化
- php影院影城源码,99影院源码 影视网站程序源码/附教程
- Java 二叉树完整代码(递归迭代)
- STC宏晶单片机初始开发教程
- 计算机电源复位,关于Apple本本的电池复位(重置电源管理、电池重置)方法
- 程序员延寿指南-活着才能输出
- 【Matlab代码】斐波拉契数列