sql sever 2008基础知识

       下面是一些总结,如果执行时发现错误,可以查看错误消息进行解决,也可上网查资料

数据库的组成

  主数据文件:有且只有一个,扩展名为.mdf。

  次数据文件:可以没有,也可以有任意个。扩展名为.ndf。

  日志文件:   至少有一个,扩展名为.ldf。

数据库的相关操作:

 1.创建:

  请看代码例子:

create database testone       --创建数据库,名为testone,注意数据库名、数据文件的逻辑名、数据文件的物理名可以各不相同。写的时候最好这样
on
primary(                        --申明主数据文件name='testone',                --主数据文件逻辑名filename='d:\sql server shujuku\testone.mdf',--主数据文件物理名,即在硬盘的位置size=10MB,                    --初始大小maxsize=unlimited,            --最大值,unlimited表示不限制大小filegrowth=1MB                --自动增长
)
log on(                            --申明日志文件name='testone_log',            --日志文件逻辑名filename='d:\sql server shujuku\testone_log.ldf',--日志文件物理名size=1MB,maxsize=unlimited,filegrowth=10%
)
go

   2.查看数据库信息:

  请看代码例子:

exec sp_helpdb 测试           --可以查看数据库数据文件信息

    3.打开:

  请看代码例子:

use testone

   4.修改(右击数据库点击属性也能操作):

  请看代码例子:

alter database testone        --alter,表示改变的意思,modify表示修改
modify name=测试alter  database 测试
add file(name=测试_log02,filename='d:\sql server shujuku\测试_log02.ldf'  --即使该文件不存在,数据库会自动生成的
)alter database 测试
remove file  测试_log2
 

   5.删除:

  请看代码例子:

drop database li

sql  sever中的数据类型:

  常用的数据类型有:

  int    java与之对应的int 类型。

  float  java与之对应的float类型。

  char  一个字符占个字节,空间不足斩断尾部,空间多余空格填充。java与之对应的String类型。

    varchar  一个字符占个字节,空间不足斩断尾部,空间多余不用空格填充。java与之对应的String类型。

  nchar    一个字符占个字节,空间不足斩断尾部,空间多余空格填充。java与之对应的String类型。

    nvarchar  一个字符占个字节,空间不足斩断尾部,空间多余不用空格填充。java与之对应的String类型。

  记忆方法:"var" 表示变的意思,就是空间多余不用空格填充;有"n" 表示一个字符占两个字节

  注意:一个字母相当于一个字符,而一个汉字可以理解为两个字符,也就是说char(2)只能放下一个汉字。

   datetime   java与之对应的可以是java.sql.Date,也可以是string类型,但是要以日期格式。

 表的相关操作:

 1.表的创建:

    语法基本格式:

  create table 表名

  ( 列名  数据类型[(长度)]  [null |not null]  [identity(初始值,步长)] [约束],                                  

     ........                                     

  )

 列名书写习惯:作为主键的应该写在最前头,如果不在最前头或是组合主键,列名为:"列名_pk"。作为外键或是组合外键,列名为:"列名_fk"。

 没写not null 默认表示null,identity表示自增长,不用插入数值。

    约束:

    主键约束:[constraint 约束名] primary key

    外键约束:[constraint 约束名] foreign key references 参照表(参照列)[on delete cascade | on update cascade]

    唯一键约束:[constraint 约束名] unique(列名)

    检查约束:[constraint 约束名] check(检查表达式)

    默认值约束:[constraint 约束名] default 默认值

constraint 表示约束的意思。references表示参考的意思。cascade表示串联的意思,[on delete cascade | on update cascade]表示级联操作。

加上"constraint 约束名"是便于约束之间的区别,便于以后的删除。注意约束名是相对于数据库,而非表,也就是说一个数据库不可能有同样的约束名

约束名命名规范:主键:pk,外键:fk,唯一键:uq,检查:ck,默认:df。例如:表名"成绩",有列名"学号","课程号",

