SQL Server T-SQL语句

一、语句操作的基本方法

1、选中执行。

2、注释的方法‘--’。

二、数据类型

整数:int,bigint,smallint

小数:float,decimal(长度,精度)

字符:char(n),varchar(n)

text——大文本。

逻辑:bit 0,1(true/false)

二进制类型:binary 8000,image

日期:datetime(1753-1-1~9999,12,31),smalldatetime(1900.1.1--2079.6.6)

数据类型的作用:建表,SQL编程

三.、数据库的创建

1.创建数据库

create database MyDB
on primary
(
Name=MyDB,
FileName="D:\MyDB.MDF"
), --创建主数据文件叫MyDB,放在D盘中.
(
Name=MyDB1,
FileName="E:\MyDB1.NDF"
), --创建次数据文件叫MyDB1,放在E盘中.
log on
(
Name="MyDB_Log",
FileName="E:\MyDB.Log"
) --创建MyDB的日志文件,放在E盘中.

2.打开数据库
use MyDB
use master

3.修改数据
alter database MyDB --修改MyDB数据库
add file --添加file文件
(
Name="MyDB2", --创建次数据文件叫MyDB1.

FileName="C:\MyDB2.ndf" --将MyDB次数据文件放在C盘中.
)

4.删除数据库

drop database mydb

5.查看数据库的信息
sp_helpdb mydb
6.重命名数据库
sp_renamedb ‘NewMyDB‘,‘MyDB‘

三、表格的创建

1.创建表格
create table Login
(
UserName varchar(20) primary key, --建主键.

primary key(Code,ChengWei)--联合主键
Password varchar(20) not null, --不能为空值.
Name varchar(20) unique, --建惟一键.
Sex bit default 1, --建默认约束(缺省约束).
Birthday datetime check(birthday>‘1900-1-1‘) --建检查约束.
)

注意:

primary key与unique key都是唯一性约束。但二者有很大的区别:

1.作为primary key的1个或多个列必须为NOT NULL,

如果建表时此列设为NULL,在增加PRIMARY KEY时,列自动更改为NOT NULL。

而unique key约束的列可以为null,这是primary key与unique key最大的区别。

2.一个表只能有一个primary key(单列或多列,多列主键叫联合主键),但可以有多个unique key。

2.修改表格
alter table Login Add 列名(Money)变量类型 (float) --添加
alter table login drop column Money --删除
alter table Login alter column Money Real --修改

3.删除表
drop table Login

四、数据库设计的三大范式

第一范式:(1NF):列的原子性,每一列不能再往下拆分

第二范式:(2NF):针对于联合主键,其中某些列只和一个主键列有关系违反了第二范式。

第三范式:(3NF):该表中,不能出现与主键间接关联的列,只能有直接关系的列

关键字:
primary key :主键
identity:自增长
references表名(列名):外键关系

三、范式应用举例

 第一范式(1NF):要求关系模式R的所有属性都是不可分的基本数据项,指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。

例如:比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式,如下表所示。

用户信息表

编号  姓名 性别  年龄  联系电话 省份  城市  详细地址
1 张红欣  26 0378-23459876  河南  开封  朝阳区新华路23号
2 李四平  32 0751-65432584  广州  广东  白云区天明路148号
3 刘志国  21 0371-87659852  河南  郑州  二七区大学路198号
4 郭小明  27 0371-62556789  河南  郑州  新郑市薛店北街218号 

上表所示的用户信息遵循了第一范式的要求,这样在对用户使用城市进行分类的时候就非常方便,也提高了数据库的性能。

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)首先要求数据库表中首先必须有主键。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。其次要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。采用投影分解法将一个1NF的关系分解为多个2NF的关系,可以在一定程度上减轻原1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。

比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键,如下表所示。

订单信息表

订单编号  商品编号  商品名称  数量  单位  商品价格
001 1 挖掘机 1 1200000¥ 
002 2 冲击钻 8 230¥
003 3 铲车 2 980000¥

这样就产生一个问题:这个表中是以订单编号和商品编号作为联合主键。这样在该表中商品名称、单位、商品价格等信息不与该表的主键相关,而仅仅是与商品编号相关。所以在这里违反了第二范式的设计原则。

而如果把这个订单信息表进行拆分,把商品信息分离到另一个表中,就非常完美了。如下面这两个所示。

订单信息表

订单编号  商品编号  数量 
001 1 1
002 2 8
003 3 2

商品信息表

商品编号  商品名称  单位  商品价格
1 挖掘机 1200000¥ 
2 冲击钻 230¥
3 铲车 980000¥

这样设计,在很大程度上减小了数据库的冗余。如果要获取订单的商品信息,使用商品编号到商品信息表中查询即可。

第三范式3NF是第二范式(2NF)的一个子集,即满足第三范式必须满足第二范式。第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关,即任何非主属性不得传递依赖于主属性。简而言之,就是要求一个关系中不包含已在其它关系已包含的非主关键字信息。(不满足时常采用投影分解法解决)

比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关于客户其它信息(比如姓名、所属公司等)的字段。如下面这两个表所示的设计就是一个满足第三范式的数据库表。

订单信息表

订单编号  订单项目  负责人  业务员  订单数量  客户编号 
001 挖掘机 刘明 李东明  1台 1
002 冲击钻 李刚 霍新峰  8个 2
003 铲车 郭新一  艾美丽  2辆 1

