问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

跪求!!!sql server基础知识大全

发布网友 发布时间:2022-04-07 17:28

我来回答

4个回答

懂视网 时间:2022-04-07 21:49

1 declare @i int;
2 set @i=0;
3 while @i<400
4 begin
5 set @i=@i+1;
6 insert into nums(n) values(@i);
7 end
技术分享

可以看到表里面插入和1到400有序的数字:

技术分享

接着我们就可以构造连续日期了,日期的相加前面已经学习过dateadd(),如果想一起学习一下,可以看一下前面的笔记:

sqlserver学习笔记1:http://www.cnblogs.com/liupeng61624/p/4354983.html

sqlserver学习笔记2:http://www.cnblogs.com/liupeng61624/p/4367580.html

sqlserver学习笔记3:http://www.cnblogs.com/liupeng61624/p/4375135.html

sqlserver学习笔记4:http://www.cnblogs.com/liupeng61624/p/4388959.html

继续说日期的相加,在这里我们通过日期相加,就可以构造2008年的每一天:

1 select dateadd(day,n,‘20071231‘)
2 from nums;

构造的日期结果如图:

技术分享

日期构造完以后,那么我们就可以利用这个结果集跟订单表Sales.orders进行一个连接。

1 select dateadd(day,f.n,‘20071231‘),count(orderid) as N‘每日订单数量‘
2 from nums f left join sales.orders m on
3 dateadd(day,f.n,‘20071231‘)= m.orderdate
4 group by dateadd(day,f.n,‘20071231‘)
5 order by dateadd(day,f.n,‘20071231‘)

结果如图所示:

技术分享

(2)子查询,即查询结果可以作为一个查询条件。

例如:我们要查询雇员表(Hr.employees)里面年龄最小的雇员信息。sql语句可以这样写:

1 select max(birthdate) as N‘生日‘
2 from hr.employees

技术分享

在这里我们知道可以用聚合函数max进行查询,但是加入我们还要查询出年龄最小的名字,即lastname,sql语句如下,可以发现报错,因为max聚合函数,是对一组结果进行处理,而lastname并不包含在聚合函数中,故报错。

技术分享

那么在这里我们就要用到子查询来处理,可以讲年龄最小的结果作为查询结果来进一步查询。

技术分享
1 select birthdate,lastname
2 from hr.employees
3 where birthdate=
4 (
5 select max(birthdate) 
6 from hr.employees
7 )
技术分享

查询结果如图所示:

技术分享

继续子查询,加入我们要将下订单最贵的那个客户找出来,给颁发一个Svip级别荣誉,并且找出他所在的国家已经他个人的一些基本信息。

根据上面子查询,我们可以这样写我们的sql,首在这里视图Sales.OrderValues里面存储的是订单的一些价格信息。故我们对这张视图进行操作。

  1. 首先找出订单最贵的信息 
1 
2 select max(val) as N‘最贵订单‘
3 from Sales.OrderValues

     2.   然后找出最贵订单的顾客ID是多少

1 select custid from Sales.OrderValues
2 where val=(
3 select max(val) as N‘最贵订单‘
4 from Sales.OrderValues
5 )

      3.   接着我们就可以在顾客表里面找出ID等于查询来的这个ID,同时查找出所在国家。

技术分享
 1 select custid,contactname,country
 2 from sales.customers where custid=
 3 (
 4  select custid from Sales.OrderValues
 5  where val=
 6  (
 7  select max(val) as N‘最贵订单‘
 8  from Sales.OrderValues
 9  )
10 )
技术分享

结果如图所示:

技术分享

三.相关子查询,即查询的嵌套另一个查询,其中有涉及到相互关联的条件。

例如:我们要查询每个顾客下的订单数量,前面我们已经学习过,有两种方法都可以实现:

1.用group......by分组

1 select custid, count(*) as N‘订单数量‘ from sales.orders
2 group by custid order by custid

技术分享

2.利用count.....over

1 select distinct custid,count(*) over (partition by custid) as N‘订单数量‘
2 from sales.orders

技术分享

 第三种方式我们就用相关子查询来解决,可以这样理解:就是我们没查一位顾客的订单数量就是去订单表里面顾客Id相同的都取出来,然后利用聚合函数求和。顾客ID我们可以从顾客表里面取出来,然后这个ID就等于订单表里面的ID。所以根据分析我们写sql如下:

技术分享
1 select n.custid,n.contactname,
2 (
3 select count(*) 
4 from sales.orders m 
5 where m.custid=n.custid
6 ) as N‘订单数量‘
7 from sales.customers n
技术分享

其结果如图所示:

技术分享

这样也可以把顾客下的订单数量算出来,这里就是利用到了外层查询跟内层查询条件作为比对求和。也就是我们说的相关子查询。

四.多值子查询

例如:我们要查询存在顾客但却没有供应商的国家,即这个国家中有顾客,没有供应商公司。

一般情况下:我们会采用常用的sql写法:

1 
2 select distinct m.country from sales.customers m
3 where m.country not in
4 (
5 select n.country from production.suppliers n
6 )

结果如图所示:

技术分享

既然有了not.....in写法,当然存在exists的写法,同样可以实现要求,exists对于结果集若存在则返回true,不存在返回false。我们可以这样理解:外层查询将country传递到内层查询,看看存不存在其中,其中内存查询包含多个结果,所以就叫做多值子查询。所以sql语句可以这样写:

1 select distinct m.country from sales.customers m
2 where not exists 
3 (
4 select n.country from production.suppliers n
5 where n.country= m.country 
6 )