如果让学号做主键,那么命名为:pk_cj_xh,如果让学号和课程号组合主键,那么命名为:pk_cj_xh_kch。

如果这样有命名冲突,查看错误消息,进行合理的编号,如:pk_cj01_xh01。

 如果是组合主键,格式为:[constraint 约束名] primary key(列名1[,...])。

 如果是组合外键,格式为:[constraint 约束名] foreign key(列名1[,...]) references 参照表(参照列1[,...])[on delete cascade | on update cascade]。前提是参照表要有与之对应的组合键。

 如果是组合唯一键,格式为:[constraint 约束名] unique(列名1[,...])。

      请看代码例子:

use 测试
create table xs(学号 char(10) not null primary key,姓名 varchar(20) not null,成绩 smallint not null
)

   2.查看表的信息:

         请看代码例子:

exec sp_help xs       --可以查看表中列的属性和约束等信息

    3.修改表:

  a.修改表名和列名,请看代码例子:

exec sp_rename "cj","成绩表"       --修改表名
exec sp_rename "成绩表.学号","xh"        --修改表中的列名

  b.添加列、修改列的属性、删除列(一个alter table 命令一次只能对表进行一项修改操作),请看代码例子:

     如果你想改变字段的位置,可以通过表的"设计"进行操作

alter table cj            
add 年龄 int not null     --增加列alter table cj      alter column 年龄 int null  --修改列的属性,注意只能修改字段的数据类型和能否为null,identity(初始值,步长),约束都不能操作,
                   --但添加列时候可以操作                                          
alter table cj drop column 年龄 --删除列 注意保证该列没有索引和约束

  c.添加约束和删除约束(没有修改的,删了再添加=修改)(一个alter table 命令一次只能对表进行一项修改操作)

    添加主键约束:

          alter table 表名 

          add [constraint 约束名] primary key(列名1[,...])

    添加外键约束:

          alter table 表名 

          add [constraint 约束名] foreign key(列名1[,...]) references 参照表(参照列1[,...])[on delete cascade | on update cascade]

     添加唯一键约束:

          alter table 表名

           add [constraint 约束名] unique(列名1[,...])

            添加检查约束:

          alter table 表名

          [with nocheck]     --加了这,表示对表中现有的数据不检查,没加,表示会检查。

          add [constraint 约束名] check(检查表达式)    

    添加默认值约束:

          alter table 表名

          add [constraint 约束名] default 默认值 for 列名1[,...]

   删除约束:  alter table 表名  

          drop 约束名

       4.删除表:

      drop table 表名            --注意如果其它表的外键引用了该表,那么就要先删除其他表中引用该表的外键。

                --drop table 命令一次可以删除多个表,表名之间用逗号隔开。

添、删、查、改(如果是字符串类型的加上单引号)

  添:

       1.插入表中所有列的数据:

  代码例子:

insert cj values('小李',100)

      2.插入表中指定列的数据:

  代码例子:

insert cj(姓名) values('力王')

      3.批量插入:

  代码例子:

insert cj values('小李',100),('小王',99)

  改:

  代码例子:

update cj set 姓名='小李' where 成绩=99    --没有where字句,则所有的姓名都为"小李"

  删:

  代码例子:

delete cj where 成绩=99             --没有where字句,则将删除表中所有记录,可以用truncate table 表名 命令,效率更快。

  查:

  代码例子:

select distinct 姓名 as 名字,成绩 as 分数 into 成绩单 from cj    
select top 10  * from cj      --查询表中前十条记录
select top 10 percent * from cj     --查询表前面10%的记录

  解释:distinct 表示过滤掉重复的记录,姓名 as 名字 表示将字段名"姓名" 换成别名"名字",into 成绩单表示生成一个

