MSSQL基础学习--查询

人物表:

能力表:

1.Select

select all 性别 from people   --将返回27个值,虽然内容都是"男"和"女"

select distinct 性别 from people   --只会显示两个值"男"和"女"

select top 5 性别 from people   --只显示前5条检索到的信息

select top 30 percent 性别 from people   --显示前30%检索到的信息

2.Into

--将people表中的姓名列检索出,并放在tempTable里,如果不存在tempTable表,则新建

select 姓名 into tempTable from people  

3.From

--我们要看看不同的统率力下的带兵数量,而统率和士兵并不在同一个表中

select PersonPower.统率,people.士兵
from PersonPower join People
on People.姓名 = PersonPower.武将

4.Where

select 武将 from PersonPower where 武力!>90  --查询武力不大于90的武将

--查询条件为智力不在70--100之间
select 武将,智力 from PersonPower where 智力 not between 70 and 100

--查询条件是否为空值
select * from People where 姓名 is not null

--查询是否为枚举中的值
select 姓名 from People where 姓名 not in(‘曹操‘,‘刘备‘,‘孙权‘)

--查询姓氏为"黄"的两个字名字,这里结果为‘黄忠‘和‘黄盖‘
select 姓名 from People where 姓名 like(‘黄_‘)

--查询姓氏为"黄"的所有名字,这里结果为‘黄忠‘、‘黄盖‘、‘黄月瑛‘
select 姓名 from People where 姓名 like(‘黄%‘)

--查询以H-Z字母开头的记录,这里以pubs数据库为例,结果为Thomas
select lname from Employee where lname like(‘[H-Z]homas‘)

--查询不以字母T开头的记录
select lname from Employee where lname like(‘[^T]%‘)

