多表查询

/*基本连接*/
select a.Name,b.Name
from T_Employee a,T_Department b
where a.DepartmentId=b.Id /*内连接,消除没有匹配连接条件的项*/
select a.Name,b.Name
from T_Employee a inner join T_Department b
on a.DepartmentId=b.Id select a.Name,b.Name
from T_Employee a inner join T_Department b
on a.DepartmentId=b.Id and b.IsDelete=1 select a.Name,b.Name
from T_Employee a inner join T_Department b
on a.DepartmentId=b.Id
where b.IsDelete=1 select a.Name,b.Name
from T_Employee a join T_Department b--inner可以省略
on a.DepartmentId=b.Id
where b.IsDelete=1 /*左外连接,保留没有匹配连接条件的左边表的项*/
select a.Name,b.Name
from T_Employee a left outer join T_Department b--outer可以省略
on a.DepartmentId=b.Id select a.Name,b.Name
from T_Employee a left outer join T_Department b--outer可以省略
on a.DepartmentId=b.Id and b.IsDelete=1--满足此连接条件的才显示b表内容,保留左边表的没有匹配连接条件的项 select a.Name,b.Name
from T_Employee a left outer join T_Department b--outer可以省略
on a.DepartmentId=b.Id
where b.IsDelete=1--相当于先执行前三行,再用where语句进行筛选 /*右外连接,保留没有匹配连接条件的右边表的项*/
select a.Name,b.Name
from T_Employee a right outer join T_Department b--outer可以省略
on a.DepartmentId=b.Id select a.Name,b.Name
from T_Employee a right outer join T_Department b--outer可以省略
on a.DepartmentId=b.Id and b.IsDelete=1--满足此连接条件的才显示a表内容,保留右边表的没有匹配连接条件的项 select a.Name,b.Name
from T_Employee a right outer join T_Department b--outer可以省略
on a.DepartmentId=b.Id
where b.IsDelete=1--相当于先执行前三行,再用where语句进行筛选 /*全连接,先列出左边表的所有项,保留没有匹配连接条件的左右两边表的项*/
select a.Name,b.Name
from T_Employee a full outer join T_Department b--outer可以省略
on a.DepartmentId=b.Id select a.Name,b.Name
from T_Employee a full outer join T_Department b--outer可以省略
on a.DepartmentId=b.Id and b.IsDelete=1--先列出左边表的所有项,保留没有匹配连接条件的左右两边表的项 select a.Name,b.Name
from T_Employee a full outer join T_Department b--outer可以省略
on a.DepartmentId=b.Id
where b.IsDelete=1--相当于先执行前三行,再用where语句进行筛选 /*交叉连接,select的b表的字段分别来匹配所有的select的a表字段*/
select a.Name,b.Name
from T_Employee a cross join T_Department b select a.Name,b.Name
from T_Employee a cross join T_Department b
where b.IsDelete=1--相当于先执行前两行,再用where语句进行筛选 /*自连接,在同一个表上进行连接*/
select a.Name,a.IsDelete, b.Name
from T_Department a,T_Department b
where a.IsDelete=b.IsDelete select a.Name,a.IsDelete, b.Name
from T_Department a,T_Department b
where a.IsDelete=b.IsDelete and a.Id<>b.Id and a.Name='广东省'
/*联合查询,将两个查询的结果连接起来,所以select的个数必须相同,类型必须可转换为相同的,可以空起来占位
,union all表示显示所有的列,尽管出现重复,union 表示只显示不重复的信息
*/
select a.Name ,a.BaseSalary,b.Name
from T_Employee a,T_Department b
where a.DepartmentId=b.Id and a.GenderId='403A0BD5-A304-4981-9535-ADA7AF2BFB51'
union
select '',SUM(a.BaseSalary),''
from T_Employee a,T_Department b
where a.DepartmentId=b.Id and a.GenderId='403A0BD5-A304-4981-9535-ADA7AF2BFB51'
union
select '',AVG(a.BaseSalary),''
from T_Employee a,T_Department b
where a.DepartmentId=b.Id and a.GenderId='403A0BD5-A304-4981-9535-ADA7AF2BFB51'
order by BaseSalary /*子查询*/
select a.Name ,a.BaseSalary,b.Name
from T_Employee a,T_Department b
where a.DepartmentId=b.Id
and a.GenderId='403A0BD5-A304-4981-9535-ADA7AF2BFB51'
and a.BaseSalary< (select AVG(a.BaseSalary)+1
from T_Employee a,T_Department b
where a.DepartmentId=b.Id
and a.GenderId='403A0BD5-A304-4981-9535-ADA7AF2BFB51'
) /*子查询嵌套*/
select a.Name ,a.BaseSalary,b.Name
from T_Employee a,T_Department b
where a.DepartmentId=b.Id
and a.GenderId='403A0BD5-A304-4981-9535-ADA7AF2BFB51'
and a.name in (select Name
from T_Employee a,T_SalarySheet b
where a.DepartmentId=b.DepartmentId
and b.Year=(select Year from T_SalarySheet where Id='E0AD51DE-C6A2-4BBE-BF85-D978EAEF9BE9'
)
) /*exists 如果exists有结果,就开始查询主select*/
select a.Name ,a.BaseSalary,b.Name
from T_Employee a,T_Department b
where exists(select * from T_Employee where Name='个') declare @address varchar(20)
declare @pwd varchar(10)
set @address='他告诉'
set @pwd='个'
if exists(select * from T_Employee a where a.Address =@address and a.name =@pwd )
print '登录成功'
else
print '登录失败' /*交查询,得到相交的部分*/
select a.Name ,a.BaseSalary
from T_Employee a
intersect
select a.Name ,a.BaseSalary from T_Employee a where Name='个' /*差查询,在第一个select中去除这两个相交的部分*/
select a.Name ,a.BaseSalary
from T_Employee a
except
select a.Name ,a.BaseSalary from T_Employee a where Name='个'