与cj表结构一样的表,如果是"#into"则表示生成的是与cj表结构一样的临时表,表名为"成绩单",然后将查询的记录插入到该表中。

  查询条件中常用的运算符

   比较:=,!=或<>,>,<,>=,<=   设置多重条件:and,or,not   确定范围[not] between...and...   测试空值 :is[not]null

   确定集合:

    Exists:子查询至少返回一行时条件为true。

    Not Exists:子查询不返回任何一行时条件为true。

    In:与子查询返回结果集中某个值相等。

    Not In:与子查询返回结果集中任何一个值不相等。

    >ANY|some:比子查询返回结果中的某些值大。

   <Any|some:比子查询返回结果中的某些值小。

    >ALL:比子查询返回结果中的所有值都大。

   <ALL:比子查询返回结果中的所有值都小。

   字符匹配,用于模糊查询 [not] like <匹配串>:

  1.%:表示从0~n个任意字符。

  2._:表示单个任意字符。

  3.[]:表示方括号里列出的任意一个字符。

  4.[^]:任意一个没有在方括号里列出的字符。

  排序:order by 子句:ASC(升序),DESC(降序),如:select * from cj order by 成绩 asc

  注意:对于空值,若按升序排,含空值的元组将最后四暗示。若按降序排,空值的元组将最先显示。默认是按升序排列的。

  order by 子句中可以指定多个列,检索结果首先按第一列进行排序,第1列值相同的那些数据行,再按照第2列排序

   字符,汉字,数字都可以排序。order by 子句一般放在最后。

  分组:group by 列名 [having 表达式]子句,该子句放在where子句后面。where是对表内记录进行筛选的,group by 列名 [having 表达式]子句

  表示对筛选的结果进行分组,或者用[having 表达式]对组内记录再进一步筛选。

 如:在xs表中筛选出分数在90分以上,分专业统计出男生和女生的平均年龄及人数,结果按性别排序。

 select 专业,性别,平均年龄=avg(datediff(yy,出生时间,getdate())),人数=count(*) from xs where  分数>90 group by 专业,性别 order by 性别

该语句执行的顺序:1.where  分数>90 2.group by 专业,性别 3.order by 性别

