• 数据库简单说就是行、列组成的二维表
  • 把列称为字段、每一行数据成为记录,能标识每一行的唯一字段称为主键
  • 查询数据表时,索引可以提高查询速度,但是索引同时会降低新增和更新数据时的速度,应为还要更新索引。
    • 创建部门表DepMent
create table Depment(id nvarchar(20),depname varchar(20) not null,primary key(id))
    • 创建员工表Person,并与Depment表建立外键关系
create table Person(ID int identity(1,1),Name varchar(20),Age int,DepID nvarchar(20),primary key(id),foreign key(DepID) references DepMent(id))
    • 在部门表和员工表新增记录
insert into Depment(id,depname) values('','技术部')
insert into Person(Name,Age,DepID) values('王某某',18,'')
    • 由于Person表ID为自增长所以新增时不用主动写入,而且需注意外键关联字段,如果部门表‘002’不存在,则不能关联‘002’值
    • 同时关联表删除时,需要先删除外键关联表,也就是Person表,在删除Depment表,因为Depment表被依赖,所以不能直接删除
  • 创建表时设置字段默认值
    • create table Student(Name varchar(20),EnterSchoolData datetime default '2019-03-29')

      default定义默认值

    • 定义联合主键
    • create table ComputerInfo
      (
      ID varchar(20),Name varchar(20),TypeInfo varchar(20),primary key(ID,Name) --直接写联合主键字段
      )

      联合主键数据执行效率会降低,不利于主外键关联关系的建立,一般不建议用。

    • 新增字段
alter table computerinfo Add DTime datetime
    • 删除已有字段
alter table ComputerInfo drop column typeinfo
    • 完全删除数据表
    • drop table Student
    • 如果建立了外键关系,比如A表指向B表,建立外键关系,直接删除B表是错误的,需要先删除A表,再删除B表

    • 插入语句
    • insert into ComputerInfo(ID,Name,DTime) values('','Jon','2019-03-26')
      
      insert into ComputerInfo values('','Tomm','2019-03-27')
      
      --批量插入数据
      insert into 表明(字段,,,,)
      select 1,2,3,4,
      union all
      select 1,2,3,4
      ......
    • 两种写法都可以,第一种可读性更高。

    • 修改语句
    • update ComputerInfo set Name = 'Slion'
    • 删除语句

    • delete from ComputerInfo
    • 备注:所有新增、修改、删除,如果有外键关系,必须先解除依赖,或者外键必须存在情况下才能进行,否则就报错。

    • 查询检索数据表

      • 设置别名 select Name as 姓名 from 表名

      • 对于不需要的查询的字段,尽量减少用*全部查询

      • where条件查询,and、or

      • 聚合函数:
          • max(字段) 求最大值
            min(字段)  求最小值
            count(字段)或count(*) 求有多少条数据
            avg(字段) 求平均值
            sum(字段) 求总和                                                                                             
        • 注意:count(字段)如果字段为空,则不统计;count(*)仍然要统计为空的字段
    • 排序
    • select * from ComputerInfo
      order by Name asc,DTime desc
      --先按Name升序,再按DTime降序
      --升序asc默认可以不写,不写默认为升序
    • 数据过滤

      • 单字符匹配:用下划线__代表前两个字符为任意字符,第三个字符为n的Name

      • select * from ComputerInfo
        where Name like '__n'
      • 多字符匹配:查询任意长度,最后一个字符为n的Name
      • select * from ComputerInfo
        where Name like '%n'
      • 结合使用:查询任意长度,但倒数第二个字符为m,最后一个为任意字符的Name

select * from ComputerInfo
where Name like '%m_'
    • 集合匹配,注意,集合匹配原则是全表扫描,效率会降低
select * from dbo.Depment where depname like '[ab]%' --[]里面或关系,标识第一个字符是a或b时长度不限的匹配条件

