MSSQL基础学习(1)

原创 2006年05月23日 17:16:00

表一

表二

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]%')

--假如数据中本身带有通配符,如:My_Name@163.com,则使用逃逸字符'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 阵营='蜀国')

 

相关文章推荐

MSSql Server基础学习系列———聚合函数

微软的Sql Server中默认集成了很多的聚合函数,使用这些聚合函数可以大大减轻我们的sql语句编写量。 -常用聚合函数 --在聚合函数中,为NULL的记录不参与计算,count(*)除外 --M...

MSSql Server基础学习系列———数据检索

我们对数据库的操作无外乎就是增删改查,今天就先从数据检索开始学习 1、查(select) --  一、简单查询 --查询全部 select *  from dbo.[User] --不推荐使用 如果真...

MSSql Server基础学习系列———索引

MSSql Server 对于那些未建立索引的表格数据的检索是从第一行开始,从上往下,一条一条的检索。如果我们程序中经常要用到查询操作,而且数据库中的数据量很庞大,毫无疑问,每次的数据查询都会比较浪费...

MSSql Server基础学习系列———数据约束

数据约束在数据库中广泛存在 目的:保证数据库的完整性 说白了就是保证数据库中的数据是正确的,但是也带了坏处,那就是性能的下降 --主键约束(PK) --主键值唯一,并且不能为空 --sql脚本语言...

MSSql Server基础学习系列———数据添加

上一篇文章讲解了如果进行数据库数据的检索,今天就接着讲如何进行数据库数据的添加 --不建议使用 --如果后期数据库的表结构发生改变,会因为没未改字段赋值而报错 --插入日期字段的时候 要把时间当成一...

MSSql Server基础学习系列———分组排序

--group by 分组 --分组后,select后只能显示分组依据和聚合函数 --如果一个sql语句中有group by和聚合函数,那么执行顺序是 --先分组,然后在每一组中执行聚合函数 sele...

MSSql Server基础学习系列———分页查询

一、引入 分页有高效和低效两种 高效:直接在数据库中进行分页结果的查询 低效:把查询出来的结果集放到本地,再对本地中的结果集进行排序 二、分页方法 分页有两种做法: (1)可以在所有版本的数据库 ...

MSSQL数据库学习资料1

  • 2012年04月12日 17:25
  • 22KB
  • 下载

MSSql Server基础学习系列———基础讲解

最近打算从头再仔细学习一下微软的Sql Server数据库,根据学习进度在博客上同步学习笔记,中间的有些内容可能只是一点而过,具体内容随着学习的深入会继续完善,欢迎大家一起学习并指导。 MSSql ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MSSQL基础学习(1)
举报原因:
原因补充:

(最多只允许输入30个字)