左,右,内连接 统计记录数 子查询 聚合函数 查询产品分类
2015-08-15 14:41
393 查看
--1)内连接,必须保证的是内连接的数据一定相等的才会查询出来。 select 用户表.用户ID, 用户表.用户名称, 角色表.角色名称 from 用户表 inner join 角色表 on 用户表.角色ID = 角色表.角色ID --2)左连接 -- 作用:保证左边表的数据全部出现,而关联的这个表的数据满足相等的条件下才会显示。 -- left join select 用户表.用户ID, 用户表.用户名称, isnull(角色表.角色名称,'无分类') as 分类名称 from 用户表 left join 角色表 on 用户表.角色ID = 角色表.角色ID --补充;如果某个字段查询出的结果为null值,那么可以把null值替换一个默认值。 --isnull(字段,默认值) --3)右连接 --作用:保证连接的右边的表的数据全部出现,而关联的表的数据只有满足相等的条件才会显示。 select 用户表.用户ID, 用户表.用户名称, isnull(角色表.角色名称,'无分类') as 分类名称 from 用户表 right join 角色表 on 用户表.角色ID = 角色表.角色ID --补充:convert转换函数, --语法:convert(转换的类型,转换的字段) --4)统计记录数,count函数统计,count(可以是某个具体的字段,也可以是*) --1.首先第一步,查询出在挂号信息表里查询某个科室下的挂号人数 T_.....是代表表名 Select count(*) as 挂号人数 From T_Registration tr inner join T_Department td On tr.DepartmentId = td.DepartmentId Where td.DepartmentName='外科' --)清空数据,不写日志操作记录 truncate table 表名(t_sublist) truncate table 表名(t_recipe) --5)把两个查询的结果作为临时表存放,然后通过这两个临时表去计算 declare @begintime datetime--开始执行的时间 @endtime datetime, --执行结束时间 select @begintime =GETDATE() Select t1.dname as 科室, (t1.挂号人数-t2.看病人数) as 等待人数 From (Select td.DepartmentName as dname, count(*) as 挂号人数 From T_Registration tr inner join T_Department td On tr.DepartmentId = td.DepartmentId group by td.DepartmentName) as t1, (Select tp.DepartmentName as dname, count(*) as 看病人数 From T_Recipe tc inner join T_Doctor td On tc.DoctorId = td.DoctorId inner join T_Department tp On td.DepartmentId = tp.DepartmentId group by tp.DepartmentName) as t2 Where t1.dname = t2.dname and t1.dname='外科' print '消耗时间:'+convert(varchar(20),datediff(millisecond ,@begintime, GETDATE())) -- 打印输出时间 --用子查询来获取等待人数-- Select m.DepartmentName,count(distinct t.RegistrationId) as 等待人数 From T_Registration t inner join T_Department m on t.DepartmentId = m.DepartmentId Where t.RegistrationId not in (Select r.RegistrationId From T_Recipe r inner join T_Doctor c on r.DoctorId = c.DoctorId inner join T_Department d on c.DepartmentId = d.DepartmentId Where d.DepartmentName='外科' ) and m.DepartmentName = '外科' Group By m.DepartmentName --6)聚合函数,首先分组 select from 表名 where 判断条件 group by 分组条件(按照什么分组) --分组条件一定要出现在查询的显示列中-- select 分类表.分类名称, count(*) from 产品表 left join 分类表 on 产品表.分类ID = 分类表.分类ID group by 产品表.分类名称 --重点:1)如果有分组条件,那么分组条件必须在显示列中,也就是在select后面 2)如果有聚合函数(比如count,avg,sum等), 且聚合函数前有显示列,那么该显示列必须出现在分组条件中。 use Test go --要求要查询出产品分类为水果和服饰 Select 分类ID From 分类表 Where 分类表.分类名称 = '水果' or 分类表.分类名称='服饰' Select 分类ID From 分类表 Where 分类表.分类名称 in('水果','服饰') --用in表示. Select * From 产品表 Where 分类ID in (Select 分类ID From 分类表 Where 分类表.分类名称 = '水果' or 分类表.分类名称='服饰') --用exists关键字 Select * From 产品表 Where exists (Select * From 分类表 Where 分类表.分类ID=产品表.分类ID and 分类表.分类名称 in('水果','服饰')) --查询出产品不为水果和服饰 Select * From 产品表 Where not exists (Select * From 分类表 Where 分类表.分类ID=产品表.分类ID and 分类表.分类名称 in('水果','服饰'))
相关文章推荐
- Cvs Svn Git Maven
- 百度编辑工具单独上传图片、视频
- 杭州电子科技大学acm--2003
- viewDidUnload方法介绍
- response.setHeader()的用法
- 自定义布局之流式布局
- 【Jboss】热部署
- zookeeper集群的配置
- 消息中间件原理及JMS简介之一
- cocos2dx新项目的创建
- response.setContentType()的作用及参数
- 机器学习scikit-learn(一)
- Poj 1061 青蛙的约会
- HDU 5294(Tricks Device-最短路最小割)[Template:SPFA]
- LeetCode Number of 1 Bits 刷题 OJ
- Eclipse 安装插件 几乎就这么几个步骤,包括svn安装
- 将JTable加入到JScrollPane后,无法向JScrollPane中添加其他的组件的解决方案
- mvn基础之常用的构建命令以及自动创建目录骨架
- LA 5902 Movie collection (树状数组)
- 关于json解析、读取数据