ACCP学习旅程之----- SQL Server(第三章 SQL数据管理)

数据库也需要一套指令集,能够识别指令、执行目前标准的指令集就是SQL
   SQL语言已经成为关系数据库的标准语言
   使用程序设计语言(如C, java)在程序中,可以组织SQL语句发给数据库,数
   据库再执行相应的操作,利用返回值,获得程序需要的数据。
   T-SQL(Transat-SQL)是标准SQL的加强版
1¥)T-SQL的组成
$ DML(数据操作语言):
用来查询、插入、删除和修改数据库中的数据,如:select\insert\update\delete
2$ DCL(数据控制语言):
用来控制数据库组件的存取许可、存取权限等,如:grant\revoke
3$ DDL(数据定义语言):
用来建立数据库、数据库对象和定义其中的列,大部分是以Create开头的命令,如:creat table\creatview\drop table等
4$ 还有变量说明、内嵌函数以及其他的命令(以后讲或有时间自学)
2¥)T-SQl中的条件表达式和逻辑运算符
1$ 条件表达式
1.。 常量:由一个或多个字母、数字或符号(!、#、@等)组成
         字母和datetime需要用引号括起来,而二进制字符串和数
         字常量则不需要。
2.。 一元运算符:即C中的单目运算符,注意“~”表示补数运算????????
3.。 二元运算符:即C中的双目运算符
     注意字符串连接运算符“+”和比较运算符之一的“=”,与算术运算符形式相同,但是用的地方不一样,要区分还来。
4.。通配符:即SQL中代替或限定其他一个或多个字符的运算符
‘-’:代替语句中的一个字符  如:A like ‘c_’
      即A只能含有两个字符,其中第一个为c,第二个任意
%:代替任意长度的字符串 如:B like ‘co_%’
      即B前两位必须为co,第三位为任意字符,第三位后为任
      意字符串
[]:括号中所指定范围内的一个字符,如:c like ‘9wo[1-2]’
      即c前三位已定,第四位只能选定1-2数字字符

    又如:[1,2,4] 只能在1,2,4三数种选一
          [1-3]  只能选1-3种的数字
          [1-3,4] 只能选1-3中的数字,或者4
[^]:不能取括号所制定范围内的任意一个字符
     如: d like ‘9wo[^1-2]’
     即:d前三位已定,第四位不能是数字1-2中的数。
Like关键字:是像的意思,所有通配符都需与like一起使用
总例:
要求表中电话号码输入格式为11位的手机号
TelCode like ‘13[5-9][0-9]…….[0-9]’

要求身份证号是18位整数,第一位不是零,最后一位可能是数字也可能是X
Number like ‘[1-9][0-9]……[0-9,X]’
2$ 逻辑表达式
包括:not/and/or
执行优先级:非与或
In关键字用来限制范围 如下面的逻辑表达式:
not (付款方式=‘信用卡’) or (信用卡in (‘牡丹卡’,‘金穗卡’,
     ‘龙卡’,‘阳光卡’))
即:先执行not,如果付款方式不是信用卡,表达式逻辑结果已出,
    则or后边的语句不执行;
    如果付款方式是信用卡,要使逻辑值为真,只能是in中的某种卡
3¥ 使用SQL插入数据
1.。单行插入
语法: insert  [into]  <表名>  [列名]  values (<列表值>)
Into 可省略
列名可选,如省略,则须输入全部列,用逗号分隔,这时列表值数必须与列数相等。
(标识列除外)(如没有写该列值,且可为空,则默认为null)
如有多个列表值,需用逗号分隔
每次都必须插入一整行,如允许为空写NULL;
如有非空约束,则必须输入数据。
每个数据的类型、精度、小数位、格式等都须满足检查约束
不能为标识列指定值(如有则在输入时忽略,不用写)
字符型的列用单隐号括住,而二进制数和数字字符直接写
DEFAULT关键字的使用
指定列名为有默认约束的列,则该列的插入值须用DEFAULT关键字代替
2.。插入多行
1.。。先建表后插入(insert/select/from 组合)
例如:insert into TongXueLu (Name,Add,Emai)
      select Sname,SAdd,SEmail
      from Student
如上例要插入的对象表TongXueLu必须先建好
Select 是查询关键字 insert是插入关键字
从表Student中查询出数据的个数、顺序、数据类型都必须与TongXueLu表中的设置一致。
此方法仅进行新数据的插入,不传递原表中的约束
同时,原表中的标识列也是不传递的。)
如果输入错误想恢复原表的自动增长的初始值咋办,只能重新建表嘛?是的
2.。。插入同时建立新表 (select into/from 组合)
例如:
select Student.Sname, Students.SAdd, Students.SEmail
into TongXueLu
from Students
此方法在新建表中插入数据,同样也不传递原表的约束
此方法的原表中的标识列将传递到新表中。
即:如果在原表中是标识列,新表中还是标识列
如果原表中有标识列,在新表中如何插入?(列表值怎么写?)
在Values输入时忽略标识列,不用输入。
特别注意:
    都不传递约束
    insert into …select…from 结构中,查询结果不传递标识列
    select …into…from 结构中,查询结果传递标识列

