sql连接语句
简述
简单回顾并总结下不同的表连接语句有什么异同之处以及一些概念。
建库语句如下
DROP DATABASE IF EXISTS `demo`;
CREATE DATABASE `demo`;
USE `demo`;
/*部门表*/
CREATE TABLE department (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(50)
);
INSERT INTO department VALUES(DEFAULT, '财务'),(DEFAULT, '客服'),(DEFAULT, '技术');
/*雇员表*/
CREATE TABLE employee (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(50),
`department_id` INT,
CONSTRAINT fk_employee_department FOREIGN KEY (id) REFERENCES department(id)
);
INSERT INTO employee VALUES(DEFAULT, '张三', 1),(DEFAULT, '李四', 2),(DEFAULT, '王五', 2);
由上代码可知,分别创建了部门表和雇员表,雇员表和部门表是多对一的关系,技术部没有雇员。
内连接
语法:inner join ... on ... inner可以省略。
概念:内连接查询的结果是从两个或两个以上的表的组合中挑选出符合连接条件的数据,如果数据无法满足连接条件则将其忽略。在内连接查询中,参与连接的表的地位是平等的。
例:现在要查询员工和其所在的部门,sql语句如下
SELECT e.id, e.`name`, d.`name` '部门' FROM employee e JOIN department d ON e.`department_id`=d.`id`
结果如下:

可以看出,部门一列只是将有员工的部门查询了出来,而没有员工的技术部则没有查询出来。
外连接
概念:上文提到:在内连接查询中,参与连接的表的地位是平等的。而在外连接中参与连接的表有主从之分。以主表的每行数据匹配从表的数据列,将符合连接条件的数据直接返回到结果集中;对那些不符合连接条件的列,将被填上空值后再返回到结果集中。
左外连接
语法:left outer join ... on ... outer可以省略。
概念:左外连接查询的结果集包括左表中的所有行,而不仅仅是连接匹配的行。若左表的某行在右表中没有匹配行,则在相关联的结果集中右表的所有选择列均为空值。
例一:将上面内连接的语句改成左外连接
SELECT e.id, e.`name`, d.`name` '部门' FROM department d LEFT JOIN employee e ON e.`department_id`=d.`id`
查询结果如下图

可以看出,没有员工的部门也被查询了出来,并且员工的id和姓名列被填上了空值。
例二:查询所有部门包含的员工数,没有员工的部门也要被查询出来。sql语句如下
SELECT d.`name`,COUNT(e.`id`) '部门人数' FROM department d LEFT JOIN employee e ON e.`department_id`=d.`id` GROUP BY e.`department_id`
结果如下

可以看出,没有员工的技术部也被查询了出来,统计人数为0(ps:这个0和之前自动填充的null值不冲突,因为这里使用了聚合函数count(),结果集先填充了null,再进行count统计的)。
右外连接
语法:right outer join ... on ... outer可以省略。
概念:右外连接和左外连接类似,只是位置变了一下。结果集必须包含右表中的所有行,若右表中有的项在左表中没有,则以null值填充。
例一:将上面左外连接的语句改成右外连接,sql语句如下
SELECT d.`name`,COUNT(e.`id`) '部门人数' FROM employee e RIGHT JOIN department d ON e.`department_id`=d.`id` GROUP BY e.`department_id`
结果如下