连接查询(这里只讲两个表之间的连接,多表同理)

  内连接:

    select 表名.列名,表名.列名... from 表名1,表名2 where 表名1.列名=表名2.列名   或

    select 表名.列名,表名.列名...from 表名1 join 表名2 on 表名1.列名=表名2.列名

   外连接:

    左外连接:select 表名.列名,表名.列名...from 表名1 left join 表名2 on 表名1.列名=表名2.列名

      外连接:select 表名.列名,表名.列名...from 表名1 right join 表名2 on 表名1.列名=表名2.列名

     外连接:select 表名.列名,表名.列名...from 表名1 full join 表名2 on 表名1.列名=表名2.列名

   子查询:

    例子(在xs表中查询和"刘鑫"在同一专业的所有男同学的信息):

     select * from xs where 性别="男" and 姓名<>"刘鑫" and 专业=(select 专业 from xs where 姓名="刘鑫")

  视图:是基于基表的情况下,进行[连接]查询所得到的一张虚表。可以通过视图进行查询数据,在没有限制的情况下对视图进行修改数据,相对应的基表也会变动,同样基表修改数据,视图也会发生改变。

  创建:

  create view 视图名

  [with encryption]             --进行加密,那么点击"设计"和用"exec  sp_helptext  试图名" 就没用了

  as             --exec  sp_helptext  视图名 表示查看视图定义信息

  select 语句

  [with check option]            --如果加了它,视图创建好后,对视图的insert,update操作得遵循当初创建视图是select语句where语句中的条件。要是不遵循的话,就会出错。如果没加它,不用遵循当初创建视图是select语句where语句中的条件

  inset 注意点:

  由于视图只引用表中的部分字段,所以通过视图插入数据时只能给视图中引用的字段的赋值。而那些表中并未引用的字段,必须知道在没有指定取值的情况下如何填充数据,因此视图中未引用的字段必须具备下列条件之一:

 1. 该字段允许空值,2.该字段有默认值,3,自增长。

  查看视图定义信息:    exec  sp_helptext  视图名

  视图的修改:跟创建差不多,只是用这个名字而已,alter view 视图名 [with encryption] as select 语句 [with check option]

    视图的删除drop view 视图名1,视图名2...            --一次可以删除多个视图

   索引(索引的排序是按照升序排序的):

    1.索引的作用:加快数据查询,加快表的连接、排序和分组工作。

    2.建立索引的一般原则是:a.对经常用来搜索数据记录的字段建立索引。

                b.对表中的主键字段建立索引

                 c.对表中的外键字段建立索引

                d.对查询中用来连接表的字段建立索引

                e.对经常用来作为排序基准的字段建立索引

        3.索引的分类:聚集索引和非聚集索引、唯一索引(索引列中的值具有唯一性)和非唯一索引(索引列中的值不具有唯一性)、单列索引和多列索引(复合索引)(一共有2*2*2=8种)

         解释:聚集索引和非聚集索引的区别:首先它们都发挥了索引的作用,但聚集索引的排序即记录在存储在磁盘的排序(我们在表中看到的记录的顺序其实记录插入的顺序,不是存储顺序)。所以说,一个表只能有一个聚集索引,但可以有多个非聚集索引。当表建立了主键约束,如果表中没创建索引,SQL会自动在主键字段建立聚集索引。

     索引的创建(先建立聚集索引,再建立非聚集索引):

    create [unique(唯一)] [clustered(聚集索引) |nonclustered(非聚集索引)] index 索引名 on 表名 (字段名[,...])

   索引的查看:exec sp_helpindex 表名

  索引的删除:drop index 表名.索引名[,...]

     注意:该命令不能删除由主键约束或唯一键创建的索引,这些索引必须通过删除主键约束或唯一键约束,由系统自动删除。

      触发器(DML触发器):

    创建:

    create trigger 触发器名

    on   {表名|视图}

    [with encryption]

    {for|after|instead of} {[insert][,][update][,][delete]}

    as

    条件判断语句

    SQL语句

    解释:for|after 是同一个意思,表示先对表或视图执行添、删、改等操作,然后再执行条件判断语句,再执行SQL语句。

    而instead of 则是先执行条件判断语句,再对表或视图执行添、删、改等操作,而不用执行SQL语句

       查看触发器的定义信息: exec   sp_helptext  触发器名,当然加密的不能看到

       触发器的修改:其实就是用原来的名字,换用alter命令就可以了 

     触发器的删除:drop trigger  触发器名

  下面来介绍下SQL中常用的函数:

   聚合函数:

    avg([distinct]表达式)    求平均值

    sum([distinct]表达式)    求和

    max([distinct]表达式)    求最大值

    min([distinct]表达式)     求最小值

      count ([distinct]表达式|*)           求个数

      注意点:解决count distinct多个字段的方法:

    Distinct的作用是用于从指定集合中消除重复的元组,经常和count搭档工作,语法如下

    COUNT( { [ ALL | DISTINCT ] expression ] | * } )

    这时,可能会碰到如下情况,你想统计同时有多列字段重复的数目,你可能会立马想到如下方法:

    select count( distinct col1 , col2 , col3 , .......) from table

    但是,这样是不允许的,因为count是不能统计多个字段的,虽然distinct是可行的。

    有种比较直接的方法就是把消除重复后在统计查询:

    select count(*) from (select distinct col1 ,col2 , col3 from table)A

     日期时间函数:

      getdate()       返回服务器的当前系统日期和时间

      datediff(日期元素,日期1,日期2)       返回两个日期间的差值并转换为指定日期元素的形式

      year(日期)          返回年份(整数)

      month(日期)        返回月份(整数)

      day(日期)           返回日(整数)

      getutcdate()      返回表示当前UTC时间的日期值

 

      日期元素及其缩写和取值范围

                日期元素                        缩写                           取值

           year          yy          0~9999

           month         mm          1~12

             day          dd           1~31

         day  of  year        dy            1~366

           week            wk          0~52

         weekday           dw          1~7

          hour                               hh          0~23

         minute                             mi          0~59

  

 