客户信息表

客户编号  客户名称  所属公司  联系方式
1 李聪 五一建设 13253661015 
2 刘新明 个体经营 13285746958 

这样在查询订单信息的时候,就可以使用客户编号来引用客户信息表中的记录,也不必在订单信息表中多次输入客户信息的内容,减小了数据冗余。

时间: 2024-10-06 16:42:53

SQL Server T-SQL语句的相关文章

SQL SERVER 查看SQL语句IO,时间,索引消耗

1.查看SQL语句IO消耗 set statistics io on     select * from dbo.jx_order where order_time>'2011-04-12 12:49:57.580' set statistics io off 2.查看SQL语句时间消耗 set statistics time on      select * from dbo.jx_order where order_time>'2011-04-12 12:49:57.580' set st

连接SQL Server执行SQL语句

public static DataTable GetData() { string Connect = ConfigurationManager.AppSettings["ConnectionString"].ToString(); SqlConnection sc = new SqlConnection(Connect); sc.Open(); SqlCommand cm = new SqlCommand("select * from Department");

SQL Server性能常用语句

查看各表的数据行数 SELECT o.name, i. ROWS FROM sysobjects o, sysindexes i WHERE o.id = i.id AND o.Xtype = 'U' AND i.indid < 2 ORDER BY o.name; 计算数据库中各个表每行记录所占用空间 --SELECT * FROM Employees AS e; CREATE TABLE #tablespaceinfo ( nameinfo VARCHAR(50) , rowsinfo BI

【转载】SQL Server - 使用 Merge 语句实现表数据之间的对比同步

原文地址:SQL Server - 使用 Merge 语句实现表数据之间的对比同步 表数据之间的同步有很多种实现方式,比如删除然后重新 INSERT,或者写一些其它的分支条件判断再加以 INSERT 或者 UPDATE 等.包括在 SSIS Package 中也可以通过 Lookup, Condition Split 等多种 Task 的组合来实现表数据之间的同步.在这里 "同步" 的意思是指每次执行一段代码的时候能够确保 A 表的数据和 B 表的数据始终相同. 可以通过 SQL Se

SQL Server中DML语句要申请的锁

对于select语句: 1.当采用表扫描时,会直接锁定page,而不是锁定具体的某条记录,所以会有这些锁: A.数据库S锁 B.表的IS锁 C.页的S锁 2.当采用索引来查找数据时,会锁定具体的记录,所以会有这些锁: A.数据库S锁 B.索引中page的IS锁 C.索引中page中的key的S锁 D.表的IS锁 E.页的IS锁 F.RID的S锁 3.对于读过的页面,会加一个IS锁. 对于使用的索引,会对key加上S锁,对索引key所在的页面会加上IS锁. 在查询过程中,会对每一条读到的记录或ke

Sql server的Merge语句,源表中如果有重复数据会导致执行报错

用过sql server的Merge语句的开发人员都应该很清楚Merge用来做表数据的插入/更新是非常方便的,但是其中有一个问题值得关注,那就是Merge语句中的源表中不能出现重复的数据,我们举例来说明这个问题. 现在我们有一张表叫T_Class_A,其建表语句如下: CREATE TABLE [dbo].[T_Class_A]( [ID] [int] IDENTITY(1,1) NOT NULL, [ClassName] [nvarchar](50) NULL, [StudentTotalCo

Sql Server中sql语句自动换行

怎么让sql server中的sql语句自动换行呢? 如下图: 工具--选项--所有语言 Sql Server中sql语句自动换行

PowerDesigner反向数据库时遇到[Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句。SQLSTATE = 37错误解决方法

逆向工程中,有时会出现如下错误 ... [Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句 SQLSTATE = 37000 解决方案: 1.选择菜单栏中的Database -> Change Current DBMS ,给DBMS选择SQL Server2005. 2.重新配置ODBC连接,管理工具 -> 数据源ODBC -> 在用户DSN Tab选项中点添加 ->出现创建新数据源的选择框口,拖动滚动条到最下方,选择SQL

SQL Server - 使用 Merge 语句实现表数据之间的对比同步

原文:SQL Server - 使用 Merge 语句实现表数据之间的对比同步 表数据之间的同步有很多种实现方式,比如删除然后重新 INSERT,或者写一些其它的分支条件判断再加以 INSERT 或者 UPDATE 等.包括在 SSIS Package 中也可以通过 Lookup, Condition Split 等多种 Task 的组合来实现表数据之间的同步.在这里 "同步" 的意思是指每次执行一段代码的时候能够确保 A 表的数据和 B 表的数据始终相同. 可以通过 SQL Serv

SQL SERVER 一个SQL语句的执行顺序

原文:SQL SERVER 一个SQL语句的执行顺序 一个SQL 语句的执行顺序 1.From (告诉程序 来自哪张表  如果是表表达式 依旧是如此顺序) 2.Where(条件筛选  谓词筛选 ) 3.Group by(分组) 4.Having(分组  谓词筛选 ) 5.Select (表达式) 6.表达式(开窗函数 聚合函数 等等) 7.Distinct(去重复) 8.ORDER BY 9.TOP/OFFSET-FETCH 原文地址:https://www.cnblogs.com/lonely