结果如图所示:

技术分享

可以看到其结果跟not.....in查出来的结果一样,满足条件。

五.复杂子查询

(1)例如:假如我们要查询所有订单当前订单的前一个订单和后一个订单信息,这里我们先分析:

1.首先我们先可以查询出所有的订单。

1 select distinct custid
2 from sales.orders

2.然后查询比当前订单Id小于的订单,同时这个订单是小于当前订单中最大的那个订单(即紧挨着的订单)。

技术分享
1 select distinct 
2 (
3 select max(custid) from 
4 sales.orders m where m.custid< n.custid
5 ) as N‘前一个订单‘,n.custid as N‘当前订单‘
6 
7 from sales.orders n
技术分享

3.同理,可以查出大于当前订单的那个紧挨着的那个订单。

技术分享
 1 select distinct 
 2 (
 3 select max(custid) from 
 4 sales.orders m where m.custid< n.custid
 5 ) as N‘前一个订单‘,n.custid as N‘当前订单‘,
 6 (
 7 select min(custid) from 
 8 sales.orders p where p.custid> n.custid
 9 ) as N‘后一个订单‘
10 from sales.orders n
技术分享

其结果如图所示:

技术分享

 

(2)累计聚合

累计聚合在财务统计中,经常用到,比如2007年卖出多少,2008年卖出多少,那么2008年累计卖出就是2007年加上2008年卖出的总和,即累计聚合。

在这里我们有视图Sales.OrderTotalsByYear,其中统计的是每一年的订单总量。

1 select * from Sales.OrderTotalsByYear

技术分享

我们可以看到2007年有25489张订单,2008年有16247张订单,2006年有9581张订单。加入我们要求每年累计卖了多少订单,就要用到累计聚合。

技术分享
1 select n.orderyear,
2 (
3 select sum(qty)
4 from Sales.OrderTotalsByYear m
5 where m.orderyear<=n.orderyear
6 ) as N‘累计订单数量‘
7 from Sales.OrderTotalsByYear n
8 order by n.orderyear;
技术分享

结果如图所示:

技术分享

 

SQLServer学习笔记<>相关子查询及复杂查询

标签:

热心网友 时间:2022-04-07 18:57

创建数据库
if exists(select * from sysdatabases where name ='')
drop database ??
create database ''
[primary]
(
name='', filename='',size=?,filegrowth=?

)
log on
(
name='',filename=''.size=?,filegrowth=?,maxsize=?

)

创建表
create table ''
(
列名 类型 是否为空 自增长 键

)

添加约束
alter 表
add constraint df_, fk_,ck_.....
(foreign key() references list(cloumn))
增删改查
insert into ...
delete table ...
update list xx=xx where xx=xx...
select ...from..

查: 子查询 联表查询 (内联接,外联接,交叉联接)
in , not in , inner jion on , left outer jion on ,right outer jion on

存储过程

create proc proc_stu
@id int
as
select * from stuinfo where stuid=@id

热心网友 时间:2022-04-07 20:15

基础知识大全的话,你安装sqlserver之后打开查询分析器,然后查看帮助中的transact—SQL帮助文档,这个里面的最全,然后还有实例供学习参考。

热心网友 时间:2022-04-07 21:50

select
update
insert
delete
查看联机帮助一个个慢慢学.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
cad里面打完字怎么还原十字架 财务建帐需要什么 建账建账的基本要求 当爱情与亲情需要丢弃一样时,你会选择丢弃哪一方 当爱情和亲情有冲突时你会怎样决择?你会为你所爱的人不顾一切吗? 剑网三 查看余额 因为某些特殊原因不好登陆游戏查看,求其他方式_百度知 ... 右肺上叶中叶结节灶怎么回事 节能门窗有哪些标准 节能门窗有哪些 节能门窗具有哪些特征 57角等于几元几角 EXCEL表格2007的显示不了内容了? 龟头上出现小红点不痛不痒 龟头上出现红色点点不痛不痒? tasker if 配置怎么做 怎样用tasker设置语音报时 三星手机tasker设置热点自启 tasker如何根据声音启动程序 有什么办法可以判断在我离开的时候我的房间是否有人进来过? 想找一款类似于tasker的app软件,好像叫什么机器人,图标的名字是全字母的 小米手机用Tasker的问题 请问tasker的媒体按钮指的是那个键 tasker配置文件是什么 求大神教如何实现tasker调用桌面小工具的方 tasker能实现这个任务么 乐视低音炮没有声音连接不上只是灯一直闪烁 乐视电视的无线低音炮怎么跟手机或电脑连接 乐视x50低音炮在什么地方啊,是配在了电视机里面还是在外面啊 乐视无线低音炮配对成功无声音 超级智能音乐电视低音炮电视怎么设置 4元57角是多少怎么算到底是多少钱 EXCEL2007 有时不显示内容 5.7元等于什么元什么角什么角 EXCEL2007,表格内容不显示,需要选定后在编辑栏查看 电脑文档打不开了 59角。等于,几元几角? 2007版本excel文件打开后不显示内容,打印预览时可以显示内容怎么回事 58角等于几元几角 57角`等于多少亓 三角五十四角等于多少元多少角 5元7角等于几角 - 信息提示 excel2007工作表有时不显示数字 excel2007和2010表格里文字总是无法显示完全(不是自动换行的问题),这是怎么回事?一复制 57.24元=几元几角几分? 的简易鸡爪怎么做好吃 57元一50角=多少角? 72.50等于几元几角? 5.70元=多少角? 知道手机安全管家QQ号和密码该如何发信息定位手机