zoukankan      html  css  js  c++  java
  • T-SQL DBMS

    dbo 默认架构schema

    从一个数据库操作另个数据库的表的时候,要select * from 数据库.dbo.biao          

    表名前面的dbo是一个默认架构schema,一个架构还有多张表,用来区分表格数据优化,权限管理

    分离附加

    数据库文件粘贴复制时,要先在sql中分离关闭数据库连接。

    数据库附加时,右击任务附加,只会显示mdf,自动加载ldf文件。

    注意:附加时长出的问题,一般出权限问题,就在mdf和ldf文件右击属性安全用户添加everyone 并在权限中对勾上

    设计 编辑前200行

    元祖:一行数据称为

    08改不了,05可以改。列名字的更改:工具-选项-design-阻止更改

    类型

     

     

    sql联级丛书

    二进制,image

    字符串nvarchar()char() nchar varchar

    var可变长度,没有就是固定长度 nvar  后面可以max2^31-1 存储的位置不同了

    比如char(非unicode字1-8000)  char(10)    10个字节   10个数字1234567890  5个字 ABCDE  如果12存入后面就会自动补全有8个空格存入,因为固定。varchar也是字节数,但是不会自动补全

    varchar比char检索效率高,数据优化,char需要 去掉空格。 存储的时候的char比varchar高,空间固定  手机号可以

    n就是unicode编码,unicode字符一个字符占2个字节

    nchar(unicode字1-4000) unicode字符一个字符占2个字节 nvarchar()   里面的1 2 3数字也占2个字节,因为也是unicode编码

    date08时候加进来 少用

    常用日期类型datetime,当成字符串来赋值2015-12-25 00:00:00.000

    钱money 当成整数或者小数。

    int smallint  real float

    bool类型,设计器只能用true和false,SQL语句也可以,同时也可以用0  1代表,最后显示也是false和true   

    主键Primary Key:一,区分不同的元祖(一条数据) 设计-右击列设为主键

    改之后,要把修改后的选项卡关闭,然后再处理,因为选项卡保存的是改之前的状态。

    业务主键:比如name  身份证号 是一个数据的一个部分。 业务主键可能重复

    逻辑主键:单独加上的一列,一般为数字,也有字符串GUID   自动增长   设计 id-是否标示  是增量1 种子1

    外键张表间关联Foreign Key,在外表的一列是主键的这列。

    主键表含有主键的表

    外键表含有外键(一列的数据在别的表中是主键,在此表这列就是外键)的表

    SQL大小写一样,字符串用‘’单引号  双引号报错

    DCL数据库控制语言 GRANT授权某用户 REVOKE取消授权    权限控制

    DML数据库管理语言 增删查改

    DDL 数据库定义语言建库 建表

    use 数据库 go

    自动增长的那列,不用赋值。

    语句分号;结束    -- 注释      /* ssss*/

    delete from biao where id=

    子查询:单值子查询和多值子查询

    独立标量(单值)子查询:就是一个select返回一个值。例如id。将这个查询出来的一个值,作为另个select查询的where条件。通常两张表。

    独立多值子查询:返回多个值,例如id。这些值在另一个查询中当做where条件。因为返回多个值,所以where条件中在这些值中不能用”=“,而是用“in”。

    字段:一张表中,要留空余的字段和和isdel是否删除的字段。

    --解释 选中tap键向右移动

    = like in is

    where条件注意项:

    1>2

    多条件,括号的优先级调配。用(条件)and or(条件)

    处理日期:查询某年某时间的匹配项。有一些函数,来处理。

    当前时间getdate()year(时间字段) month(时间) day(时间)得到对应的年月日

    例如:(year(getdate())-year(时间)=20)

    时间:select id from biao where DATEDIFF()

    模糊条件 like   not like  会全表扫描,木有优化。

    %:任意个 任意字符

    _任意一个字符

    []任意一个在括号的字符    假如值匹配_   用[_]

    [^]任意一个不是括号内的字符

    where (name like ”李%“) and (sex='女')

    between and

    in

    带条件查询的条件补充

    多少多少之间的用between and

    select * from 表 where 字段 between 18 and 25   包含18和25

    查询id 为 1 2 3的数据   not in

    select * from 表 where 字段 in (1,2,3)

    as:就是一数据的名字1,字段 as 别名(as可以省略) 2,别名 = 字段  注意别名在前

    select可以显示数据和运算结果。

    select ‘李可’  例如:select ‘李可’ ,* from 表   会在没行数据前都加上‘李可’

    select getdate(), 2+3  

    从左到右运算,变量。同一级别 select 1  +'1'     显示2

    top order by放在select 后面,其他字段前面,后面不要加”,“top(50),括号可以省略    --desc倒序 asc 默认升序

    1,筛选排名前多少或者多少百分比2,把这些前多少数据进行排序

    select top (100) * from where sex='女' order by fenshu desc

    select top (100) percent * from where sex='女' order by fenshu desc

     数据库是基于集合概念,就有无规律特征,top 100数据 结果不一定完全一样,而MSSQL按照存入数据的顺序来筛选。

    结果集:数据有一个数据集概念,通过没有order by查询得到的结果,成为结果集

    游标cursor:只有order by的时候。不具备一些集合的特征,派生表  表表达式 公共表表达式 视图 存储过程 结果集 子查询 都不能使用游标,因为游标不是集合

    1,使用order by查出的的数据就不是(集合),有了顺序的结果,成为游标。

    top 和order by连用时候是结果集

    筛选和排序()。因为排序有可能是一个无序的结果。比如:一张表有10个10岁的,top 5个时候order by年龄 ,可能从这10个中随机选,所以是无序的。所以是结果集。

    2,查询数据的一种索引方式。

    distinct 去除重复的数据,多集(有重复的数据)转换成单集,但是并木有修改数据库的东西和top一样是”修饰”字段的。

    select distinct 字段 from 表 

    *代替字段不好的原因:

    1,当数据库更新的时候,假如多了几个字段,但是依然是*,就会出现错误

    2,从优化的角度,查询这张表的话会先从数据库中查询这张表有多少字段,然后再查询。多了一步。不优化。

    聚合函数:汇总的意思。select 聚合函数代替*了做汇总。总数,平均,最大,最小。一般起个名字 as哦!

    MAX(字段)   MIN(字段) AVG(字段)  SUM(字段)  COUNT(*)  只是一行值。所以select 聚合后不能再跟一列出现多行数据字段。

    avg(分数)   不会计入null的个数和值,不考虑null。

    count(分数)不会计入个数,但是count(*)会计入

    null  

    1,select中isnull(字段,123)如果数据为null  则被替换成123,有数据就不替换。数据类型一定相同。

    select isnull(字段,123)from

    2,在where 条件中 不能用=  而是用is null 或者is not null

    在sql中三值逻辑  不是true的话,可能是false 还可能是null

    =

    >

    <

    >=

    <=

    <>(!=)不等于

    !>(<=)不大于 小于等于

    !<(>=)不小于 大于等于

    select *from 表名 where sex <> '女'   可能为男,也可能为null

    null表示不知道,不论加减乘除都为null

    等价,永远不会有数据 

    select * from 表名  where 字段 = null

    select * from 表名  where 字段 <> null

    group by数据分组  和order by 位置一样放在最后      查各班人数

    一般和聚合函数搭配使用。查询按某个字段分组后汇总信息。

    select banji , count(*)  from biao where sex = ‘女’ group by banji   因为为汇总信息只有一行,所以select后不能是含有多行数据的字段。

    执行顺序

    from选择数据源

    where对数据源筛选

    group by对筛选后的数据汇总

    having 对汇总的数据再进行筛选

    select后执行顺序distinct top

    order  by得到集合或者cursor

    所以不能在where使用count(*)

    查询名字出现2次或者两次以上的女人

    select name ,count(*)

    from biao

    where  sex='女' and count(*)>=2         有对应的分组后的的数据再进行筛选就是having

    group by name

    having count(*)>=2

    having用来分组后对数据筛选  和top 位置不一样也是筛选

    筛选 where  having  top  位置不同哦

    ADO.NET是一组类库

    FWGH SDTO

    SQL-Sever执行逻辑流程  书籍:SQL-Sever技术内幕2005存储内幕  深入理解SQL-Sever2008

    服务器上的DBMS数据库管理系统 里面几个引擎,这几大引擎通力合作。 

    sql语句-->DBMS(关系引擎(语法解析器(检查语法报错)-->优化器--> 执行器得到编译好的sql语句)--  存储引擎 )-->只经过FROM WHERE数据文件-->DBMS(得到set虚拟表(也是结果集)group having->set虚拟表-->distinct top-->set虚拟表-->set或者cursor-->应用程序)

    事务:sql语句每个动作都是一个事务

    每个过程都会得到一张set 虚拟表(结果集),供作下一过程的数据源 

     UNION

    多集 联合结果集

    UNION并集INTERSECT交集 EXCEPT差集   两个select之后的两张表的合并   看联级丛书

    union和union all(并集中可以包含重复数据(两行数据完全一样叫做重复,叫做多集),效率高于union)

    select '平均' as ‘说明’,avg(fen_01), avg(fen_02), avg(fen_03) from biao where id=1          --起列明用第一个表的as后列名字

    union all                                                                                                                    --允许多集

    select '总分', sum(fen_01), sum(fen_02), sum(fen_03) from biao where id=1                   --数据类型要相同

    说明 fen_01 fen_02 fen_03
    平均      
    总分      

    insert  select 

    插入数据的时候可以用 insert  select ,此时的select 代替了values

    insert into 表(列) select 查询    --一次性插入多个数据,将一个结果集插入

    insert into 表(列) select 列     --每次只能插入一行数据     这个歌select是一个显示方法,得到的结果集,所以可以插入一行的数据

    一次性插入多数据(用union)

    可以使用union将结果集联合后得到一个联合结果集插入。

    2008以前2005的用法,08的替代方法是“表值构造函数”  

    values (值),(值),(值)   --这些值是一个虚拟的表,操作是”原子性“的,不可分割。如果给这个表添加约束,只要有一个插入的某个值不符合这个约束,这张虚拟表都不能插入。

    insert into biao(列1,列2,列3,)                                              --select * from (values(1,值),(2,值),(3,值))as biaoming(列名,列名)

    select 列1,列2,列3 union

    select 列1,列2,列3 

    字符串函数  日期函数  类型转化函数 

    都是用于select 之后用于显示。select nchar(25105),LEN(N'12345'),datalength(N'12345'),lower(‘abDc’),upper('abDc') ,ltrim('   abc '),rtrim('  abc   ')

    --我 转换成字符  5字符个数(默认去掉里面的空格不算)  10  字节长度   unicode编码(系统函数) 10 小写 大写 去掉左空格 右面空格   ltrim(rtrim('  adc '))去掉左右空格

    substring(字符串,开始位置,长度)不是从0开始,而是从1开始。

    日期时间函数 year()  month() day()

    dateadd(部分,增量,时间)在这是时间上的那个部分增多少select getdate(),dateadd(YY,10,getdate())   得到也是个时间yy--mm-dd

     yy  mm  d getdate()同时运行,时间一样

    datediff(单位,开始时间,结束时间)  得到时间长度

    select datediff(d,‘2015-1-16 09:00:00.000’,'2015-6-25 12.00.00.999')        hour minute millisecond

    类型转换函数 比如在union中数据类型要相同

    1cast(数据 as 类型)    

    2convert(类型 数据)

    针对时间类型,有第三个参数控制格式  select convert(nvarchar(10), getdate(),20)

    查联机丛书上的类型格式代码 一般都是110  客户端 拿到这个时间,只需split一下就好

  • 相关阅读:
    初始化注解和销毁注解
    MySQL、SQLServer、Oracle 分组排序
    mybatis 中SQLServer 和 mysql 模糊查询 不同点
    SpringBoot学习之logback.xml 配置指定包或类输出至单独的日志文件中
    类比 RocketMq 和 淘宝消息服务:
    SVN提交文件失败:系统找不到指定路径
    官网下载MySQL 并安装
    Java 变量参数传入方法,方法结束后传入的值
    03-类与对象课后作业(1)
    02方法-课后动手动脑
  • 原文地址:https://www.cnblogs.com/leee/p/4226382.html
Copyright © 2011-2022 走看看