1.SELECT语句
基本语法:
SELETE select_list FROM table_name
select_list:选择一个列或多个列(多列时以逗号分隔)
table_name:为查询的表名
(1)使用计算列
可以使用算式运算符(如:+、-、*、/等)使之成为计算列
exp:
SELECT title,
price*num
FROM titles
(2)定义列别名
①使用AS关键字
SELECT name AS 姓名 FROM student
②带双引号的列别名
SELECT math "数学成绩" FROM stu_score
③带单引号的列别名
SELECT math '数学成绩' FROM stu_score
④不带引号的列别名
SELECT math 数学成绩 FROM stu_score
2.定义批处理(begin...end语句)
执行多个SQL语句,已完成特定的任务,这就需要将多个SQL语句视为一个整体来执行,即执行批处理
基本语法:
GEGIN
{...代码...}
END
该语句用于把多个SQL语句组合成为一个逻辑块
使用情况:
①while循环内包含的语句块
②case()函数的元素包含的语句块
③if或else子句中包含的语句块
exp:
View Code
1 USE db_sql2000
2 GO
3 --声明变量
4 DECLARE @name varchar(200),@price money,@introduction varchar(200)
5 SELECT @name=b_name,@price=b_price,@introduction=b_intro
6 FROM dbo.Bookinfo2
7 WHERE b_name='SQL深入编程'
8 --根究条件输出
9 IF @price>20
10 BEGIN
11 PRINT '书名 :'+@name
12 PRINT '内容介绍: '+@introduction
13 END
14 ELSE
15 PRINT '此书价格小于20'
16 GO
3. 查询指定行数据(TOP语句)
使用TOP关键字查询前n条记录,使用GO命令结束批处理
基本语法:
SELECT TOP n [PERCENT]
FROM table
WHERE....
ORDER BY ....
说明:
n : 返回满足WHERE条件的前N条记录,N为整数
percent : 为可选项,从结果集中返回百分之N的记录,而不是N行
注意:如果缺少ORDER BY语句,TOP n 返回瞒住WHERE子句的前N条记录。如果满足条件的记录小于N,那么仅返回满足条件的记录。
如果包含ORDER BY子句,TOP n 返回满足查询的前n行,当不删除重复组,这样可能输出大于n条的记录
exp:
View Code
1 USE db_sql2000
2 GO
3 --返回价格大于20的前2条数据
4 SELECT TOP 2 *
5 FROM dbo.Bookinfo2
6 WHERE b_price>20
7 ORDER BY b_price DESC
8 GO
View Code
1 USE db_sql2000
2 GO
3 SELECT TOP 1 *
4 --返回价格大于30的前1条数据
5 FROM (SELECT TOP 2 * FROM dbo.Bookinfo2 WHERE b_price>20) AS good2
6 WHERE b_price>30
7 ORDER BY b_price DESC
8 GO
4.去除结果集中的重复的行或列数据(DISTINCT语句)
基本语法:
SELECT [DISTINCT|ALL] select_list
说明:
未使用DISTINCT关键字,在查询结果中不会消除重复的记录。
使用ALL关键字可以明确指示保留重复记录,此项为默认的行为
注意:
一个SELECT语句中只有一个DISTINCT
exp:
View Code
1 USE db_sql2000
2 GO
3 SELECT DISTINCT ord_id AS 订单号,
4 user_name AS 用户名,
5 g_num AS 数量
6 --g_lprice AS 单价
7 --ord_date AS 订单时间
8 FROM dbo.Order_new
9 GO
View Code
1 USE db_sql2000
2 GO
3 SELECT COUNT(*) AS 客户数量
4 FROM (SELECT DISTINCT ord_id FROM dbo.Order_new) AS 订单
5 GO
5.计算数据在结果集中的行号(ROW_NUMBER()函数):SQL 2005版本或以上
基本语法:
ROW_NUMBER() OVER([<partition_by_clause>]<order_by_clause>)]
说明:
<partition_by_clause>:将FROM子句生成的结果集合添加到应用了ROW_NUMBER()函数的分区
<order_by_clause>:确定应用了ROW_NUMBER()函数的分区中行的顺序。即指定分区内排序的字段和方式
EXP:
View Code
1 USE db_sql2000
2 GO
3 SELECT ROW_NUMBER() OVER(ORDER BY ord_id DESC) AS 用户号码,
4 ord_id AS 用户订单
5 FROM(SELECT DISTINCT ord_id From dbo.Order_new) AS 用户订单
6 GO
6.随机查询n行数据(NEWID()函数)
NEWID()函数:
uniqueidentifier类型的惟一值,该函数返回的类型是uniqueidentifier。uniqueidentifier数据类型用于存储16字节的二进制值,该值的使用与全局惟一标识符(GUID)一样。
exp:
View Code
1 --使用NEWID()函数获得uniqueidentifier列的GUID值
2 DECLARE @var uniqueidentifier
3 SET @var=NEWID()
4 PRINT '@VAR变量的值为: '+CONVERT(varchar(255),@var)
View Code
1 USE db_sql2000
2 GO
3 --创建一个表Sales2
4 CREATE TABLE Sales3
5 (
6 sal_id uniqueidentifier NOT NULL DEFAULT NEWID(),
7 book_code char(30) NOT NULL,
8 book_price money NOT NULL,
9 sal_num int NOT NULL default 1,
10 sal_tot as book_price*sal_num
11 )
12 GO
13 --向表中插入数据
14 INSERT Sales3 SELECT NEWID(),'ABCD',29,12
15 INSERT Sales3 SELECT NEWID(),'ABCE',19.5,10
16 INSERT Sales3 SELECT NEWID(),'ABCF',11,9
17 INSERT Sales3 SELECT NEWID(),'ABCG',32,15
18 GO
19 --随机返回2行数据
20 SELECT TOP 2 *
21 FROM Sales3
22 ORDER BY NEWID()
23 GO
7.