因为快要期末了,今天抽时间来更新一下SQL Server,方便一下大家,顺顺利利期末不挂科 2.基本概念 3.数据库文件有三类(主要记住后缀) 4.数据库标识符 注意的是 1.以“@”符号开始的标识符表示局部变量或参数 2.以一个数字符号“#”开始的是表示临时表或过程, 3.以双数字符号“##”开始的标识符全局临时对象 如“##gzb”则是全局临时表4.全局变量:系统提供,以@@开头,只读的,也就是说由系统赋值,我们取值,全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值 5.ER图(考试大题可能会让你画图) 6.三大范式 例子 7.T-SQL语句分类 8.注释 9.创建删除语句 10.SQL语法 (4)order by排序 (6)更新表中的记录(是已经存在的数据) (7)delect删除表中的行 (8)top 规定返回行的数目 (9)别名AS (10)join 用来把两个表或者多个表的行连接起来 (11)合并两个或者多个select 结果 (12)数据库的完整性(约束) create table student(--创建表 –添加唯一约束 –添加check约束 –添加默认约束 go create table exam( –添加check约束 between Aand 来确定范围表示在AB之间 –设置非空 在设置空与非空时用is、not is –添加check约束 –添加外键约束 go 哪个是外键表,就给它添加外键约束 11.索引 (2)创建 (3)指定按照某个索引进行查询如下 12.group by 聚合函数 需要注意的 13.having 我们举个例子: 13.in or 关键字 14.自动增加 15.字符串函数 16.日期函数 17.T-SQL定义变量 18.子查询(非常重要!!!自己去找练习题多做题) 牛客上有许多练习题区多练习!!!! 19.流程控制 回顾下以前的知识 20.WHILE循环 21.视图 视图特点: 表可以根据需求创建不同的视图 将多个物理数据库抽象为一个逻辑数据库,以下示例 更新视图中的数据,对视图中的数据的增加,删除,修改时也会影响原表 22.事务 (2)事务必须具备一下4个属性,简称ACID (3)语句 (4)事务分类 开启隐式事务:SET IMPLICIT_TRANSACTIONS ON 我们暂时只能在一条conn上做事务,如果要在多条conn上做事务,一般借助框架或容器,使用JTA(java TRANSACTION API)即java事务接口 23.存储过程 24.触发器 (2)触发器语法 (3)查看触发器 这里就不进行具体讲解详细学习点击这个查看触发器
时隔多月终于有时间写博客了
1.数据库设计步骤
(1)需求分析
(2)概念结构设计
(3)逻辑结构设计
(4)数据库实施
(5)数据库运行和维护
数据库系统:由数据库,硬件,数据库管理系统组成
数据库:表,关系,操作对象
数据:数字,文字,图形
主数据文件(.mdf):一个数据库只有一个 辅助数据文件(.ndf):可以有多个 日志文件(.ldf):用于恢复数据库所需的事务日志信息
规则: (1)首字母必须是下列字符之一 a~z,A~Z,“_”,“#” (2)后面字符 字母、数字、下划线 “$”,"@"
1、第一范式(1NF):元组的分量不可再分(每一列都不能再分) 2、第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖) 3、第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
(1)第一范式
调整后就满足第一范式
(2)第二范式
(3)第三范式
DDL(定义语言)create,alter,drop DQL(查询语言)insert,update DML(操作语言)select DCL(控制语言)revoke,deny,grant
--这里是单行注释 /*这里是多行注释*/ / *sqlserver中不区分大小写 * /
(1)create database test --创建数据库 drop database test --删除数据库 (2)create table 表名() drop database 表名 (3)create view 视图名--创建视图 drop view 视图名 (4)create unique 索引名--创建索引 drop unique 索引名 (5)create trigger 触发器名 drop trigger 触发器名
(1)0select A from web;
select * from web;
(2)select distinct country from A;
distinct 查询不重复的
(3)where
查询中满足条件,文本用‘’,数值不用where中的运算符 =,<> !=,>,<,>=,<= between 120 and 200包含边界值 not between 120 and 300 不包含边界值 like 搜索某种模式 %表示多个数值 _表示一个字符 M%以M开头 %M%包含M %M_倒数第二个为M in 针对某个列的多个可能值 where A in(200,300) A中的列等于200,300的值
desc 降序 默认升序
(5)insert into 向表中插入新纪录不指定列名 insert into employee(empName, empAge, empAddress) values('李四',21,'北门') 指定列名 insert into employee(empName, empAge, empAddress) values('李四',21,'北门') 旧表插入新表 select * into 新表 from 旧表 (相当于把表备份了,只备份表结构与数据,约束消失) select * into student2 from student --select 列名 into 新表 from 旧表 (相当于把表备份了,只需要其中几列) select stuName,stuSex,stuAddress into student3 from student --select 列名 as 别名 into 新表 from 旧表 (相当于把表备份了,只需要其中几列,可用as加别名) select stuName as '姓名',stuSex as 性别,stuAddress 地址 into student4 from student
update 表名 set country='USA'--更新了国家为USA where --固定规定哪些记录被更新如不写则全更新
delect from web where name=‘张三’ where规定哪些行要被删除,不写全被删除
select top 5 percent * from --返回前5行 select top 5 percent * from A order by ID decs 返回后5行
可以使用as关键字起别名 也可以用=来起别名
left join (左连接)右边没有用null right join(右连接)左边没有用null inner join(全连接)都得右 实例 1.左连接 SELECT *FROM student AS stu --左表 LEFT JOIN exam exa --右表 可以省略as关键字 ON (stu.stuId = exa.stuId)--on是条件
union (两个select 内部必须有相同列) 选取不同值,不允许重复 union all 允许重复
数据完整性=数据的有效性和正确性(完整性=有效,正确)
完整性约束这里是考试重点要很熟悉1.唯一约束(允许一行数据为空) unique 2.主键约束(唯一约束 + 非空约束) primary key 3.默认值约束 default 4.check约束 限制列中值得范围 5.主外键约束 foreign key 6.非空约束 not null 一个表在不同的关系中既可以是主表又可以是子表 主外键是一对多关系
–字段名 数据类型 约束 (一般在此只加非空约束)
stuId int not null,
stuName varchar(20) not null,
stuAge int not null,
stuSex bit not null,
stuTel varchar(13) not null,
stuAddress varchar(30)
)
go
–添加主键约束alter table student --alter是修改已经存在的 add constraint PK_stuId primary key (stuId)
alter table student add constraint UQ_stuName unique (stuName)
alter table student add constraint CK_stuAge check (stuAge >=18 and stuAge <= 35)
alter table student add constraint DF_stuAddress default ('地址不详') for stuAddress
examId int not null,
stuId int not null,
labExam int not null,
writtenAxam int not null
)
go
–添加主键约束alter table exam add constraint PK_examId primary key (examId)
alter table exam add constraint CK_labExam check (labExam between 0 and 100)--
–添加非空约束alter table exam add constraint NN_labExam check (labExam is not null)
(alter table 表名 alter column 列名 该列的类型 NOT NULL) alter table exam alter column writtenAxam int not null
alter table exam add constraint CK_writtenAxam check (writtenAxam >= 0 and writtenAxam <= 100 )
alter table exam --修改外键表 add constraint FK_stuId foreign key(stuId) references student(stuId) --外键表字段 主键表字段
--删除约束(alter table 表名 drop constraint 约束名) alter table exam drop constraint FK_stuId
给表添加主外键约束的时候遵循3个一致
1.外键表外键与主键表主键数据类型一致(语法规范)
2.长度一致(语法规范)
3.名称一致(一般是项目规范,名称最好是一致)
也就是说要与主键表一一对应
对索引不了解的可以看一下这个索引介绍
类似于目录
(1)类型1.唯一索引(UNIQUE):不允许两行具有相同的索引值(创建了唯一约束,系统将自动创建唯一索引) 2.主键索引:主键索引要求主键中的每个值是唯一的,(创建主键自动创建主键索引) 3.聚集索引(CLUSTERED):表中各行的物理顺序与键值的逻辑(索引)顺序相同,表中只能包含一个聚集索引,主键列默认为聚集索引 4.非聚集索引(NONCLUSTERED):表中各行的物理顺序与键值的逻辑(索引)顺序不匹配,表中可以有249个非聚集索引
USE xmgl GO --创建索引 IF EXISTS(SELECT* FROM sysindexes WHERE name='emp_id')--创建索引之前要判断是否存在索引 DROP INDEX UserInfo.emp_id--表名.索引名 GO--先判断索引是否存在存在则删除 GO 批处理 CREATE NONCLUSTERED INDEX emp_id-- NONCLUSTERED 非聚集索引 INDEX代表创建的是索引 ON 员工表(员工号)--ON代表在哪个表哪个列(索引关键字) WITH FILLFACTOR =80 --代表填充因子为80 GO
SELECT 字段1,字段2 FROM 表名 WITH (INDEX = 索引名) WHERE 查询条件 SELECT 字段1,字段2 FROM 表名 WITH (INDEX(索引名)) WHERE 查询条件 指定按'IX_stuName'索引查询 --指定按索引IX_stuName进行查询 SELECT * FROM student WITH(INDEX(IX_stuName)) WHERE stuName = '令狐冲' -指定按索引IX_stuName进行查询 SELECT * FROM student WITH(INDEX = IX_stuName) WHERE stuName = '令狐冲'
定义:具体学习在group by我觉得讲的比较好 对其进行分组GROUP BY必须得配合聚合函数来用,分组之后你可以计数(COUNT),求和(SUM),求平均数(AVG)等。
count() 计数 sum() 求和 avg() 平均数 max() 最大值 min() 最小值
NUll不计算在内,如下示例SELECT COUNT(schoolName),COUNT(hobby), COUNT(*) FROM student
where 和 having 的区别 where 对表中的原始数据进行的筛选 having 对分组后使用聚合函数计算后的数据进行的筛选,与GROUP BY结合使用
每个部门人数都有了,那如果我们想要进一步知道员工人数大于30000的部门是哪些,这个时候就得用到HAVING了。 SELECT dept_no as 部门, count( emp_no) as 人数 FROM dept_emp WHERE to_date = '9999-01-01' GROUP BY dept_no
in可以用or代替--使用or关键字 SELECT * FROM student WHERE stuAge = 18 OR stuAge = 27 OR stuAge = 26 --使用in关键字 SELECT * FROM student WHERE stuAge IN (18, 27, 26) --使用BETWEEN AND 关键字 SELECT * FROM student WHERE stuAge BETWEEN 18 AND 27 SELECT * FROM student WHERE stuAge >= 18 AND stuAge <= 27
在定义创建表的时候可以用ID int identity (1,1) primary key 开始值为1,后面自动加1
CHARINDEX函数,下标从1开始,如果没找到的话返回0,而在java中下标从0开始,没找到的话返回-1SELECT CHARINDEX('on', 'my name is jiongjiong', 15) --LEN函数 SELECT LEN('jack') --LEN函数是求长度 SELECT stuName, stuAddress, LEN(stuAddress) AS '长度' FROM student --RTRIM函数和LTRIM函数是去掉左右两边的空格 SELECT * FROM student WHERE RTRIM(LTRIM(stuAddress)) = '江西省赣州市' SELECT *FROM student WHERE LTRIM(stuAddress) = '江西省赣州市' UPDATE student SET stuAddress = ' 江西省 赣州市 ' WHERE stuId =19
详细讲解点击日期函数讲解
(1)GETDATE() 返回当前系统日期
(2)DATEADD(日期部分,常数,日期) 返回将日期的指定日期部分加常数后的结果返回
(3)DATEDIFF( 日期部分,日期1,日期2) 返回两个日期之间的差值,日期部分(日期1-日期2)
(4)DATENAME() 返回指定日期的日期部分的字符串(返回字符串)
(5)DATEPART() 返回指定日期的日期部分的整数(返回整数)
(6)DAY() 返回指定日期的日部分的整数
(7)MONTH() 返回指定日期的月部分的整数
(8)YEAR() 返回指定日期的年部分的整数
声明变量 :DECLARE 变量名 数据类型
定义变量:使用@符号
给变量赋值使用:set关键字DECLARE @age INT SET @age = 10 PRINT @age --SELECT @age PRINT '@age = ' + CONVERT(VARCHAR(5), @age) SELECT @age = stuAge FROM student WHERE stuId = 10 --必须确保只有一条记录 PRINT @age PRINT '@age = ' + CONVERT(VARCHAR(5), @age) DECLARE @stuAge INT SELECT @stuAge = stuAge FROM student WHERE stuName = '李四' SELECT * FROM student WHERE stuAge > @stuAge
子查询(一个查询的结果作为另外一个查询的条件一般子查询要保证返回结果只有一个(即一行,一列)in子查询返回一列多行子查询从内往外读(写)当要显示多个表数据时使用联结,只显示一个表数据时使用子查询
)SELECT * FROM student WHERE stuAge > (SELECT stuAge FROM student WHERE stuName = '李四')
SELECT * FROM exam SELECT *, '等级' = CASE WHEN labExam < 60 THEN 'E' WHEN labExam > 60 AND labExam <= 69 THEN 'D' WHEN labExam BETWEEN 70 AND 79 THEN 'C' WHEN labExam BETWEEN 80 AND 89 THEN 'B' ELSE 'A' END FROM exam
流程控制,分支判断
多重判断:嵌套if,阶梯式if(可以是区间范围,可以是定值),switch(只能是某个定值)
DECLARE @testIndex int SET @testIndex = 0 WHILE(@testIndex < 10) BEGIN PRINT '第' + CAST((@testIndex + 1 ) AS VARCHAR(3))+ '次打印hello' SET @testIndex = @testIndex + 1 END
视图的优点或用途:1.筛选表中的行 2.防止未经许可的用户访问敏感数据 3.降低数据库的复杂程度(或者说降低sql的复杂度) 4.将多个物理数据库抽象为一个逻辑数据库
视图是为查询服务的,不能通过视图新增、修改、删除数据,同一张
CREATE VIEW 视图名 AS SELECT 表A.列1,表A.列2,表B.列1,表B.列2 FROM 数据库名1.角色名.表名1 AS 表A INNER JOIN 数据库名2.角色名.表名2 AS 表B ON (表A.主键 = 表B.外键) CREATE VIEW test1 AS SELECT * FROM student WHERE stuSex = 0 GO SELECT * FROM test1 go alter VIEW test1 AS SELECT *,stuId AS 'id', stuName AS 'myName' FROM student WHERE stuSex = 0 GO
UPDATE test1 SET stuName = '风清扬老前辈' WHERE id = 5 IF('a' = 'a') PRINT '相等' ELSE PRINT '不相等' IF('a' = 'A') PRINT '相等' ELSE PRINT '不相等'
(1)事务什么时候用:同时执行多个insert,update,delete,sql语句时使用事务是作为单个逻辑工作单元执行的一系列操作,这些操作作为一个整体一起向系统提交,要么都执行,要么都不执行,事务是一个不可分割的工作逻辑单元
1.原子性A 2.一致性C 3.隔离性I 4.永久性D
BEGIN TRANSACTION 开始事务 COMMIT TRANSACTION 提交事务 ROLLBACK TRANSACTION 回滚事务
1.显示事务:用BEGIN TRANSACTION 关键字明确指定事务的开始和明确指定提交事务(COMMIT TRANSACTION )和明确指定回滚(ROLLBACK TRANSACTION) 2.隐式事务:不需要指定事务的开始即不需要使用BEGIN TRANSACTION关键字开始,但是需要手工提交事务和手工回滚事务,如果要用隐式事务的话,需要设置一个开关(即SET IMPLICIT_TRANSACTIONS ON)。你也可以理解为显示事务和隐式事务没什么区别,不同的地方就是,显示需要用BEGIN TRANSACTION 关键字,隐式不需要用BEGIN TRANSACTION 关键字。因为它已经是隐式事务了,就没有必要每次都加上BEGIN TRANSACTION 了,但是我们必须在后面加上提交事务(COMMIT TRANSACTION )和回滚事务(ROLLBACK TRANSACTION),必须手工去提交事务或手工回滚事务了 3.自动提交事务:这是sqlserver的默认模式,它将每条单独的T-SQL语句视为一个事务
关闭隐式事务:SET IMPLICIT_TRANSACTIONS OFF
看这篇文章吧小编又变懒了存储过程
(1)定义触发器(TRIGGER)是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,会激活促发其执行相应的操作。
CREATE TRIGGER trigger_name ON table_name [WITH encryption] --是否加密 FOR [DELETE,INSERT,UPDATE] AS T_SQL语句 GO
SHOW TRIGGERS 语句查看触发器信息 SHOW TRIGGERS; 在 triggers 表中查看触发器信息 DROP TRIGGER trig_book2 ;
+,有错误评论区欢迎指出
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算