select的使用(二)的更多相关文章

  1. MySQL(九)之数据表的查询详解(SELECT语法)二

    上一篇讲了比较简单的单表查询以及MySQL的组函数,这一篇给大家分享一点比较难得知识了,关于多表查询,子查询,左连接,外连接等等.希望大家能都得到帮助! 在开始之前因为要多表查询,所以搭建好环境: 1 ...

  2. freemarker写select组件(二十二)

    一,讲解一 1.宏定义 <#macro select id datas> <select id="${id}" name="${id}"> ...

  3. select模型(二 改进服务端)

    一. int select(int fds,fd_set *readfds,fd_set * writefds,fd_set * exceptfds,struct timeval * timeout) ...

  4. freemarker写select组件(二)

    freemarker写select组件 1.宏定义 <#macro select id datas value=""> <select id="${id ...

  5. MySql:SELECT 语句(二)排序 ORDER BY 的使用

    1.按单列排序 语句: SELECT col FROM  tablename ORDER  BY  col; ( 一般情况下, ORDER BY 子句中使用的列为选择的列,但也可以使用其他列) 2.按 ...

  6. select()函数用法二

    Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如 connect.accept.recv或recvfrom这样的阻塞程序 ...

  7. MySQL SELECT语法(二)SELECT...INTO语法

    源自MySQL 5.7 官方手册 SELECT...INTO Syntax 一.SELECT...INTO介绍 SELECT...INTO用来将查询结果存储在变量或者写入文件中. SELECT ... ...

  8. [转]ThinkPHP中实例化对象M()和D()的区别,select和find的区别

    1.ThinkPHP中实例化对象M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会 ...

  9. SQL入门语句之SELECT和WHERE

    一.SQL入门语句之SELECT SELECT语句用于从数据库表中获取数据,结果表的形式返回数据.这些结果表也被称为结果集 1.从数据库表中取部分字段 select 字段A,字段B from tabl ...

  10. ThinkPHP中实例化对象M()和D()的区别,select和find的区别

    原文:ThinkPHP中实例化对象M()和D()的区别,select和find的区别 1.ThinkPHP中实例化对象M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在 ...

随机推荐

  1. 如果 @s int 把它转成字符,可以这样 cast(@s as varchar)

    如果 @s int 把它转成字符,可以这样 cast(@s as varchar)

  2. ASP.NET MVC 第三回 Controller与View

    这节我们让ASP.NET MVC真正的跑起来 一.新建Controller 首先我们自己新建一个新的Controller在Controllers上点右键,添加,Controller选项   之后出现一 ...

  3. Linux命令行编辑快捷键

    Linux命令行编辑快捷键: history 显示命令历史列表 ↑(Ctrl+p) 显示上一条命令 ↓(Ctrl+n) 显示下一条命令 !num 执行命令历史列表的第num条命令 !! 执行上一条命令 ...

  4. 关于ajaxfileupload.js一些问题和上传图片就立即显示图片功能

    ajaxfileupload.js是上传文件的一个插件,最近碰到的一个问题是在谷歌浏览器上传文件之后,原文本框中的文件名称消失,网上搜了好长时间也没有十分满意的答案.无刷新上传文件我想到的只有ajax ...

  5. angularjs 将带标签的内容解析后返回

    参考地址:http://okashii.lofter.com/post/1cba87e8_29e0fab 引入angular-sanitize.js文件 注入ngSanitize 页面数据绑定 ng- ...

  6. sqlserver触发器如何将一个库中的数据插入到另外一个库中

    需求:实现的功能就是,查询当前表的所有信息,插入到另外一个库中(同一台机器,同一个SqlServer) 解决:insert into dB2.dbo.TB2 select * from db1.dbo ...

  7. 分享最近写的一个存储过程 SOLVE_LOCK

    CREATE OR REPLACE PROCEDURE SOLVE_LOCK AS V_SQL VARCHAR2(3000); --定义 v_sql 接受抓取锁的sql语句V_SQL02 VARCHA ...

  8. Session技术详解

    1.session简介 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务器程 ...

  9. 十一、C# 泛型

    为了促进代码重用,尤其是算法的重用,C#支持一个名为泛型的特性. 泛型与模块类相似. 泛型使算法和模式只需要实现一交.而不必为每个类型都实现一次.在实例化的时候,传入相应的数据类型便可. 注:可空值类 ...

  10. HTML5画布