`
kkllmey
  • 浏览: 103398 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

s-q-l学习笔记

阅读更多
=============================第一章:建库建表===============================
sql中的用"--"和/*------*/注释

sql中的数据类型
{
int(4)个字节:   smallint(2)个字节:范围比int类型的范围小
tinyint(2)个字节:存0-255之间数(整数) numeric(位数,小数位数)例 :numeric(18.0)--18位整数0位小数
float
}

-----------建数据库的代码:

if exists(select * from sysdatabases name='stuDB')
drop database stuDB
create database stuDB
on[primary]
( --主数据库
name='stuDB_data' ,                    --主数据库的逻辑文件名
filename='D:\stuDB_data.mdf,   --主数据文件的物理文件名
size=5mb,                                   --主数据文件的初始大小
maxsize=100mb,                    --主数据文件的最大值
filegrowth=15%  --主数据文件的增长率
)
,
( --次要数据库
name='stuDB_data2',
filename='D:stuDB_data2.mdf',
size=20,
maxsize=100,
filegrowth=1
)
log on    --日记文件
(
name='stuDB_Log',
filename='D:\StuDB_Log.ldf',
size=10,
filegrowth=1
)
go


------(创建)删除表

use stuDB
if(exists select * from sysobjects where name='stuTable')
  drop table stuTable
create table stuInfo
(
id int identity(1,1) not null,
useName varchar(30) primary key not null,
password varchar(30) not null
)
go

--------添加约束

alter table stuInfo
add constraint PK_stuNo primary key(stuNo) --主键
add constraint UQ_stuID unique(stuID)  --唯一
add constraint DF_stuAddress default('地址不祥')  --默认
add constraint CK-stuAge check(stuAge between 15 and 40)        --检查
add constraint FK_stuNo foreign key(stuNo) references  stuInfo(stuNo)             --外键
--删除约束:alter table stuInfo drop constraint 约束名


------分配sql管理用户

1.创建登录身份:  sp_addlogin 'zhang','123'
2.创建用户       :   sp_grantdbaccess 'zhang','userZhang'
3.分配权限       :   grant select(update,delete) on stuInfo to userZhang

--撤消权限      :revoke select on stuInfo to userZhang
--拒绝访问     : deny select on stuInfo to userZhang

去除和登陆相关联的用户
exec sp_revokedbaccess 'userZhang'
删除
exec sp_droplogic 'zhang'
添加window登陆账户
exec sp_grantlogic 'window域名\域账户'

===============================第三章(sql变量)===============================

声明局部变量:
declare @+变量名+数据类型
例 :declare @name varchar(8)
给变量加值(二种方式)
1.set @name='张三'
          2.select @name=stuName from stuInfo where id=1
-------------
convert(varchar(5),@@error)--将错误号转成varchar类型

if-else语句:超过一条以上的用Begin - End
sql中的输出语有二种:
          print  @name或字符串
select @name as 自定义列名
print 语句要求(单个局部变量)或(字符串)表达式作为参数.
因此:print '当前错误编号:'+convert(varchar(5),@@error);

-------------

case end
select stuNo,
成绩=CASE
WHEN writerExam<60 THEN 'E'
WHEN writerExam BETWEEN 60 and 70 THEN   'D'
ELSE 'A'
form stuInfo

===============================第四章(子查询)===============================

1.子查询和比较运算符联合用时,必须保证子查询返回的值不能多于一个
2.update,insert,delete一起使用,语法类似于select语句

例 :select * from stuInfo where stuAge>(select stuAge from stuInfo where stuName='李')
in关键字:select stuName from stuInfo where stuNo IN(select stuNO from stuMarks where eam=60)

not in关键字:与in相反

exists(了查询):如果子查询的语句有记录则返回true
not exists(子查询):如果查询中没有记录录则返加true

求通过率:
avg(isPass*100)+'%': avg()函数返回一个整形值,因为isPass是一个整数,因此必须先扩100倍然后除以总人数得到通过率%。




===============================T-Sql综合应用===============================

1.在学员系统中,使用子查询统计投考的学员名单
  select * from stuInfo where stuNo NOT IN(select stuNo from stuMarks)
2.查询缺考人数
     user stuDB
     go
     set NoCount on--不显示受影响的行数
     select  应到人数=(select count(*) from stuInfo),
                实到人数=(select count(*) from stuMarks),
                缺考人数=((select count(*) from stuInfo)-select count(*) from stuMarks),

3.统计考试通过情况并将结果存到newTable中
    if exists(select * from sysobjects where name='newTable')
        drop table newTable
   select stuName,stuInfo.stuNo,writlenExam,labExam,
             isPass=CASE
             WHEN wrilenExam>=60 and labExam>=60 THEN 1
             ELSE    0
             END
   into newTable from stuInfo Left Join stuMarks On(stuInfo.stuNo=stuMarks.stuNo)
4. 加分(平均分低的加分 )
   declare @avgWriter numeric(4,1) ,@avgLab numeric(4,1)
   declare @addsubject varchar(5),@addScore int
   select @avgWriter=AVG(writtenExam) from newTable where writtenExam is not null
   select @avgLab=AVG(LabExam) from newTable where LabExam is not null
   set @addScore=0
   If @avgWriter<@avgLab
     while(1=1)
     begin
         set @addSubject='笔试'
         update newTable set writtenExam=writtenExam+1
         set @addScore=@addScore+1
         if(select Max(writtenExam) from newTable)>=97
            break
      end
  Else
      whiel(1=1)
      begin
          set @addSubject='机试'
          update newTable set labExam=labExam+1
          set @addScore=@addScore+1
          if(select max(LabExam) from newTable) >=97
              break
      end
--因为提分,所以要更改isPass是否通过
      update newTable set isPass=CASE
WHEN writeenExam>=60 and LabExam>=60 THEN 1
ELSE 0
End
-------查看

    select 加分科目=@addSubject,加分值=@addScore

-------显示最终的通过情况

select 学号=stuNo,姓名=stuName,
  笔试成绩=case
  when writeenExam is null then '缺考'
  else Convert(varchar(5),writeenExam) End
,机试成绩=case
  when LabExam is null then '缺考'
  else Convert(varchar(5),LabExam) End
,是否通过=case
  when isPass=1 then '是'
  else ‘否’ End
  from newTable

---------显示通过率及通过人数

  select 总人数=count(*),通过人数=sum(isPass),通过率=(Convert(varchar(5),Avg(isPass*100))+'%') from newTable


对比sql语句
1.  select * from stuInfo where stuNo IN(select stuNo from stuMarks)
2.  select * from stuInfo where exists(stuInfo.stuNo=select * from stuMarks)
  这二句执行的结果一样(exists()函数:如果有记录就返回true)
  where :代表当前游标指向的记录是否显示(true/false)
  stuInfo.stuNo:代表当前游标指向的行的字段

===========================(结束)T-Sql综合应用===============================

===========================第五章(事务、索引、视图)==========================

----事务

事务:事务是一个不可分割的逻辑单元,作为一个整体(要么都执行,要么都不执行)
事务必备的四个属性(ACID):1.原子性 2.一致性 3.隔离性 4.永久性

开始事务:Begin TransAction
提交事务:Commit TransAction
回滚事务:RollBack TransAction
一旦提交或回滚 事务就结事

@@Error:只能判断当前一条(前条)的语句是否有错,如果有错返回的值不为“0”
因此在事务中进行判断错误时应:@a=@a+@@Error ,if(@a<>0) 则提交事务

事务的分类:1.显示事务 2.隐性事务:set  Implicit_TreansAction on              3.自动提交事务

------索引

(this有索引高级讲解记事本文件,)

索引:编排数据的内部方法,相当于目录
索引的作用:提高查询的速度,改善数据库的性能。
聚集索引:只能有一个
非聚集索引:可以有多个

创建聚集索引:
  if exists(select * from sysIndexs where name='Ix_name')
       drop index Ix_name
create  Clustered  index Ix_name
on   stuInfo(stuNo)
wilth fillFactor=30  -- 填充因子
go

创建非聚集索引
create NonClustered  Ix_name2
on stuInfo(stuName)
wilth fillFactor=30
go

查询索引:
select * from stuInfo(index=Ix_name) where writeeExam BETEEN 60 AND 80

----视图

视图:是一张虚拟表,它是存储在数据库中的一条sql语句

创建视图:
create view v_name
as
select 姓名=stuName from stuInfo
go

查询视图
select * from v_name

数据库中的(表)与(视图)的名不能相同,因此查询表的视图语法与查询普通表的语法一样


==========================第六章(存储过程)===================================

存储过程的分类:1.系统存储过程 2.用户自定义过程

系统存储过程:  sp_helptext :显示未加密的存储过程,视图,触发器的文本

  sp_help :查看表的所有信息
  sp_helpConstraint:查看表的约束
  exec:  执行存储过程,在存储过程中可加可不加

------------------自定义存储过程:---------------------------------

create proc[edure] p_name
@name varchar(20),@age int    ----参数不可以不加declear ,也可不写这二个参数(就成了无参存储过程)
as
sql语句
go

create proc p_name
@name varchar(30)='admin'    --默认值
,@age int =20
  as  sql语句
  go

  exec p_name @int=50 ---姓名采用默认值

--------------调用自定义存储过程--------------------------------

exec p_name         ---无参
exec p_name        ----默认值
exec p_name 'admin',30                 ---有参
exec p_name @age=20,@name='admin'    -----有参

--------------带输出参数的存储过程 ----------------------
create proc  p_name
@notPassSum int OUTPUT,
@wri int =60,
@lab int =60
as

  go

  declare @sum int
  exec p_name @sum OUTPUT,64
  print @sum
1. 如果当前的存储过程中有输出参数,则必须赋值(如果上面的代码)
2. 如果存储过程有输出参数,则执行这个存储过程时必须用一个变量接这个输出参数
3. 存储过程也以表的形式存储在服务器上,在sysobjects表中

--------------存储过程示例-------------------------------

create proc AA
@sum int OUTPUT
as
set @sum=3+5
go

declare @sum1 int   (如果有多个输出参数,则可接指定的输出参数:@sum=@sum1)
exec AA @sum1 out put
print @sum1

------------------删除存储过程----------------------------

drop proc AA

--------------自定义抛出错误---------------------------

Raiserro('及格线错误,请指定0-100之间的分数',16,1) 1:状态1-127
return 从当前程序退出


======================================第七章(触发器)=================================

(this讲解“触发器和二张特殊表”.有记事本文件)

触发器是一种特殊的存储过程,能够在多表之间执行特殊的业务规则(机制)
触发器是对表进行,增、删、改、时会自动执行的存储过程
触发器有三种类型:insert,delete,update

每个触发器都有2张表:Inserted 和 Deleted 表,存在内存中,只读,等触发器的工作完成了,就删除

------创建Insert触发器-------

create Trigger  t_name
on Info
for Insert
As
     Decaler @type char(4),@outMoney
     select @type=transType,@outMoney=transMoney from INSERTED
     if(@type='去取')
        update band set currentMoney=currmentMoney-@outMoney
     else
         update band set currentMoney=currentMoney+@outMoney
      if @@Error<>0
         begin
print '交易失败'
Rollback TransAction
                return
          end
       print '交易成功!交易金额:'+convert(varchar(20),@outMoney)
go


---------创建update触发器---------

create Triger t_name
on bank
for update
as
       declare @beforeMoney Money ,@alterMoney Money
       select @beforeMoney=currentMoney from deleted
       select @alterMoney=currentMoney from inserted
       if ABS(@alterMoney-@beforeMoney)>20000
               begin
   print '交易失败,'
  Raiserror('自定义错误,i不能超过二万元',16,1)
   Rollback  TransAction
end
go

---------创建delete触发器--------

create Trigger t_name
on pub_Info
for delete
As
if(select pub_id from deleted=100)
  begin
      print '不能删除为100的信息'
      Rollback TransAction
  end



创建的触发器存在sysobjects表中

-------删除触发器----

drop trgger t_name



--------------------------Sql的经验--------------------------------------------------------------------------

如果要替换Sql中的字段里部分值: 
update titles from set imageFile=replace(imageFile,'image',image/')

sql中三张表连接:select * from a inner join b on (a.关联列=b.关联列) inner join (a.关联列=c.关联列)



A. 重命名表
下例将表 customers 重命名为 custs。

EXEC sp_rename 'customers', 'custs'

B. 重命名列
下例将表 customers 中的列 contact title 重命名为 title。

EXEC sp_rename 'customers.[contact title]', 'title', 'COLUMN'

分享到:
评论

相关推荐

    Linux学习笔记-超全总结值得一看(带标签目录)- 154页.pdf

    【Linux学习笔记】这篇超全总结涵盖了Linux操作系统的基础知识,特别是关于命令行的使用和快捷键,以及一些桌面环境下的快捷操作。以下是笔记中的主要内容: 1. **LINUX常用操作命令**: - `clear`:清空终端屏幕...

    linux学习笔记,linux命令整理

    在Linux操作系统的学习中,掌握命令行的使用是至关重要的。...总的来说,Linux学习笔记是一个全面了解和掌握Linux系统操作的基础教程,涵盖了从基本命令到高级管理的诸多方面,对提升Linux技能有很大帮助。

    c及linux基础培训笔记--超详细

    - 替换命令:`:s/old/new/g`全局替换,`:#,#s/old/new/g`在特定行范围内替换。 这些内容构成了C语言和Linux基础的初步学习框架,包括了硬件管理、文件系统操作、命令行交互以及文本编辑器的使用,是进一步深入学习...

    Linux学习笔记(强悍总结值得一看)

    【Linux学习笔记】这篇文档是针对Linux初学者和运维人员的全面学习资料,涵盖了大量实用的Linux命令和操作技巧。以下是一些主要知识点的详细解释: 1. **常用命令**: - `clear`: 清除终端屏幕内容。 - `history`...

    Linux大神的学习笔记

    【Linux学习笔记】 在Linux操作系统中,掌握常用命令和快捷键是提高效率的关键。下面将详细介绍这些内容: 1. **命令行快捷键** - `Ctrl + a/Home`: 将光标移动到命令行的开始。 - `Ctrl + e/End`: 将光标移动到...

    Linux学习笔记(强悍总结值得一看).pdf

    这篇文档是一个关于Linux的详细学习笔记,涵盖了Linux中常用命令、终端快捷键、系统操作快捷键、文件管理快捷键、关机和重启命令以及grep和管道符的使用方法。下面将对这些知识点进行详细介绍。 首先,文档介绍了在...

    linux学习笔记 linux学习笔记

    ### Linux学习笔记知识点详解 #### 一、Ubuntu 8.04 学习入门 **知识点1:系统安装与磁盘格式化** - **安装前准备**:在安装Ubuntu 8.04之前,需要准备好相应的安装介质(如光盘或USB启动盘),并确保计算机硬件...

    Unix 的一些学习笔记

    ### Unix 学习笔记知识点详解 #### 一、登录与远程访问 - **登录服务器**:使用提供的公账号 `openlab-open123` 登录服务器。 - **Telnet访问**:通过 `telnet 192.168.0.23` 并使用个人账号 `sd08077-you0` 进行...

    Linux学习笔记.pdf

    以下是一些在Linux学习笔记中提到的关键知识点: 1. **命令行快捷键**: - `Ctrl + a`: 快速移动到命令行的开头。 - `Ctrl + e`: 移动到命令行的末尾。 - `Ctrl + l`: 清除屏幕内容,等同于`clear`命令。 - `...

    Linux学习笔记大家请看

    【Linux学习笔记】 在Linux操作系统的学习中,掌握常用命令是至关重要的。这些命令不仅能够帮助我们高效地管理和操控系统,还能提升我们的运维能力。以下是一些基础和实用的Linux命令及快捷键: 1. **终端快捷键**...

    Linux全方位学习笔记

    【Linux全方位学习笔记】 在IT行业中,掌握Linux操作系统是一项重要的技能,这不仅因为Linux在服务器领域占据主导地位,还因为它提供了高效的工作环境和强大的命令行工具。本篇笔记将深入探讨Linux常用命令以及相关...

    linux学习笔记

    ### Linux学习笔记知识点详解 #### 一、常用命令与快捷键概述 《Linux学习笔记》是一份详尽的文档,旨在帮助Linux初学者快速掌握基本操作,并为有经验的用户提供复习材料。本文档覆盖了从终端快捷键到文件管理器...

    2009 达内Unix学习笔记

    q或Ctrl+C 退出; /字符串 从上往下查找匹配的字符串; ?字符串 从下往上查找匹配的字符串; n 继续查找。 四、退出命令 exit 退出; DOS内部命令 用于退出当前的命令处理器(COMMAND.COM) 恢复前一个命令...

    linux shell Sed学习笔记

    ### Linux Shell Sed 学习笔记:深入理解与实践 #### Sed 概览 Sed(Stream Editor)是一种功能强大的文本处理工具,适用于Unix/Linux环境下的流编辑操作。它能够读取输入流(如文件或标准输入),进行模式匹配、...

Global site tag (gtag.js) - Google Analytics