转载于:https://www.cnblogs.com/lipengsheng-javaweb/p/4006086.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JadClipse eclipse反编译插件

A.下载JadClipse&#xff0c;http://jadclipse.sourceforge.net/wiki/index.php/Main_Page#Download&#xff0c;注意选择与eclipse版本一致的版本&#xff0c;我用的是Eclipse3.4&#xff0c;所以选择下载版本net.sf.jadclipse_3.3.0.jar B.下载Jad&#xff0c;http://www.…

c语言的class,Objective-C中Class的本质

类(class)和元类(meta-class)底层都是 objc_class 结构体的指针&#xff0c;内存中就是结构体。struct objc_class {Class _Nonnull isa OBJC_ISA_AVAILABILITY;#if !__OBJC2__Class _Nullable super_class OBJC2_UNAVAILABLE;const char * _Nonnull name OBJC2_UNAVAILABLE;lo…

Sublime 资源汇总

2019独角兽企业重金招聘Python工程师标准>>> 《sublime text2使用经验》&#xff1a;里面插件的推介和使用、截图。《Sublime Text 2 入门及技巧》&#xff1a;技巧&#xff0c;可惜是4年前的东西了。《Sublime Text 2安装插件方法详解》&#xff1a;介绍了使用 GoA…

c汇编语言程序框架培训,[010][x86汇编语言]学习用户程序的编写(c08.asm)

源程序来源加载程序c08_mbr.asm用户源程序&#xff1a;增加注释;;文件名&#xff1a;c08-2.asm;文件说明&#xff1a;用户程序;创建日期&#xff1a;13:08 2018/5/23;----------------------------------------------------------------------SECTION header vstart0 ;定义用户…

白--留白与游戏设计

我所谓之白,非颜色之白,乃设计之白,思想之白也。 我对白的理解得益于对日本传统艺术与现代设计的些许了解&#xff0c;前几日偶得日本设计业前辈原研哉先生的一本书《白》。阅后颇有所思,不禁联想至游戏行业。白&#xff0c;也可称间或空。是日本艺术创造中一直沿承的一种创作思…

文件共享服务器搭建

详细需求描述1、网络拓扑图如下&#xff1a;2、利用虚拟机实现网络拓扑&#xff0c;要求如下&#xff08;1&#xff09;虚拟机环境使用hostonly&#xff08;2&#xff09;服务器要求&#xff1a;安装Widnwos Server 2008 R2操作系统内存要求&#xff1a;750MB安装五块物理SCSI磁…

当c语言老师遇到网络崩溃,网络教学搞不定?工科教授来支招!

新学期已经到来但是由于新冠病毒肆虐我们不得不在“线上会面”网络远程教学颠覆了传统课堂模式的同时&#xff0c;也为教员们的教学工作带来极大的挑战。想想看&#xff0c;面对一个计算机屏幕滔滔不绝地讲上90分钟&#xff0c;确实需要大量的准备工作。网课平台怎么选&#xf…

[20150629]12c物化视图刷新Out of place

[20150629]12c物化视图刷新Out of place.txt --11G物化视图刷新有1个参数atomic_refresh. --如果为false&#xff0c;采用的方式是truncate&#xff0c;再使用/* append */ 提示insert。这样redo最少&#xff0c;但是刷新期间无法访问。 --如果为true&#xff0c;采用的方式是d…

VBScript学习笔记 - 数组

数组声明 dim var(10) 数组声明指出了数组名和索引(index)的最大值。数组索引从0开始。因此该语句创建一个11个元素的数组&#xff0c;其中值为var(0), var(1), …和var(10) 遍历数组的所有元素 可用for each循环&#xff0c;不需事先指明数组中元素的个数。如果不想处理每一个…

android logo在线生成工具,在线生成logo

在线生成logo是一款为大家提供logo设计的手机服务软件&#xff0c;平台上面的logo设计都是基于AI技术提供的&#xff0c;然后再搭配上一些创意&#xff0c;平台上面会根据用户的行业及喜好来提供6款的成品logo&#xff0c;用户可以从中选择一款自己最喜欢的进行定稿&#xff0c…