select * from dbo.Depment where depname like '[^ab]%' --[]里面或关系,标识第一个字符不是是a或不是b时长度不限的匹配条件
    • 空值问题
    • --查询Name为null的
      select * from Person where Name is null --查询Name不为null的
      select * from Person where Name is not null

      非运算:可以用Not,也可以用!  <>

    • --非运算查询:查年龄不等于17的所有结果
      select * from Person where Not(Age = 17)

      in关键字查询

    • --in 或关系,只要匹配的就都查出来
      select * from Person where Age in(17,18)

      区间检测:优先使用Between And 因为比直接写等号效率要高

    • --查询年龄>= 17 and <= 20的数据,包含两边值本身
      select * from Person where Age between 17 and 20

      分组Group By

      • 分组语句必须在where条件后使用,分组语句可以有多个,但是要和查询语句查询字段进行结合,对于分组语句中没有的,还必须和聚合函数结合使用
      • select DepID as '部门', MAX(age) as '年龄'  from Person
        where not(Age=16)
        group by DepID,Age
        order by Age desc

        先按DepID分组,在按年龄分组,然后按年龄倒序排序,得到不同部门的年龄最大值

    • Having语句使用
    • select DepID as '部门', MAX(age) as '年龄'  from Person
      where not(Age=16)
      group by DepID,Age
      having Age > 18
      order by Age desc

      在group by子句后执行条件过滤行为,having中用到的关键字必须是grouy by中已经指定的分组关键字,否则报错

    • 利用子查询进行分页
    • select * from
      (
      select ROW_NUMBER() over(order by id) as num ,* from Person
      ) as rowTab
      where rowTab.num between 2 and 3

      去重关键字 distinct :此关键字去重时要针对字段,否则的话对整行去重有一个字段不同就认为不同,然后就不去重了

  1. 联合字符union:将多个查询集合联合到一起,成为一个集合,union会去重查询,将两个表中完全一样的只保留一个记录
    1. 联合查询,查询字段必须数量一样
    2. 列与列对应类型必须一样
  2. select id,Name from person
    union
    select id,depname from Depment

    union all  完全保留两个查询结果集

  3. 数值函数:
    1. ABS :求绝对值
    2. Power :求幂次方
    3. SQRT :求平方根
    4. RAND :随机生成一个数
    5. CEILING :舍入到临近的最大整数

    6. FLOOR:舍入到临近的最小整数
    7. ROUND(m,n):m表示数组,n表示精度
    8. select CEILING(2.33)  --结果:3
      select FLOOR(-3.1) --结果:-4
      select ROUND(2.3,1),ROUND(-10.6,0),ROUND(2.6,0),ROUND(37.2,-1)
      --2.3精度为1,保留一个小数
      ---10.6精度为0,保留到整数位
      --37.2精度为-1,表示要从十位位置开始四舍五入,结果为40

      SIN(数值参数):求正弦值

    9. COS(参数):求余弦值
    10. ASIN(参数):求反正弦值
    11. ACOS(参数):求反余弦值
    12. TAN(参数):求正切值
    13. COT(参数):求余切值
    14. select PI()*3 as p :PI()求圆周率PI
    15. SIGN:求结果符号:select SIGN(10-11):如果结果大于0返回1,小于0返回-1,等于0返回0,可用于对计算结果的判定
  4. 字符串函数
    1. select LEN('abcdefg')  --求字符串长度
      
      select LOWER('ABC'),upper('abc')  -- 大小写转换
      
      select LTRIM('  ab'),RTRIM('ab   ')  --截取字符串左边空格,右边空格
      
      select SUBSTRING('abcd123456',2,3)  --从第二个位置开始截取长度为3的字符,返回新字符串,注意,索隐从1开始
      select CHARINDEX('z','abcdefg')  --查询参数2是否包括参数1,如果有,返回所在位置,位置从1开始,如果没有返回0
      
      select LEFT('abcdefg',2),RIGHT('abcdefg',3) --从左侧截取2个字符,--从右侧截取3个字符
      
      select REPLACE('hello world','rl','ok')  --用参数3替换参数1所包含的参数2的值,得到新值
      
      select ASCII('a')  --得到对应ASC||码
      select char(98) --得到一个数值对应的ASC||符 select DIFFERENCE(name,SOUNDEX('to')) from Person --soundex()查询相似值,比如姓名发音相似的
  5. 日期时间类型
    1.  

      select GETDATE() --获取当前时间:年月日时分秒
      
      select CONVERT(varchar(10),GETDATE(),102) --单独获取年月日
      
      select CONVERT(varchar(10),GETDATE(),108) --单独获取时分秒
      select DATEADD(day,-8,getdate())  --当前日期减去8天的日期
      
      select DATEDIFF(day,'2019-03-16',getdate())  --计算两个日期差额,后面日期减去前面日期
      
      select DATENAME(DD,getdate())  --计算日期是星期几,其中第一个参数是显示格式问题,可以留意
      select DATENAME(year,getdate()) -- 计算日期的任一部分是多少,第一个参数灵活配置
      select DATEPART(dayofyear,getdate())
      select DATEPART(DD,getdate()) --也是可以取日期某一部分
  6. 类型转换
select cast('123' as int)  --将前面字符转换成数值

select CONVERT(int ,'123')  --将字符转换为数值

 7.空值处理:

select ID,ISNULL(name,'a') as n,Coalesce(Name,DepID,'b') as nn from Person --判断name是否为空,如果为空则用a替换显示,不为空则返回name,isnull和coalesce道理一样都是控制检查

select nullif(name,depid) from Person --判断两个参数是否等价,相等返回第一个参数类型,否则返回第一个参数值

8.CASE逻辑处理

--case逻辑处理

--用法一
select name,
(case age
when 17 then '十七岁'
when 18 then '十八岁'
else '大于十八岁'
end) as agestr
from Person --用法二 select name,
(case
when age > 20 then '二十以上'
when Age > 18 then '十八以上'
else '小于十八'
end
)
from Person

