数据库查询汇总

本文中使用的 数据库为 MS SQL自带的Northwind数据库

语句参考了几本书

写出来是为了防止自己忘记

同时也是为了方便查找语句

 

use Northwind
go
select  CustomerID,EMployeeID
from Orders
where CustomerID='RATTC'
go

 如右图

 -------------select  * from Orders---------------------------------------------------------------------

 如果是

use Northwind
go
select  *
from Orders
go

则是返回所以的数据

 

 

 

 

 

---distinct -----------------------order by CustomerID-------------------------------------------------------------

use Northwind
go
select  CustomerID
from Orders
order by CustomerID

go
select distinct CustomerID
from Orders
go

 

 

  如右图

则返回如图两个列表

左边为第一个的里面有 重复了很多个

右边为distinct 过的 重复的消失了(个数也比 上面的少了很多)

 order by CustomerID是排序   DESC是逆序 ASC是顺序(即默认)

 

 

 

-----------------------------------------------------------------------------------------------------

use Northwind
go
select  top 5 CustomerID
from Orders
go
select  top 5 percent CustomerID
from Orders
go

 

 如右图

第一个为前5行(左边)

第二个为前5%(右边)

 

-------------------------------------------------------------------------------------------------

use Northwind
go
select  CustomerID 'C的id','E的id'=EmployeeID,OrderDate as '时间'
from Orders
go

 

  如右图

修改查询结果中列的标题(别名)

-----------------------------------------------------------------------------

 use Northwind
go
select  CustomerID ,'AAA'
from Orders
go

 

在CustomerID 列的旁边会有一个列 内容全为 AAA

 


 

 

 -------------------------------------------------------------------------------------------------

  

 use Northwind
go
select  EmployeeID,CustomerID
from Orders 
where EmployeeID>'1'
order by EmployeeID
go

 

   如右图

只显示 EmployeeID>'1'的 项目

--------------------------------------------------------------------------------

 

 

 use Northwind
go
select  min(EmployeeID) as 最小,max(EmployeeID) as 最大,avg(EmployeeID) as 平均
from Orders 
go

最大最小平均
194

 

 -------------------------------------------------------------------------------

use Northwind
go
select  CustomerID
from Orders 
where CustomerID='RICSU' or CustomerID='TOMSP'
go

select  CustomerID
from Orders 
where CustomerID in ('RICSU','TOMSP')
go
这两个是等效的 效果如右图

 

 

如果是写成where CustomerID not in ('RICSU','TOMSP')

或者  where CustomerID <> 'RICSU' and CustomerID <>  'TOMSP')

就是现实不包含途中这几个项目的 列表了

-----------------------------------------------------------------------------------------

 

 

(1)% ,匹配包含0个活多个字符的字符串

(2)_   下划线,匹配任何单个的字符。

(3)[] 排列通配符,匹配任何在访问或计划之内的单个字符,例如[m-p]匹配的是m/n/o/p单个字符

(4)[^]不在范围之内的字符,匹配任何不在访问或计划之内的单个字符,例如,[^MNOP]或者[^M-P]就是匹配除了M/N/O/P之外的任何字符

 

use Northwind
go
select  distinct  CustomerID as '开头为R'
from Orders 
where   CustomerID like 'R%'
go
select distinct  CustomerID as '第二个为R'
from Orders 
where   CustomerID like '_R%'
go
select distinct  CustomerID as '倒数第二个为R'
from Orders 
where CustomerID like '%R_'
go
select distinct  CustomerID as '第一个不是R'
from Orders 
where  CustomerID like '[^R]%'
go
select distinct  CustomerID as '同上:第一个不是R'
from Orders 
where  CustomerID not like 'R%'
go

 

--------------------------------------------------------------------------------------------------------------------

为了得到效果 在Categories 表中 添加几列空列

use Northwind
go
select    *
from   Categories
where   [Description] is null
go

如右图

[Description]好像是系统的一个保留字 所以用[]起来就可以使用了

 -------------------------------------------------------------------------------------------

use Northwind
go
select  distinct CustomerID, EmployeeID
from Orders
where EmployeeID between 2 and 4
order by EmployeeID
go

 


查询 EmployeeID在 2 4之间的项

如右图

 

如果是where EmployeeID  not between 2 and 4

 

那么就是相反的结果

 

 

 

-----------------------------------------------------------------------------------

 

COMPUTE子句

用来计算总计或进行分组小计,总计值或小计值将作为福建的新行出现在查询结果中。

该子句用在WHERE子句之后

 

use Northwind

go
select  distinct CustomerID, EmployeeID
from Orders
where CustomerID ='WANDK'
compute avg(EmployeeID)
go

 

这个AVG返回的是所有的CustomerID ='WANDK' 的平均值

------------------------------------------------------------------------

use Northwind
go
select   CustomerID, EmployeeID
from Orders
where CustomerID like 'v%'
order by CustomerID
compute AVG(EmployeeID) by CustomerID
go
这个AVG返回的是每一种CustomerID 以V开头的的平均值

得先order by 一下再 compute by

 

使用COMPUTE BY 子句对BY 后面给出的列进行分组显示,并计算该列的分组小计。使用COMPUTE BY 子句时必须按照ORDER BY 和COMPYTE BY 中的 BY 指定的列进行排序。

 

-----------------------------------------------------------------------------------

use Northwind
go
select   CustomerID, count(CustomerID)as'数量'
from Orders
where CustomerID like 'A%'
GROUP BY  CustomerID
go
将查询结果按照GOOUP BY 后指定的列进行分组,该句子写在WHERE子句的后面。当在SELECT子句中包含聚合函数时,最适合使用GROUP BY 子句。SELECT子句中的选项列表中出现的列,包含在聚合函数中或者包含在GROUP BY子句中,否则,SQL SERVER将返回错误。

如果是

select   EmployeeID, count(CustomerID)as'数量'

就会报错“列 'Orders.EmployeeID' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。”

 

所以得写成

use Northwind
go
select   CustomerID, count(CustomerID)as'数量',EmployeeID

from Orders
where CustomerID like 'A%'
GROUP BY  CustomerID,EmployeeID
go
-----------------------------------------------------------------------------------------------

 

  网上看到的一个不错的例子 感觉蛮实用 的也拉进来了

 

 

SUM 这个指令来算出所有的 Sales (营业额)吧!如果我们的需求变成是要算出每一间店 (store_name) 的营业额 (sales),那怎么办呢?在这个情况下,我们要做到两件事:第一,我们对于 store_name 及 Sales 这两个栏位都要选出。第二,我们需要确认所有的 sales 都要依照各个 store_name 来分开算。这个语法为:

SELECT "栏位1", SUM("栏位2")
FROM "表格名"
GROUP BY "栏位1"

在我们的示范上,

Store_Information 表格

store_name Sales Date
Los Angeles $1500 Jan-05-1999
San Diego $250 Jan-07-1999
Los Angeles $300 Jan-08-1999
Boston $700 Jan-08-1999

我们就打入,

SELECT store_name, SUM(Sales)
FROM Store_Information
GROUP BY store_name

结果:

store_nameSUM(Sales)
Los Angeles$1800
San Diego$250
Boston$700

当我们选不只一个栏位,且其中至少一个栏位有包含函数的运用时,我们就需要用到 GROUP BY 这个指令。在这个情况下,我们需要确定我们有 GROUP BY 所有其他的栏位。换句话说,除了有包括函数的栏位外,我 们都需要将其放在 GROUP BY 的子句中。
-------------------------------------------------------------------

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值