sql连接语句的更多相关文章
- 关于SQL连接语句中的Integrated Security=SSPI/ture/false
解决方法:即:Security Support Provider Interface设置Integrated Security为 True 的时候,连接语句前面的 UserID, PW 是不起作用的, ...
- Java连接MySQL数据库实现用户名密码的验证方法 Java语句中sql查询语句'' ""作用
//方法一,可以验证登录,但方法不实用.package com.swift; import java.sql.Connection; import java.sql.DriverManager; im ...
- 在动态sql的使用where时,if标签判断中,如果实体类中的某一个属性是String类型,那么就可以这样来判断连接语句:
在动态sql的使用where时,if标签判断中,如果实体类中的某一个属性是String类型,那么就可以这样来判断连接语句: 如果是String类型的字符串进行判空的时候: <if test=&q ...
- [转]MySQL 最基本的SQL语法/语句
MySQL 最基本的SQL语法/语句,使用mysql的朋友可以参考下. DDL-数据定义语言(Create,Alter,Drop,DECLARE) DML-数据操纵语言(Select,Delete ...
- SQL SELECT 语句
本章讲解 SELECT 和 SELECT * 语句. SQL SELECT 语句 SELECT 语句用于从表中选取数据. 结果被存储在一个结果表中(称为结果集). SQL SELECT 语法 SE ...
- 15个初学者必看的基础SQL查询语句
本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 本文将分享15个初学者必看的基础SQL查询语句,都很基础,但是你不一定都会,所以好好看看吧. 1.创建表和数据插 ...
- 测试常用SQL注入语句大全
转载自Cracer,标题:<渗透常用SQL注入语句大全>,链接http://www.xxxx.com/?p=2226 1.判断有无注入点 整形参数判断 1.直接加' 2.and 1=1 3 ...
- SQL SELECT语句
基本SQL SELECT语句 1. 下面的语句是否可以执行成功 select ename , job , sal as salary from emp; 2. 下面的语句 ...
- (转)经典SQL查询语句大全
(转)经典SQL查询语句大全 一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql s ...
随机推荐
- UWP 改变Button样式
-----some words------ 1.Control:控制 (我们理解成控件) 2.Template:模板 3.Ellipse 椭圆 4.Content 内容 5.Presenter 节目主 ...
- Android01-布局篇
在Android中,共有五种布局方式,分别是:LinearLayout(线性布局),FrameLayout(帧布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局) ...
- # C语言程序设计预备作业
一.针对老师和学生是怎样的关系的看法 ==首先我认同邹欣老师的看法,下面也是我自己的一点见解.== #### (1)师生在教育内容的教学上结成授受关系 .从教师与学生的社会角色规定意义上看,在知识上, ...
- SqlServer和Oracle中一些常用的sql语句4 局部/全局变量
--把wh1仓库号中姓名含有"平"字的职工工资在原来的基础上加288 update 职工备份 set 工资=工资+288 where 仓库号='wh1' and 姓名 like ' ...
- firewalld 操作实践
1.firewalld 从名称上看,模仿的是硬件防火墙的概念,zone. 所有的接口都必须属于某个zone . 在zone内配置规则. 2. 常用的方法是 增加对一个tcp或者udp端口号的允许通过 ...
- 【学习】文本框输入监听事件oninput
真实项目中遇到的,需求是:一个文本框,一个按钮,当文本框输入内容时,按钮可用,当删除内容时,按钮不可用. 刚开始用的focus和blur, $(".pay-text").focus ...
- Django实现简单分页功能
使用django的第三方模块django-pure-pagination 安装模块: pip install django-pure-pagination 将'pure_pagination'添加到s ...
- iOS 记录近期遇到的几个bug
1. actionSheet与pickerView 不兼容 发生环境:ios 9以上,其他无测试. actionSheet与pickerView在一起使用时,当actionSheet弹出后,紧接着再弹 ...
- 薪资那么高的Web前端,你该怎么学?
由于前端开发的火热和一些IT巨头公司 对 web前端开发人员的需求旺盛,让越来越多的人转入前端.前端开发领域 是IT技术语言领域唯一一个男女老少都可以快速入门并快速提升兴趣的领域,今天就来聊聊前端到底 ...
- ARM总线方面知识
AMBA简介 随着深亚微米工艺技术日益成熟,集成电路芯片的规模越来越大.数字IC从基于时序驱动的设计方法,发展到基于IP复用的设计方法,并在SOC设计中得到了广泛应用.在基于IP复用的SoC设计中,片 ...