SQL基础

 
SQL 基础
一、 SQL 语言特点
1 功能的一体化
2 两种使用方式,统一的语法结构
 
即联机交互使用方式、嵌入到某种高级程序设语言中(宿主语言)。
3 高度非过程化
 SQL
是一种描述性的语言(即结构化查询语言)。
4 基于集合的操作方式
5 语言简洁易学
 
二、SQL语言中的动词
SQL 语言按功能分类
主要动词
数据库定义语言 DDL
create drop alter
数据库查询语言 QL
select
数据库操纵语言 DML
insert update delete
数据库控制语言 DCL
grant revoke
 
三、SQL Servler集合函数
Sum()
 
Min()
 
Max()
 
Avg()
 
Count()
返回非空表达式的个数
Count(*)
返回找到的行数
Distinct count()
不重复的输入值的数目
 
四、SQL Servler通配符
1 % :包含 0 个或更多个字符的任意字符串
%ab% :表示所有包含两个 ab 相连的任何字符串,如 aabb,babb 等。

2  _( 下划线 ) :任何单个字符。以 _ 开头的任何字符串。
   _ean
:匹配以 _ean 结尾的所有 4 个字母的字符串,如 dean,sean 等。
3  [ ] :指定范围 [a-f] 或集合 [abcdef] 中的任何单个字符。
4  [^] :不属于指定范围 [a-f] 或集合 [abcdef] 中的任何单个字符。
   de[^1]%
:将匹配以 de 开头且其后的字母不为 1 的所有字符串。
 
 
五、使用变量
T-SQL 中的变量分为局部变量和全局变量。全局变量由系统定义和维护,我们直接使用即可,一般不自定义全局变量。
1 局部变量:它的名称必须以标记 @ 作为前缘。
    声明语法: declear @ 变量名称 数据类型

 
如:
     declare @name varchar(8)
     declare @seat int
  赋值语法:
 set @ 变量名 =
 select @
变量名 =
如:
/**查找张三的信息**/
declear 
@name   varchar ( 8 )
set   @name = "张三"
select   *   from  stuInfo  where = @name

