Select 1
select 1 from table;与select anycol(目的表集合中的任意一行) from table;与select * from table 从作用上来说是没有差别的,都是查看是否有记录,一般是作条件查询用的。select 1 from 中的1是一常量(可以为任意数值),查到的所有行的值都是它,但从效率上来说,1>anycol>*,因为不用查字典表。
select count(1) from emp 是什么意思呢?
count(1),其实就是计算一共有多少符合条件的行。对表的记录计数啊,可以试试,count(*)括号里可以是*,也可以是任意个数字的。
1并不是表示第一个字段,而是表示一个固定值。其实就可以想成表中有这么一个字段,这个字段就是固定值1,count(1)就是计算一共有多少个1.
count(1)这里面的1是什么意思
其实1就代表你这个查询的表里的第一个字段
1、视图的理解
从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据。从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表。从数据库系统内部来看,视图是由一张或多张表中的数据组成的,从数据库系统外部来看,视图就如同一张表一样,对表能够进行的一般操作都可以应用于视图,例如查询,插入,修改,删除操作等。
2、视图的用途
a.筛选表中的行
b.防止未经许可的用户访问敏感数据
c.降低数据库的复杂程度
d.将多个物理数据库抽象为一个逻辑数据库
SQL UNION 操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
SQL SERVER存储过程基本语法
一、定义变量--简单赋值
declare @a int
set @a=5
print@a
--使用select语句赋值
declare @user1 nvarchar(50)
select@user1='三'
print @user1
declare @user2 nvarchar(50)
select@user2=Name from ST_User where ID=1
print@user2
三、循环--while循环计算1到100的和
declare @a int
declare @sum int
set @a=1
set @sum=0
while @a<=100
begin
set @sum+=@a
set @a+=1
end
print @sum
declare @today int
declare @week nvarchar(3)
set @today=3
set @week=case
when @today=1 then'星期一'
when@today=2 then'星期二'
when@today=3 then'星期三'
when@today=4 then'星期四'
when@today=5 then'星期五'
when@today=6 then'星期六'
when@today=7 then'星期日'
else '值错误'
end
print@week
一:存储过程概述
简而言之,存储过程就是SQL Server为了实现特定任务,而将一些需要多次调用的固定操作语句编写成程序段,这些程序段存储在服务器上,由数据库服务器通过程序来调用。
创建自定义存储过程时,存储过程名前加上"##"表示创建了一个全局的临时存储过程;存储过程前面加上"#"时,表示创建的局部临时存储过程。局部临时存储过程只能在创建它的回话中使用,会话结束时,将被删除。这两种存储过程都存储在tempdb数据库中。
创建带参数的存储过程
存储过程的参数分为两种:输入参数和输出参数
输入参数:用于向存储过程传入值,类似java语言或则c中的值传递。
输出参数:用于调用存储过程后,参会结果,类似java语言的按引用传递。
(1)带一个参数存储过程
if (exists (select * from sys.objects where name = 'searchBooks'))
drop proc searchBooks
go
create proc searchBooks(@bookID int)
as
--要求book_id列与输入参数相等
select * from books where book_id=@bookID;
--执行searchBooks
exec searchBooks 1;
(2)带2个参数存储过程
if (exists (select * from sys.objects where name = 'searchBooks1'))
drop proc searchBooks1
go
create proc searchBooks1(
@bookID int,
@bookAuth varchar(20)
)
as
--要求book_id和book_Auth列与输入参数相等
select * from books where book_id=@bookID and book_auth=@bookAuth;
exec searchBooks1 1,'金庸';
(3)创建有返回值的存储过程
if (exists (select * from sys.objects where name = 'getBookId'))
drop proc getBookId
go
create proc getBookId(
@bookAuth varchar(20),--输入参数,无默认值
@bookId int output --输入/输出参数 无默认值
)
as
select @bookId=book_id from books where book_auth=@bookAuth
--执行getBookId这个带返回值的存储过程
declare @id int --声明一个变量用来接收执行存储过程后的返回值
exec getBookId '孔子',@id output
select @id as bookId;--as是给返回的列值起一个名字
(4)创建带通配符的存储过程
if (exists (select * from sys.objects where name = 'charBooks'))
drop proc charBooks
go
create proc charBooks(
@bookAuth varchar(20)='金%',
@bookName varchar(20)='%'
)
as
select * from books where book_auth like @bookAuth and book_name like @bookName;
--执行存储过程charBooks
exec charBooks '孔%','论%';
(5)加密存储过程
with encryption子句对用户隐藏存储过程的文本.使用 sp_helptext 系统存储过程获取关于加密过程的信息,然后尝试直接从 syscomments 表中获取关于该过程的信息.
if (object_id('books_encryption', 'P') is not null)
drop proc books_encryption
go
create proc books_encryption
with encryption
as
select * from books;
--执行此过程books_encryption
exec books_encryption;
exec sp_helptext 'books_encryption';--控制台会显示"对象 'books_encryption' 的文本已加密。"
(6).不缓存存储过程
--with recompile不缓存
if (object_id('book_temp', 'P') is not null)
drop proc book_temp
go
create proc book_temp
with recompile
as
select * from books;
go
exec book_temp;
exec sp_helptext 'book_temp';
SQLServer游标(Cursor)简介和使用说明
游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次以行或者多行前进或向后浏览数据的能力。我们可以把游标当作一个指针,它可以指定结果中的任何位置,然后允许用户对指定位置的数据进行处理。
1.游标的组成
游标包含两个部分:一个是游标结果集、一个是游标位置。
游标结果集:定义该游标得SELECT语句返回的行的集合。
游标位置:指向这个结果集某一行的当前指针。
2.游标使用顺序:
1、定义游标
2、打开游标
3、使用游标
4、关闭游标
5、释放游标
3.游标的生命周期
游标的生命周期包含有五个阶段:声明游标、打开游标、读取游标数据、关闭游标、释放游标。
声明游标是为游标指定获取数据时所使用的Select语句,声明游标并不会检索任何数据,它只是为游标指明了相应的Select 语句。
Declare 游标名称 Cursor 参数
声明游标
declare 游标名 cursor [LOCAL | GLOBAL][FORWARD_ONLY | SCROLL][STATIC | KEYSET | DYNAMIC ] [READ_ONLY | SCROLL_LOCKS]
for selet语句 [for update[of 列名[,列名]]
注:LOCAL 局部游标 GLOBAL 全局游标
FORWARD_ONLY 仅向前 SCROLL 滚动
STATIC 静态 KEYSET 键集 DYNAMIC 动态
READ_ONLY 只读 SCROLL_LOCKS 锁定游标当前行
获取游标的数据
FETCH [[NEXT | PRIOR | FIRST | LAST |
ABSOLUTE{ n | @nvar | RELATIVE { n | @nvar}]
From ] 游标名 [into 变量]
注:
NEXT 下一行 PRIOR 上一行 FIRST 第一行
LAST 最后一行 ABSOLUTE n 第n行
RELATIVE n 当前位置开始的第n行
into 变量 把当前行的各字段值赋值给变量
游标状态变量:
@@fetch_status 游标状态
0 成功 -1 失败 -2 丢失
@@cursor_rows 游标中结果集中的行数
n 行数 -1 游标是动态的 0 空集游标
操作游标的当前行:
current of 游标名