SQL课堂笔记--数据操纵和函数

       2017.11.17
  
七.数据的插入,更新和删除:
 1.向表中插入数据:
  使用insert语句插入
  传统的insert语句基本语法格式:
   insert into 表名 values (值1,值2,...)

  也可以指定说要插入数据的列:
   insert into table_name (列1,列2,...) values (值1,值2,...)
  (参数into是个可选关键字)

 例1:向表中插入数据:
  (1):添加一行到所有列中
  (2):添加一行到部分列中
  (3):插入多行数据怎么办?
   1.insert into 表名 values (值1,值2,...)重复书写
   2.SQL server2008中提供新方法-----行值构造器
    insert into student (sno,sname,ssex,sage,sdept,class) values
      ('95011','欧阳一','女',18,'软件','3'),
      ('95012','欧阳二','女',18,'软件','3'),
      ('95013','欧阳三','女',18,'软件','3')
   3.使用select从句中插入:
    insert into table[(字段1,字段2,...)]
     select value1,value2,...[from table1]
    或者:
     insert into table2 select * from table1
   例:
    insert into student select '95011','欧阳一','女',18,'软件','3'
           insert into student select '95012','欧阳二','女',18,'软件','3'
    或者用union/union all
   insert into student select '95011','欧阳一','女',18,'软件','3'
    union/union all
         '95012','欧阳二','女',18,'软件','3')


 2.更新表中数据:
   update语句更新
  update 表名 set 列名
 
  例2:
   update student1 set sdept='动漫' where sno='95012'
 3.删除数据:
  delete 表名 [where 条件]
  
  例3:删除student1表中sno为95015同学的记录
   delete student1 where sno=95012


 项目二:SQL语法
  
         1.常量:字符串,二进制,整形,日期,实型,货币
  2.变量: 
   1.全局变量:由系统提供,在名称前加上两个"@"符号区别于局部变量
   2.局部变量:用一个"@"
  
 练习:
  1.查询SQL Server的版本信息:
   select @@version
  2.查询本地服务器名称:
   select @@servername
  3.查询当前使用的语言名称:
   select @@language 
  
  3.变量的使用:
   1.用declare语句声明变量:
     declare {@ 局部变量名 数据类型}[,...n]
    声明两个变量@v1,@v2,数据类型为char(8),int
    declare @ v1 char(8),@v2 int
   2.set语句赋值:
    set @局部变量=表达式
     给两个变量@v1,@v2赋值后输出: 
      declare @v1 char(8),@v2 int set @v1='welcome' set @v2=100 select @v1,@v2 表格形式输出
      declare @v1 char(8),@v2 int set @v1='welcome' set @v2=100 print'v1为:'=@v1  消息形式输出
               print @v2
  4.注释语句
   行注释
   块注释
  
 二.变量,运算符与表达式 

 三.批处理与流程控制:
   1.顺序语句begin...end语句
    begin {SQL语句|SQL语句块} end
   
   2.if...else...语句:
    在学生成绩管理系统中查看张立成绩,如果成绩最低分成绩为60以上,显示成绩情况,否则显示文本'成绩不理想':
     declare @m int
     select @m=min(grade)
      from student,sc
      where sc.sno = student.sno and sname='张立'
     if(@m>=60)
      select student.sno,sname,cno grade
      from student,sc
      where student.sno=sc.sno and sname='张立'
     else
      print'成绩不理想'
   3.while语句
     while<布尔表达式>
     {SQL语句|SQL语句块}
     [break]
     {SQL语句|SQL语句块}
     [continue]
       continue:程序跳过continue后面的语句回到循环的第一行命令
       break:跳出循环

    例:计算1到10之间的奇数之和
     declare @i tinyint,@sum int
     set @sum=0
     set @i=0
     while @i>=10
     begin
      select '总和'=@sum
      break  
     end  
     else
      begin  
       set @i=@i+1
       if(@i%2)=0
        contiue
      else
      set @sum=@sum+@i
      end
     end
   4.1.case语句:
     case 表达式
      when 表达式 then 表达式
      when 表达式 then 表达式 
      when 表达式 then 表达式[...n] 
     [else 表达式]
     end    
    
    例:判断学生成绩等级,90-100分的显示为'优秀',80-90显示为'良好',70-80为'中等',60-70为'及格',其他为'不及格'
      select sno,cno,grade,
       'rank'=case grade/10
        when 10 then '优秀'
        when 9 then '优秀'
        when 8 then '良好'
        when 7 then '中等'
        when 6 then '及格'
        else '不及格'
        end
      from sc


    2.搜索case语句: 
      select sno,cno,grade,
       'rank'=case
        when grade>=90 and grade<=100 then '优秀'
        when grade>=80 and grade<90 then '良好'
        when grade>=70 and grade<80 then '中等'
        when grade>=60 and grade<70 then '及格'
        else '不及格'
        end
      from sc