在JS函数中执行C#中的函数、字段

1、调用字段 cs文件的代码&#xff1a; public int id 0;protected void Page_Load(object sender, EventArgs e){id 2;} View Codejs页面的代码&#xff1a; function CheckFunc() {alert("<% id%>");} View Code2、调用函数&#xff1a; 在JS函数中访问或执…

任意阶幻方(魔方矩阵)C语言实现

魔方又称幻方、纵横图、九宫图&#xff0c;最早记录于我国古代的洛书。据说夏禹治水时&#xff0c;河南洛阳附近的大河里浮出了一只乌龟&#xff0c;背上有一个很奇怪的图形&#xff0c;古人认为是一种祥瑞&#xff0c;预示着洪水将被夏禹王彻底制服。后人称之为"洛书&quo…

android防谷歌滑动效果,谷歌是如何做到这一点的?在Android应用程序中滑动ActionBar...

事实上&#xff0c;有一种方法可以做到这一点。即使没有实施自己的ActionBar。看看hierachyviewer吧&#xff01;(位于工具目录中)还有的DecorView&#xff0c;并且LinearLayout作为一个孩子。这LinearLayout包含ActionBar其他内容和其他内容。所以&#xff0c;你可以简单地应用…

thinkphp框架使用心得

接触的第一个PHP框架就是TP&#xff0c;在使用的了一段时间后就放弃了&#xff0c;说实话TP的弊端挺多&#xff0c;之后又接触laravel框架&#xff0c;慢慢的就爱上laravel这个框架了。这段时间由于公司的原因&#xff0c;又不得不使用thinkphp框架,在这里分享下使用心得。 TP框…

计算本年 本月 本周的起始日期

html: <table><tr><td align"right" width"120px"> 销售时间区间:</td><td><select id"ddlChoiceDate" name"ddlChoiceDate" runat"server" onchange"SelectChange(this.value);&quo…

Android查看真机布局,android-外部存储

外部存储&#xff0c;个人理解是在app作用域之外存储&#xff0c;就是数据没有和app做关联&#xff0c;app卸载后&#xff0c;它依旧存在而不再是之前手机本身存储空间和sd卡的区别&#xff0c;现在安卓手机已经不携带可拆卸的SD卡androidManifest.xml 需要写入读写权限简单布局…

用自己的ID在appstore中更新app-黑苹果之路

由于之前套用了别人的镜像&#xff0c;在appstore中更新XCode时总要输别人id的密码&#xff0c;id还不能改。网上有的说要把XCode删掉&#xff0c;然后再用自己的ID更新&#xff0c;找到另外一个方法&#xff0c;更简单&#xff1a; 1.打开引用程序目录 2.找到Xcode&#xff0c…

如何打开pr_debug调试信息

转载&#xff1a;http://blog.csdn.net/helloanthea/article/details/25330809 以DMA的调试为例&#xff0c;先来看看一个pr_debug函数调用 pr_debug("%s: %s (%s)\n",__func__,chan ? "success" : "fail",chan ? dma_chan_name(chan) : NULL)…

android国籍组件,android组件化之路

问题&#xff1a;实际业务变化快&#xff0c;而工程内各个功能模块耦合度太高&#xff0c;不能对功能模块进行快速方便地拆分或组装。团队共同开发中&#xff0c;可能一个文件同时被多人修改&#xff0c;导致每次更新提交代码都需要消耗大量时间去merge代码。每次修改&#xff…

UNIX环境编程学习笔记(21)——进程管理之获取进程终止状态的 wait 和 waitpid 函数...

lienhua342014-10-12 当一个进程正常或者异常终止时,内核就向其父进程发送 SIGCHLD信号。父进程可以选择忽略该信号,或者提供一个该信号发生时即被调用的函数(信号处理程序)。对于这种信号的系统默认动作是忽略它。 在文档“进程控制三部曲”中,我们讲的第三部曲是使用 wait 函…