--假如数据中本身带有通配符,如:[email protected],则使用逃逸字符‘Escape‘来说明
select eMail from Mail where eMail like (‘My#_Name%‘) escape ‘#‘

5.Group by

--统计各个阵营的带兵总数

select 阵营,性别,sum(士兵) as 士兵总数 from People group by 性别,阵营

阵营

性别

士兵总数

蜀国


376570

蜀国


9980

魏国


312650

魏国


4550

吴国


353500

吴国


17540 
--Cube的用法,显示所有的组合

select 阵营,性别,sum(士兵) as 士兵总数 from People group by 阵营,性别 with cube

阵营

性别

士兵总数

蜀国


376570

蜀国


9980

蜀国

NULL

386550

魏国


312650

魏国


4550

魏国

NULL

317200

吴国


353500

吴国


17540

吴国

NULL

371040

NULL

NULL

1074790

NULL


1042720

NULL


32070
--Rollup的用法,只匹配Group by第一分组条件

select 阵营,性别,sum(士兵) as 士兵总数 from People group by 阵营,性别 with rollup

阵营

性别

士兵总数

蜀国


376570

蜀国


9980

蜀国

NULL

386550

魏国


312650

魏国


4550

魏国

NULL

317200

吴国


353500

吴国


17540

吴国

NULL

371040

NULL

NULL

1074790

6.Having

--Having子句作用于组,而Where子句作用于表和视图,Having主要用来对计算的结果进一步筛选

--这个将最后结果筛选掉了只有一个女将的魏国
select 性别,count(*) from People where 性别=‘女‘ group by 性别 having count(*)>1 

7.Compute 与 Compute by

--Compute将在最后添加一行表示计算结果的数据,而Compute by与Group by功能类似,也是用于计算,但Compute by能产生多个结果集

select 姓名,士兵 from People Compute sum(士兵) --最后有一行sum为1074790

--按阵营分成三组结果集,然后每组结果集最后都有一行总和值
select 姓名,士兵,阵营 from People Order by 阵营 Compute sum(士兵) by 阵营

8.Union

--Union用于联合多个查询结果集,且默认为删除重复记录,如要显示全部,加上all

--假设我们要得到多个表的所有姓名

select 姓名 from People

union   --这里如果加上all的话,将显示出相同记录

select 武将 from PersonPower

9.Join On

--Join用于连接两个不同的表,On用于给出这两个表之间的连接条件

insert into People values(28,‘胡晓伟‘,‘男‘,‘中国‘,88888)  --People中插入一条新记录

--内联接:默认联接形式,返回两个表中所有匹配的行
select * from People Join PersonPower On People.姓名 = PersonPower.武将

--左向外联接:匹配join左边的表,如果在右边并没有相应记录,则置为NULL
--这个例子里,‘胡晓伟‘将被显示,personPower里的记录为NULL
select * from People left Join PersonPower On People.姓名 = PersonPower.武将

--右向外联接:同上,匹配join右边的表
select * from PersonPower right Join People On People.姓名 = PersonPower.武将

--完整外联接:同时匹配两个表
select * from People full Join PersonPower On People.姓名 = PersonPower.武将

--交叉连接:返回两个表中记录的笛卡儿乘积,这里On关键字不能用
select * from People cross Join PersonPower

10.嵌套查询

--单值比较

select 武将 from PersonPower
where 武将 = (select 姓名 from People where 姓名=‘曹操‘)

--In

--查询魏国武将的属性值
select * from PersonPower
where 武将 in (select 姓名 from People where 阵营=‘魏国‘)

--All

--查询统率力最小的武将
select 武将,统率 from PersonPower
where 统率 <= all(select 统率 from PersonPower)

--Some(任意一个值)

--查询统率力不是最小的武将(最小的那个记录不满足>关系,其它的至少能比一个值大)
select 武将,统率 from PersonPower
where 统率 > some(select 统率 from PersonPower)

--Exists(表之间的关系,不必对应到具体列,这是和In的最大区别)

--查询蜀国武将的姓名及武力
select 武将,武力 from PersonPower
where exists(select * from people where PersonPower.武将=People.姓名 and 阵营=‘蜀国‘)

--Not Exists

--查询非蜀国武将的姓名及武力
select 武将,武力 from PersonPower
where not exists(select * from people where PersonPower.武将=People.姓名 and 阵营=‘蜀国‘)
时间: 2024-10-12 19:34:29

MSSQL基础学习--查询的相关文章

MSSQL基础学习--数据库操作

1.创建单一数据库 CREATE DATABASE test ON ( NAME = main_dat, --数据库名称 FILENAME = 'e:/program files/Microsoft sql server/mssql/data/maindat.mdf', --物理路径 SIZE = 10, --初始容量,默认单位是MB MAXSIZE = 50, --最大容量 FILEGROWTH = 5 --增长值 ) LOG ON ( NAME = 'main_log', FILENAME

MySQL基础学习之数据查询

一般查询 SELECT * FROM 表名 SELECT 属性名  FROM  表名 条件查询 SELECT 属性名 FROM 表名  WHERE 条件表达式 查询数据值1,数据值2的表单 SELECT *  FROM  表名  WHERE  属性名 [NOT] IN(数据值1,数据值2....) 查询数值1,数据2的表单 SELECT *  FROM  表名  WHERE  属性=值  AND 属性1=值1 查询数值1到数值2之间的表单 SELECT *  FROM  表名  WHERE  属

零基础学习 Hadoop 如何下手

想学习hadoop,可是苦于自己没有任何的基础,不知道该如何下手,也不知道自己能不能学会.其实零基础学习hadoop,没有想象的那么困难.曾经我也是一位小白,刚接触到云计算,想过培训,但是培训机构的选择也让我很纠结,就自己开始去摸索学习,现在我把自己的学习思路整理一下,希望对大家有帮助. 首先整体说一下学习过程给大家借鉴: 一.了解hadoop: 这里不具体阐述概念,有兴趣的同学可以自己上网去查.我们知道hadoop,有单机安装,伪分布安装和分布安装.同时hadoop的环境是Linux,所以我们

ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习

首页 头条 文章 频道                         设计频道 Web前端 Python开发 Java技术 Android应用 iOS应用 资源 小组 相亲 频道 首页 头条 文章 小组 相亲 资源 设计 前端 Python Java 安卓 iOS 登录 注册 首页 最新文章 经典回顾 开发 Web前端 Python Android iOS Java C/C++ PHP .NET Ruby Go 设计 UI设计 网页设计 交互设计 用户体验 设计教程 设计职场 极客 IT技术

网络基础知识查询

第一章.基础网络概念 1.1 网络是个什么玩意儿 全世界的人种有很多,人类使用的语言种类也多的很.那如果你想要跟外国人沟通时,除了比手划脚之外,你要如何跟对方讲话? 大概只有两种方式啰,一种是强迫他学中文,一种则是我们学他的语言,这样才能沟通啊.在目前世界上的强势语言还是属于英语系国家, 所以啰,不管是啥人种,只要学好英文,那么大家都讲英文,彼此就能够沟通了.希望不久的未来,咱们的中文能够成为强势语言啊! 这个观念延伸到网络上面也是行的通的,全世界的操作系统多的很,不是只有 Windows/Li

ASP.Net MVC开发基础学习笔记:三、Razor视图引擎、控制器与路由机制学习

一.天降神器“剃须刀” — Razor视图引擎 1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留下来的ASPX引擎或者第三方的NVelocity模板引擎. Razor在减少代码冗余.增强代码可读性和Visual Studio智能感知方面,都有着突出的优势.Razor一经推出就深受广大ASP.Net开发者的喜爱. 1.2 Razor的语法 (1)Razor文件类型:Razor支持两种文件类型,分

【Linux】鸟哥的Linux私房菜基础学习篇整理(一)

最近,一直在写PPC的模拟器和汇编器,也在做设计.所以重新看了看<鸟哥的Linux私房菜>,还是有好多命令不太熟悉.就打算写几篇blog记下来. 1. nl [-bnw] filename:添加行号打印参数:-b:指定行号指定的方式,主要有两种: -b a:表示不论是否为空行,也同样列出行号(类似cat -n): -b t:如果有空行,空的那一行不要列出行号(默认值).-n:列出行号表示的方法,主要有三种: -n ln:行号在屏幕的最左方显示: -n rn:行号在自己字段的最右方显示,且不加0

五本书籍助你从零基础学习java编程到精通之路

前天的文章给大家介绍了Java初学者应该学习哪些基础,亦是美网络小编从Java的三个大方向:J2SE.J2EE.J2ME对大家做了前景分析,这两天也收到了大家的很多反馈,很多小伙伴看了后对自己的Java编程方向有了比较明确的目标,也有小伙伴们说,要是能提供一些Java初学者应看的书籍就更好了,其实推荐Java书籍已经被规划在小编写的Java编程系列文章之中,常言道:书中自有黄金屋,书中自有颜如玉,下面亦是美网络小编给大家推荐的Java书籍中虽然没有黄金屋和颜如玉,但却能让Java编程的初学者快速

MVC+Ext.net零基础学习记录(五)

继MVC+Ext.net零基础学习记录(四),在后面我在既有的项目上又添加了一个子项目,还用前面提到的方法,进行主项目中引用DLL,然后子项目中生成事件中使用mkdir 进行拷贝 发现一个下午就总是报错 错误 1 命令“mkdir "...\Areas\HPSS\Views" xcopy "...?\Views" "E:\Work\01 TPMSRC\MVCWEBTPM\WEBTPM\Areas\HPSS\Views" /S /E /C /Y 已