SqlServer数据库《基本》的更多相关文章

  1. PowerDesigner从SqlServer数据库中导入实体模型

    PowerDesigner从SqlServer数据库中导入实体模型 时间 2013-06-28 10:26:34 CSDN博客 原文  http://blog.csdn.net/sxycxwb/art ...

  2. 批量解密SQLSERVER数据库中的各种对象的工具dbForge SQL Decryptor

    批量解密SQLSERVER数据库中的各种对象的工具dbForge SQL Decryptor2.1.11 之前写过一篇文章,使用redgate公司的SQL PROMPT工具,但是不太方便 SQLPRO ...

  3. JAVA使用JDBC技术操作SqlServer数据库执行存储过程

    Java使用JDBC技术操作SqlServer数据库执行存储过程: 1.新建SQLSERVER数据库:java_conn_test 2.新建表:tb_User 3.分别新建三个存储过程: 1>带 ...

  4. SQLServer数据库监控代码

    SQLServer数据库监控代码: creation_time, total_worker_time, last_worker_time, max_worker_time, min_worker_ti ...

  5. SQLServer数据库转换成MySQL数据库

    由于工作需要,系统原先的SQLServer数据库要转换成MYSQL数据库,所以这两天就一直在查阅这方面的资料.最开始,我尝试从SQLServer中导出SQL文件,然后导入到MYSQL数据库中,发现报错 ...

  6. ASP.net分别连接SQLserver数据库与连接Access数据库精英版

    -------------------------连接access2003 字符串------------------------- Provider=Microsoft.Jet.OLEDB.4.0; ...

  7. (转)对SQLSERVER数据库事务日志的疑问

    本文转载自桦仔的博客http://www.cnblogs.com/lyhabc/archive/2013/06/10/3130856.html 对SQLSERVER数据库事务日志的疑问 摸不透SQLS ...

  8. 将DBF文件导入Sqlserver数据库

    项目中的问题:用户选择N个dbf文件导入sql2005数据库,由于每年dbf表结构都在变化,所以在sql2005中根本就不存在,需要每年根据dbf的结构自动建表.(文章来自http://blog.cs ...

  9. 采用Hibernate框架的研发平台如何能够真正兼容Oracle和sqlServer数据库

    都说Hibernate框架的使用可以很容易的让你的研发平台支持多种不同类型的数据库,但实践表明,这里的“容易”,是相对的. 想让研发平台支持多种数据库,并不是一件简单的事,也可以这么说:并不是只要使用 ...

  10. 怎样将Sqlserver数据库转成mysql数据库

    手上有一个网站之前是用asp.net做的,所使用的数据库是sqlserver,现在打算用PHP+MYSQL架构.因原来的站点有一定排名,直接改版的话,会导致产生很多错误页,网站排名和收录结果要恢复过来 ...

随机推荐

  1. VMware联网问题

    VMware 服务启动优化当虚拟机连不上网,或不显示ip时,先查看vm服务是否启动.控制台运行:services.msc 以下为改为手工启动:1.VMware 服务自动启动影响计算机启动速度,再此对V ...

  2. Ubuntu下安装配置ScrumWorks

    1) 安装JDK6 Ubuntu默认的是OpenJDK,而ScrumWorks不支持使用OpenJDK哦,一次必须装个Oracle的JDK6   2) 下载安装Mysql5 http://dev.my ...

  3. Hadoop权威指南文摘

    第1章 初识Hadoop 1.1 数据!数据! 1.2 数据的存储与分析 HDFS实现数据的存储,MapReduce实现数据额分析与处理 1.3 相较于其他系统的优势 MapReduce是一个批量查询 ...

  4. QML的默认属性default property

    qml中,普通的属性,需要添加属性名称,属性内容,如 color: “red” 默认属性则可以直接书写,去掉方括号,在写重用的QML组件式比较有用,例如将一个QmL外部资源封装好,内部具体的item, ...

  5. C# 集合的使用List<T>的使用

    C# List<T>用法 所属命名空间:using System.Collections.Generic; List<T>类是  ArrayList 类的泛型等效类. 该类使用 ...

  6. IE6,7,8 CSS HACK

    1.区别IE和非IE浏览器CSS HACK代码 #divcss5{ background:blue; /*非IE 背景藍色*/ background:red \9; /*IE6.IE7.IE8背景紅色 ...

  7. MongoDb安全配置:简单的身份认证

    mongod默认启动不加任何参数时,是没有身份认证的,任何人都可以登录上进行任何操作 启动时添加--auth可以使用身份验证模式 使用mongod -f mongod.conf配置文件启动时,配置文件 ...

  8. Delphi 按Esc快捷键退出程序的简单方法

     第一种方法: 在窗体上放一个按钮: 1>.设置按钮的Cancel属性为True: 2>.在按钮的点击事件中写: procedure TForm1.btn1Click(Sender: TO ...

  9. Arduino SPI + SPI Flash芯片W25Q80BV

    W25Q80BV是台湾华邦电子(Winbond)生产的8M-bit串行flash芯片.主要特性有: 工作电压:2.5 ~ 3.6 V 功耗:读写(active)时4mA,低功耗(power-down) ...

  10. (原创)用Microsoft Chart Controls(MSChart)实现曲线图,并支持拖动放大到秒

    Microsoft Chart Controls(简称MSChart)控件,给图形统计和报表图形显示提供了很好的解决办法,同时支持Web和WinForm两种方式. MSChart 在.NET 4.0自 ...