3.。向新表中插入一个标识列

在新表中建立标识列并建新表语法:
select identity(数据类型,标识种子,标识增长量) as 列名
into 新表
from 原始表
即在新建表中插入了一行标识列
(既然是插入标识列,何来原始表,哦,可能是还要插入其他数据,原始表是给他们用的,对吗?)
显然是的!

应用到列表值中的语法:
select Student.Sname, Students.SAdd, Students.SEmail, identity(int,1,1) as StudentID
into TongXueLu
from Students

即:通过查询Students表中的各列,将查询结果插入新建表TongXueLu中,同时插入一列标识列。

4.。通过UNION关键字合并数据后插入(也需先建表)
    用于将两个不同的数据或查询,组合成一个新的结果。
    同时,要求不同行的数据个数、顺序、数据类型都一致。
    如: insert Students (Sname,SGrade,SSex)
         select ‘张可’,7,1 union
         select ‘李洋’,3,0 union
         select ‘陈刚’,4,1

   1)此方法中不能使用default,如有默认约束列,也须录入。
   2)此方法中Select不是查询命令,而是语法关键字
   3)注意,最有一行没有“union”
   4)运行结果与insert…..select结构一样。
4¥ 使用T-SQL更新数据

    语法:  update <表名> set <列名=更新值>  [where <更新条件>]

    1)Set后面可以跟随多个列的更新值,逗号分隔
    2)Where可选,如没有,则所有行都按要求更新
        这会导致数据丢失
    3)运行结果可能更新一行数据,或多行数据,也可能不更新。
5¥ 使用T-SQL删除数据

    语法: Delete From <表名>  [Where <删除条件>]

    1)如果存在主外键,则应先删除主键表数据,再删除外键表数据
    2)delete后面不能出现字段名,因为要删就是整行删
6¥ 使用Truncate Table删除数据
    用来删除表中所有行,保留表结构和约束,功能类似于没有where的delete
    语句

    Truncate Table比Delete执行速度快,而且使用的系统资源和事物日志文件
    更少

    Truncate Table 不能用于有外键约束引用的表(外键表),这种情况下,
    使用Delete
7¥ 重要注意

    在建立关系时,谁被引用,谁就是主键表(主表)。

    引用的一方,引用来的那一列,称为外键引用某某某

    手动设置关系时(非关系图),应在从表(外键表)中进行设置。

    如果使用关系图,应从外键表(要引用人家的那个表)象主键表(被引用
    的表)拖拽。
第四章 查询数据(一)
1¥ 查询和记录集
1$ 查询

   查询是针对表中已经存在的数据进行的“筛选”
 
   数据表在接受查询时,逐行选取是否符合查询条件的数据行。
2$ 记录集

   把所有的符合查询条件的数据行组织在一起,形成另一个类似表的结
   构,就是查询的结果,称作“记录集”(RecorderSet)。

   记录集实际上也是一个表,所以可以对记录集(查询结果)进行再次
   查询
2¥ 使用Select语句进行查询
    语法:   select <列名>
             from <表名>
             [where <查询条件表达式>]
             [order by <排序的列名> [ASC 或 DESC]]
1$ where及条件是可选的,不限制则返回所有行
2$ order by 用来对查询结果排序 默认值ASC升序;如需降序,则为DESC
3$ 查询所有的数据列,使用通配符“*”代表所有的列,
                     没有where代表查询所有行
   select * from 表名
4$ 查询部分行或列(条件查询)
查询部分列:Select后面列举列名,逗号分隔,
            可以加as和别名(别名无引号),as可省。

如: select scode [as] 学号,sname [as]姓名,saddress [as] 地址
     from students
     where saddress=‘河南新乡’
查询部分行:使用where子句进行搜索条件限制(略)
5$ 改变列的名称
 

 

你可能感兴趣的:(sql,数据库,职场,休闲,Accp)