SQL:基本查询

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.

 

 

 

原文地址:https://www.cnblogs.com/KeenLeung/p/2696549.html