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
sql sever 2008基础知识的更多相关文章
- sql server 2008 基础知识
一.配置管理器 1.管理服务 使用配置管理器可以启动.停止.重新启动.继续或暂停服务. 服务器和客户端网络协议 2.SQLSMS 简介:SQLSMS是一个集成环境,用于访问.配置.管理和开发SQL ...
- 恒大威武!关于SQL的一些基础知识整理回顾
首先的首先,恒大威武! 开始正题. 关系代数: 目前主流的关系型数据库,是建立在关系代数的基础上的,即他的数学支撑是关系代数. 关系代数主要包括如下几个二目运算:并运算union.交运算interse ...
- SQL SEVER 2008中的演示样例数据库
SQL SEVER 2008数据库是什么我就不说了,我在这里分享一下怎样学习SQL SEVER 2008数据库,假设是对数据库或是SQL SEVER 数据库全然陌生或是不熟悉的人来说,建议看看一些视频 ...
- [实战经验][SQL Sever 2008 (R)解决方法累积
SQL Sever 2008 (R)的安装图解及配置 http://www.soft6.com/v9/2009/jcsj_1030/115821.html 产品密钥,选择“输入产品密钥”,输入:PTT ...
- java连接到sql sever 2008_java基础学习
(sql sever 2008跟sql sever 2005装载JDBC驱动的方法是一样的) 一.加载驱动的文字教程 1.准备相关的软件(Eclipse除外,开源软件可以从官网下载) <1> ...
- SQL Sever 2008性能分析之执行计划
一直想找一些关于SQL语句性能调试的权威参考,但是有参考未必就能够做好调试 2的工作.我深信实践中得到的经验是最珍贵的,书本知识只是一个引导.本篇来源于<Inside Microsoft SQL ...
- 数据库和SQL面试题基础知识(持续更新)
数据库方面基础知识复习 常问小问题: 一.like查询大小写问题: sql查询结果去重 SELECT distinct name FROM 表:平均数avg 一.like查询大小写问题: ①用bina ...
- SQL Sever 2008 R2版本添加Northwin数据库错误解决
一.环境: OS: Windows 7 ProfessionalSQL Server 2008 R2 二.示例数据库Northwind下载(mdf) Northwind 三.附加数据库: 打开Micr ...
- SQL Server 数据库基础知识
数据库(Database)是由文件管理系统发展起来的,按照数据结构来组织.存储和管理数据的建立在计算机存储设备上的仓库. 特点: 尽可能小的冗余度. 具有较高的数据独立性和易扩 ...
随机推荐
- MeteoInfoLab脚本示例:AMSR-E卫星数据投影
AMSR-E(http://nsidc.org/data/amsre/index.html)数据中的Land3数据是HDF-EOS4格式,投影是Cylindrical_Equal_Area.这里示例读 ...
- java字符流与字节流的区别是什么
java中字符流与字节流的区别: 1.字节流操作的基本单元为字节:字符流操作的基本单元为Unicode码元. 2.字节流默认不使用缓冲区:字符流使用缓冲区. 3.字节流通常用于处理二进制数据,实际上它 ...
- .net 手动建DataTable 获取DataTable列名 修改DataTable 列的顺序
//创建 表 DataTable tables = new DataTable(); //添加 创建 列 //第一列 DataColumn cums = new DataColumn(); cums. ...
- Nginx常见错误解决办法
报错: nginx: [error] CreateFile() "C:\mytools\nginx-1.8.1/logs/nginx.pid" failed (2: The sys ...
- django—路由相关
django不同版本的路由配置 django 2之前,配置urlpatterns使用的是url方法 django 2之后,配置urlpatterns使用的是path方法 path与url的区别: ur ...
- C#数据结构-线程安全队列
什么是线程安全? 答:线程安全是多线程编程时的计算机程序代码中的一个概念.在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意 ...
- 学习写简单的RPC框架demo
学习实现一个简单的RPC框架. 工程主要目录分级结构: rpc-common: 公共基础包,能力提供包 rpc-provider: 服务提供者 rpc-consumer:服务消费者 rpc-servi ...
- sqlsugar入门(1)-初识sugar正确打开sugar的方式
1.实例化DB public static SqlSugarClient GetDB(string s) { var ssc = new SqlSugarClient(new ConnectionCo ...
- 初始化vue项目
1.创建vue项目命令 vue init webpack deaxios # 使用脚手架创建项目 deaxios(项目名,随便取得) cd deaxios # 进入项目 npm install axi ...
- testNG优雅的使用注解让你的测试项目开发更高效!
testNG大部分是通过xml配置测试类和监听类 但是这种方法就像传统的spring框架一样需要引入大量的xml配置信息,而且在各层之间也需要通过new对象传递.如果testNG能使用注解注入bean ...