您的位置:首页 > 数据库

SQL2008入门教程-SQL语句

2014-03-24 11:30 387 查看

1.表操作

CREATE TABLE Contract
(
ContractID varchar (10) NOT NULL ,
CompanyID varchar (10) NOT NULL ,
ContractName varchar (30) NULL ,
ContractVolume numeric(18, 2) NULL,
SignDate Datetime NULL
)
CREATE TABLE #MyTempQuery --临时表,存储在tempdb中,
(
ContractID Varchar(10) PRIMARY KEY,
ContractVolume Numeric(18, 0)
)

ALTER TABLE Contract  --增加新的字段
ADD CompanyID VARCHAR(20) NULL

ALTER TABLE Contract   --改变数据类型
ALTER COLUMN ContractVolume money

DROP TABLE Contract --删除表Contract
/*DROP TABLE 不能用于除去由 FOREIGN KEY 约束引用的表。必须先除去引用的 FOREIGN KEY 约束或引用的表。除去表时,表上的规则或默认值将解除绑定,任何与表关联的约束或触发器将自动除去。
*/

2.查询操作

Select TOP 50 ContractName as 合同名称,   --只显示满足要求的前50条记录
ContractVolume as 合同总金额
From Contract
SELECT DISTINCT CompanyID  --DISTINCT 去掉重复的列
FROM Contract
/*查询每个合同的合同明细金额之和,合同表与合同明细表是主子表的关系。合同明细表有三个字段分别是:ContractID、ContractDetailID、Volume。
合同表的字段是[ContractID]
,[ContractName]
,[ContractVolume]
,[SignDate]
,[CompanyID]
,[ContractMemo]*/
SELECT a.ContractID ,sum(Volume)
FROM Contract a --别名,便于书写
LEFT JOIN ContractDetail b  --左外连接
ON a.ContractID=b.ContractID
GROUP BY a.ContractID   --按照ContractID分组求每个分组的和,即相同的ID的Volume求和

SELECT ContractID,ContractName,ContractVolume,SignDate
FROM Contract
WHERE SignDate>’2002-01-01’  --where 条件

SELECT ContractID,ContractName,ContractVolume,SignDate
FROM Contract,Company
WHERE Contract.CompanyID=Company.CompanyID
AND CompanyName='北京怡神工贸公司'
AND ContractVolume>1000000
SELECT ContractID,ContractName,ContractVolume,SignDate
FROM Contract
WHERE ContractVolume<100000
OR (SignDate>’2002-05-01’ AND SignDate<’2002-08-01’)
/*查询与各公司签定的所有合同的总金额之和,在此需要聚合函数SUM,SQL语句如下:*/
SELECT CompanyName,SUM(ContractVolume)
FROM Contract,Company
WHERE Contract.CompanyID=Company.CompanyID
GROUP BY CompanyName
/*查询各合同的合同明细金额的最小值,需要用到函数MIN,SQL语句如下:*/
SELECT ContractName,MIN(Volume)
FROM Contract,ContractDetail
WHERE Contract.ContractID=ContractDetail.ContractID
GROUP BY ContractName

/*查询每个单位每个合同明细金额之和,要求该合同为2002年1月1日之后签名册定的合同,SQL语句如下:*/
SELECT CompanyName,ContractName,SUM(Volume)
FROM Contract,ContractDetail,Company
WHERE Contract.ContractID=ContractDetail.ContractID
AND Contract.CompanyID=Company.CompanyID
GROUP BY CompanyName,ContractName,SignDate
HAVING SignDate>’2002-01-01’
/*HAVING 与 WHERE 类似,可用来决定选择哪个记录。在使用 GROUP BY对这些记录分组后,HAVING 会决定应显示的记录。在 HAVING 子句中不能使用 text、image 和 ntext 数据类型。*/

--如果要将数据以排序时的顺序显示出来,就必须使用 ORDER BY。ORDER BY 使用两个保留字ASC和DESC,ASC按递增的顺序排序,DESC按递减的顺序排序,缺省的排序次序是递增排序 (A 至 Z,0 至9)。在 ORDER BY 子句中不能使用 ntext、text 和 image 列。空值被视为最低的可能值。
--查询每个单位每个合同明细金额之和,要求该合同为2002年1月1日之后签名册定的合同,并且按单位名称和签定日期升序排序,SQL语句如下:
SELECT CompanyName,ContractName,SUM(Volume)
FROM Contract,ContractDetail,Company
WHERE Contract.ContractID=ContractDetail.ContractID
AND Contract.CompanyID=Company.CompanyID
GROUP BY CompanyName,ContractName,SignDate
HAVING SignDate>’2002-01-01’
ORDER BY CompanyName,SignDate

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SQLServer