/**查找张三的左右同桌**/
declare   @seat   int ;
select   @seat = stuSeat form stuInfo  where  stuName = @name
select   *   from  stuInfo  where  (stuSeat = @seat + 1 or  (stuSeat = @seat - 1 )
go
  
从上可以可出,局部变量可用于在上下语句中传递数据。
   set
赋值语句一般用于赋给变量指定的数据常量。
   select
赋值语句一般用于从表中查询数据,然后再赋给变量。
 
     2 全局变量
 SQL Servler 中的所有全局变量都使用 2 @ 标志合作为前缀。 常用的全局变量。
 
 
@@ERROR
最后个 T-SQL 错误的错误号(整型值)
@@IDENTITY
最后一次插入的标识值
@@LANGUAGE
当前使用的语言的名称
@@MAX_CONNECTIONS
可以创建的同时连接的最大数目
@@ROWCOUNT
受上一个语句影响的行数
@@SERVERNAME
本地服务器的名称
@@SERVICENAME
该计算机上 SQL 服务的名称
@@TIMETICKS
当前计算机上每刻度的微秒数
@@TRANSCOUNT
当前连接打开的事务数
@@VERSION
SQL Server 的版本信息
@@PROCID
当前存储过程的标识值
@@CURSOR_ROWS
返回游标打开后,游标中的行数。
@@CONNECTIONS
返回 SQL Servler 启动后,所接受的连接或试图连接的次数
 
六、 输出语句
常用的输出语句有两种:
1 print 局部变量或字符串
2 select 局部变量 as 自定义列名 ( 查询语句的特殊应用 )
 
print ' 服务器名称 ' + @@SERVICENAME –- 以文本方式显示 -
select @@SERVERNAME as ' 服务器名称 ' – 以网格方式显示 --
七、 批处理语句
         批处理语句 go: 它是一条名多条 SQL 语句的集合。 SQL Servet 将批处理语句编译成一个可执行单元,此单元称为执行计划。 批处理的主要好外是简化数据库管理。
 
八、 SQL 中的流程控制语句
1 if..else..
if ( 条件 )
    语句或语句块
else
    语句或语句块
 
2 begin..end..: 标志 SQL 代码块的开始和结束 . 类似于 C 中的 {}.
if ( 条件 )
    begin
       语句
       语句
    end
else
...
 
3 return: 无条件从当前过程退出 .
 
4 case..when..else..end: 类似于 C 中的多分支语句 .
case
    when 条件 then 结果
    when 条件 then 结果
    [else 其他结果 ]
end
采用美国的 ABCDE 五级打分制来显示成绩
select   *   from  stuInfo  -- 原始成绩
print   ' ABCDE五级显示成绩如下: '
select  stuNo,成绩 = case
                        
when  scoure < 60   then   ' E '
                        
when  scoure  between   60   and   69   then   ' D '
                        
when  scoure  between   70   and   79   then   ' C '
                        
when  scoure  between   80   and   89   then   ' C '
                        
else   ' A '
                    
end
                
from  stuInfo

 
5 goto: 用于立即跳转到 T-SQL 代码中的某个特定位置 ( 即标号 ).
declare   @i   int
set   @i = 0
while ( @i < 10 )
    
begin
        
set   @i = @i + 1
        
if ( @i = 4 )
            
set   @i = @i + 95
            
goto  mark
            mark:
            
print   ' i=5时的值是:  ' + cast ( @i   as   varchar ( 8 ))            
    
end
 
 
6 while:
while ( 条件 )
    语句或语句块
    [break | continue]
 
7 break: 退出 while 循环
 
8 continue: 用于在特定的情况下重新开始 while 循环 .
 
9 waitfor:
: 00 执行存储过程 usp_proc
waitfor time '23:00'
    begin
       execute usp_proc
    end
 
从现在开始分种内一直执行存储过程 usp_proc
waitfor delay '000:05:00'/* : : */
    begin
       execute usp_proc
    end
 
九、 其它 T-SQL 编程语句
1 注释语句
    /* 这是注释 */ -- 这是注释
 
2 execute: 执行 SQL 系统存储过程或自定义存储过程 .
 
3 raiserror: 允许客户端程序处理错误 ( 异常 ), 并让 SQL 通知出现了错误 .
语法 :
raiserror ({ msg_id | msg_str},severity,state
           [,argument[,...n]])
           [with [log | nowait | seterror]]
其中 :
1 msg_id: 是存留在 sysmessages 系统表中中的消息数量 . 小于等于的地方保留给 SQL, 用户定义的消息编号大于 .
2 msg_str: 用户定义的特定信息 , 最到个字符 .
3 severity: 与特定信息相关联 , 表示用户定义的严重性级别 .
用户可使用的级别是 -18.
sysadmin 角色成员的级别是 -25, 且要指定 with log 选项
致命错误级别 -25
4 state: 错误的状态 .1-127 之间的值 .
5 with:3 个参数 :
log: 在错误和应用程序日志中记录错误
nowait: 立即向客户程序报告错误
seterror: 无条件的将错误报告给
如下示例 :
当用户调用存储过程时 . 传入的及格线不在 -100 之间时 , 将弹出错误警告 .
use  stuDB
go
if   exists ( select   *   from  sysobjects  where  name = ' proc_stu ' )
    
drop   procedure  proc_stu
go
/*--创建存储过程--*/
create   procedure  proc_stu
@notpassSum   int  output,     -- 指出是输出参数
@writtenPass   int = 60 ,     -- 输入参数,笔试及格线,默认参数放后.
@labPass   int = 60              -- 输入参数,机试及格线,默认参数放后.
as
    
/*------------错误处理----------------*/
    
if ( not   @writtenPass   between   0   and   100 ) or ( not   @labPass   between   0   and   100 )
        
begin
            
raiserror ( ' 及格线错误,请指定-100之间的数,统计中断退出! ' , 16 , 1 )
            
return   -- 立即返回,退出存储过程
         end

    
print   ' 笔试平均分:  ' + convert ( varchar ( 5 ), @writtenPass )
    
print   ' 机试平均分:  ' + cast ( @labPass   as   varchar ( 5 ))
    
print   ' ------------------------------------- '
    
print   '      参加本次考试没有通过的学生      '
    
select  stuName,stuInfo.stuNo,writtenExam,labExam  from  stuInfo 
        
inner   join  stuMarks  on  stuInfo.stuNo = stuMarks.stuNo
            
where  writtenExam < @writtenPass   or  labExam < @labPass
    
/*------统计不有通过考试的学员人数------*/
    
select   @notpassSum = count (stuNo)  from  stuMarks
        
where  writtenExam < @writtenPass   or  labExam < @labPass
go

/**--调用存储过程--**/

-- 定义变量,用于存放调用存储过程时返回的结果--
declare   @sum   int , @t   int     

-- 调用时也带output,笔试及格线为,机试及格线默认为            
execute  proc_stu  @sum  output, 800      -- 大于报错
set   @t = @@ERROR                          -- raiserror报错误后@@ERROR将不等于,表示有错
if   @t <> 0
    
print   ' @@ERROR的值是:  ' + convert ( varchar ( 5 ), @t )
    
return   -- 退出批处理,后续语句不执行.
select    ' 未通过人数 ' +   cast ( @sum   as   varchar ( 5 )) + ' '
go

 
 
十、 SQL 函数
语法 :
    create function 函数名 ( 传入的参数参数类型 )
       return 返回值的类型
           as
              SQL 语句或语句块
              return 返回的值
其中 :
[return 返回值的类型 ] [return 返回的值 ] 的数据类型要一致
 
 


use  stuDB
go
-- 函数getSerial(@variable datetime)得到流水号--
if   exists ( select   *    from  sysobjects  where  name = ' getSerial ' )
    
drop   function   getSerial
go
create   function  getSerial( @dt   datetime )
returns   varchar ( 50 )
as   
begin  
    
declare   @dtstr   varchar ( 50 )
    
select   @dtstr = datename ( year , @dt ) + datename ( month , @dt ) + datename ( day , @dt ) +
        
datename (hour, @dt ) + datename (minute, @dt ) + datename (second, @dt ) +
        
datename (millisecond, @dt )
    
return   @dtstr
end
go

/*调用* 必须以stuDB.dbo.这种方式调用*/
/*否则报:'getSerial' 不是可以识别的内置函数名称。*/
print    cast (stuDB.dbo.getSerial( getdate ())  as   char ( 20 ))


你可能感兴趣的:(sql,语言,存储,数据库,go,output)