在SQL的进阶学习中,要注重三个比较重要的知识的学习。
1、函数
能够在函数库中找打自己需要的函数,可以从查询分析器的公用对象得出参考。
![](https://images.cnblogs.com/cnblogs_com/mis0601/sql.png)
然后在按F1获取帮助。
2、表连接
内连接是最常用的连接方式。
3、子查询
程序实例
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
--从库存表中得到图书的ISBN,库存量和图书和上月图书销量
SELECT ISBN, AMOUNT, ( SELECT ISNULL(SUM(Amount), 0)
FROM Sale INNER JOIN SaleDetail
ON Sale.SaleID = SaleDetail.SaleID
WHERE SaleDetail.ISBN = STOCK.ISBN
AND DATEDIFF(MONTH, SaleDate, GETDATE()) = 1 ) LastMonthSale
--使用子查询获得每种图书的上月销量
FROM Stock
更多例子
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
--生成单据编号,单据编号格式为“4位类型+8位日期+3位流水号”
CREATE PROCEDURE SetTaskID
(@Type CHAR(4),
@GeneratedID CHAR(20) OUTPUT)
AS
BEGIN
DECLARE @MaxID CHAR(20)
--先判断该类型当天是否已产生编号
SET @MaxID =
(SELECT MAX(TaskID)
FROM Task
WHERE SUBSTRING(TaskID, 1, 4) = @Type)
--已有编号时则流水号加1
IF @MaxID IS NOT NULL
SET @GeneratedID = @Type + CONVERT(CHAR(20),CONVERT(BIGINT, (substring(@MaxID,5,11))) + 1)
--否则以类型+当天日期+'001'作为编号
ELSE
SET @GeneratedID = @Type + CONVERT(CHAR(8),GETDATE(),112) +'001'
END