练习:

use students
go
--一,向student表中INSERT INTO …VALUES添加记录信息为:(95009,'欧阳静','女',18,'软件',3)
 insert into student values(95009,'欧阳静','女',18,'软件',3)
 
--二,在提供的students数据库中新增一张与student表结构一样的student1表。
--三,在student1表中用行值构造器插入以下数据:
insert into student1 (sno,sname,ssex,sage,sdept,class) values
  (95011,'欧阳一','女',18,'软件',3),
  (95012,'欧阳二','女',18,'软件',3),
  (95013,'欧阳三','女',18,'软件',3),
  (95014,'欧阳四','女',18,'软件',3),
  (95015,'欧阳五','女',18,'软件',3)
--四、在提供的students数据库中书写SQL代码进行查询:
--1、 书写SQL代码创建表class,表的结构如下:
 use students
 go
 create table class
 (
  classID int primary key,
  className char(20),
  specialityID char(10),
  specialityName char(20),
  EntranceYear int,
  Monitor int
  )
--2、使用带SELECT从句的INSERT SQL语句 ,向class表中添加记录,记录信息为:(1,'16计算机01班','a01','摄影',2019,95030),(2,'16计算机01班','a02','开发程序',2019,95032)
insert into class values(1,'16计算机01班','a01','摄影',2019,95030)
insert into class values(2,'16计算机01班','a02','开发程序',2019,95032)
 
--3、使用带SELECT从句的INSERT SQL语句 ,向class表中部分字段添加一条记录,字段为:(2008001,'08计算机控制','a01',2008,0733001)
 insert into class (classID,className,specialityID,EntranceYear,Monitor) values
 (2008001,'08计算机控制','a01',2008,0733001)


--五、在提供的students数据库中书写SQL代码进行查询:
use students
go
--1、将所有课程的学分增加1分。
update course set ccredit=ccredit+1

--2、将计算机专业的所有学生的选修课成绩降低5%。
update sc set grade=grade*0.95 where sno in(select sno from student where sdept='计算机')

--3、删除选修课成绩低于60分的记录。
delete sc where grade<60

--4、用Union操作符把student表与student1表的结果集合并。
--select 语句1 union [all] select 语句2
select sno,sname,ssex,sage,sdept,class from student  union all select sno,sname,ssex,sage,sdept,class from student1

--六、使用SSMS编写并运行SQL 脚本 。
--1、查询SQL Server的版本信息。
select @@version
--2、查询本地服务器的名称。
select @@servername
--3、查询当前使用的语言的名称。
select @@language
--4、在学生成绩管理系统中查看王明的成绩。如果王明的平均成绩为70分以上,显示文本“成绩理想”,否则显示文本“成绩不理想”。
declare @m int
 select @m=avg(grade)
 from student,sc
 where sc.sno = student.sno and sname='王明'
if(@m>=70)
 print '成绩理想'
 else
 print'成绩不理想'

原文地址:https://www.cnblogs.com/TuringShine/p/7850792.html