SQL server 复习一

时间:2022-04-17 02:03:39

第一天

下面我们从最基础的开始:

在运行里面输入:services.msc

SQL server 复习一

一、启动服务

SQL server 复习一

二、数据库登录的两种身份验证方式

另外一种身份验证方式就是SQL Server身份验证.

sa不能使用的时候可以这样的操作:

1.用windows登录,然后在“实例”右键“属性”,“安全性”,设置“服务器身份验证方式”

为“SQl Server和windows混合”,点击确定。“重启服务”.

2.启用sa账号。用windows连接好数据库后,点击“安全性”,→“登录名”→右键“sa”属性,→状态→启用,启用后,再找到“常规”选项卡,修改sa的密码。

SQL server 复习一

实例

SQL server 复习一

启用sa账号

相关的登录操作已经介绍完了,接下来开始进入实战

1.创建数据库:

SQL server 复习一

三、创建数据库

怎么样建一张表呢?

SQL server 复习一

四、新建表

SQL server 复习一

五、如何设定自动编号

SQL server 复习一

六、修改创建好的表

SQL server 复习一

七、给表中添加数据

SQL server 复习一

八、数据库中的常用数据类型

上图中列举的是常用的数据库当中的数据类型。

下面分别介绍一下。

有的时候图片信息是存储在数据库里面的,这个时候就要用二进制image类型。

char(10)存的多了不行,如11个,但是少了是可以的。占得空间是固定的。

nchar(10)  性别存储建议用它

char、nchar凡是   前面不带var的都表示固定长度。

varchar、nvarchar则表示可变长度,长度是可变的。

varchar(10); 2,实际存储的时候,会根据实际的数据来动态的计算长度,

对于超出预先声明的长度则会报错,如果不够的,则重新计算,按实际长度来算。

地址一般用可变长度。

nchar(10)

char(10)和nchar(10)的区别:

char(10) 'aaaaaaaaaa','找找找找找'  占10个字节

nchar(10) 'aaaaaaaaaa','找找找找找找找找找找'  ,占20个字节

什么时候用带n的呢?系统用的是带中文的信息,用char就行了。

但是如果我们要在英文的操作系统下执行,还是建议使用带n的。

它们的最大值:varchar(8000)

char(8000)

nvarchar(4000)

nchar(4000)

varchar(10)

nvarchar(10)

varchar(max)文章的内容非常的长时用。

nvarchar(max)

SQL2005以后,不建议使用这个。

text

ntext

数据库的分离和附加

SQL server 复习一

九、分离

SQL server 复习一

十、分离2

SQL server 复习一

十一、附加

SQL server 复习一

十二、附加2

自动编号永远是勇往直前的,不会后退的。

下面介绍用代码的方式创建数据库

SQL server 复习一

十三、新建数据库

SQL server 复习一

十四、创建数据库的代码

接下来时创建表:

SQL server 复习一

十五、在数据库中创建表

SQL server 复习一

十六、go语句

如果我想把我的数据库的脚本拷给我的同事,但是他的现在使用的是SQL2005版本,我用的是SQL2008版本,此时就不能用分离,附加了.请看下面的步骤:

SQL server 复习一

十七、生成脚本步骤一

选择下一步

选择:编写整个数据库的所有的脚本。

SQL server 复习一

十八、生成脚本步骤二

当然这里面还有一些我们可以选择的项。在这不一一叙述了。

关于附加这块可能会遇到些小问题,有问题的朋友可以向我提问?

Ctrl+K+C注释;

Ctrl+K+U取消注释;

结果试图可以用ctrl+R

SQL server 复习一

十九、如何查看表中的数据

下面介绍插入数据的几种形式。

SQL server 复习一

二十、插入数据

这里除去自动编号,不需要人工插入的那些列。

SQL server 复习一

二十一、插入不为空的数据

SQL server 复习一

二十二、转译了

不能为空的列必须插入数据,否则的话会报错的。

SQL server 复习一

二十三、插入自动编号

SQL server 复习一

二十四、插入多行数据

注意这的写法,union在后面详细介绍。

SQL server 复习一

二十五、把现用表中的数据导出到一个新表

SQL server 复习一

二十六、创建一张表,与源表的结构一样,但是不含数据

新增内容

SQL server 复习一

新增建议

SQL server 复习一

二十七、向已有表中插入数据

SQL server 复习一

二十八、插入中文,前面加N

下面介绍更新的常用方法:

SQL server 复习一

二十九、更新一列

SQL server 复习一

三十、同时更新多列数据

先来说一下这个。

SQL server 复习一

三十一、限定条件查询行

SQL server 复习一

三十二、限定列和行查询

SQL server 复习一

三十三、同时更新指定行和指定的列

注意在更新之前先要备份一下,否则会出现令人麻烦的事情。可以做个备份,还原。

SQL server 复习一

三十四、同时限定更新符合两列条件。

同时注意下数据库当中逻辑运算符not and or 的使用;优先级:not and or

SQL server 复习一

三十五、把所有的年龄都加1

在数据库中写加1还是写成图中的形式比较的好。永远这么写,换个地方可能就不能用了。小括号可以改变优先级。

下面介绍下删除数据的两种方式:

SQL server 复习一

三十六、删除指定的数据

SQL server 复习一

三十七、两种删除语句及其区别

图中注释部分是它们之间的区别。

下面介绍下关于约束的一些知识:

建约束以前先把之前的数据都删掉,因为之前的数据都是不合法的。

SQL server 复习一

三十八、建约束第一步

SQL server 复习一

三十九、建约束第二步

SQL server 复习一

四十、建约束第三步

点击:表达式

输入约束条件

点击:确定

SQL server 复习一

四十一、约束执行

SQL server 复习一

四十二、再设定其它的一些约束

SQL server 复习一

四十三、约束获取当前数据库时间

除检查约束外的其它的形式:

默认约束:

SQL server 复习一

四十四、修改默认值

唯一约束

SQL server 复习一

四十五、唯一约束,如身份证号码不能一样

SQL server 复习一

四十六、填好唯一约束的内容

如果我在输入数据的时候,输入的部门是30,而部门表中没有30这个部门。这个时候,我需要设定外键。

外键约束:

SQL server 复习一

四十七、建立外键约束

SQL server 复习一

四十八、外键关系设定

点下:表和列规范

设定好主键表 外键表  以及相关联的ID,注意要一样

点击确定自动生成标识,名称

SQL server 复习一

四十九、设定好的主外键

从图中我们清晰的看到,主键为黄色,外键为灰色。

没有被外键引用的表可以删掉,而被引用的不能删掉。

由于建立了主外建关系会引起一系列的麻烦,所以,一般我们不建。但是,我们通过程序来维护主外建关系。

SQL server 复习一

五十、删除主外建约束前奏

SQL server 复习一

五十一、删除主外建约束一

SQL server 复习一

五十二、删除主外建约束二-级联删除

第二天:

数据库对我们现在工作中的朋友的帮助是相当大的,在大数据处理的时候,可以让我们方面的查询,管理数据。

尤其是当下的电商行业,都是在网络上面进行销售,所以,数据库更加彰显出其魅力。

比如,我在指南针的几年里面,当然是公司设计好的数据库让我们用。对于客户的查询,处理等问题,包括对自己管辖范围内的客户的管理。基本上都是通过数据库来完成的。所以,经常的会用到一些基本的查询,更新,删除等等语句。

在这里我也为大家整理了相关的资料,希望大家喜欢。

SQL server 复习一

一、新建两张表

SQL server 复习一

二、手动删除一列

SQL server 复习一

三、手动增加一列

SQL server 复习一

四、增加一个非空列

SQL server 复习一

五、修改列

下面我们看看数据库中增加约束和删除约束的相关案例:

SQL server 复习一

六、增加一个主键约束

SQL server 复习一

七、增加一个非空约束

SQL server 复习一

八、增加一个唯一约束

SQL server 复习一

九、为性别增加一个默认约束

SQL server 复习一

十、为性别增加一个检查约束

SQL server 复习一

十一、为年龄增加一个检查约束

SQL server 复习一

十二、增加一个外键约束

SQL server 复习一

十三、增加级联删除,更新

SQL server 复习一

十四、删除某个名字的约束

SQL server 复习一

十五、一条语句删除多个约束

SQL server 复习一

十六、用一条语句为表增加多条约束


下面看下数据的检索:

SQL server 复习一

十七、查询学生表

SQL server 复习一

十八、这列是干什么的呢?

图中画圈的部分是干什么的呢?比如,我在中国移动办了个手机号,现在注销了。那么,在中国移动的数据库中我的数据就真的删了么?很多时候,并没有删。对于用户来讲,是删了,只是中国移动做了个标记。就是用户下次再登陆的时候登陆不进去了,但是,并没有删。在记录里面用0和1表示,这个我们一般叫做“软删除”。一般0表示false没有删,1表示true删了。

我只想看其中的三列,这么写,见下图:

SQL server 复习一

十九、只看其中三列的信息

上图中直接显示英文,对于用户来讲不是特别的友好,我现在需要显示它们的中文信息。也就是给列起别名。怎么给列起别名呢?

SQL server 复习一

二十、起别名

SQL server 复习一

二十一、起别名的第2,3种写法

SQL server 复习一

二十二、显示自定义查询结果

SQL server 复习一

二十三、基本检索

SQL server 复习一

二十四、top

SQL server 复习一

二十五、查看前十行且只有姓名

SQL server 复习一

二十六、返回前百分之十

现在数据库里面就有11条数据,返回百分之十,是多少条呢?

答案是:2条。

SQL server 复习一

二十七、排序

SQL server 复习一

二十八、distinct

如果有三列,看三列当中这个的数据有没有重复,有的话,就会去掉重复。

影响表中数据么?根本不影响。

下面我看来看看数据库当中五个常用的聚合函数:

当我们在工作中有什么不会的了,可以点开帮助-索引,输入:聚合函数。

SQL server 复习一

二十九、五种常用聚合函数

下面我们看下带条件查询:

SQL server 复习一

三十、带条件查询1

SQL server 复习一

三十一、带条件查询2  in的用法

接下来我们看下带条件查询-模糊查询

SQL server 复习一

三十二、like查询 %

SQL server 复习一

三十三、like查询 _

SQL server 复习一

三十四、like查询 [  ]

^ 是非的意思,跟正则表达式中一样。

SQL server 复习一

三十五、like查询 ^

下面我们看下数据库中的Null值处理

请你查出年龄不为空的所有人得年龄,怎么查呢?

SQL server 复习一

三十六、null就是unknow的意思

系统没办法识别了,就是比如20不等于不知道。怎么比啊?返回的也是个unknow,在where后面就是个false,所以没有任何的查询记录。

没法用<> 和 = 进行比较,那么我们怎么写呢?

SQL server 复习一

三十七、这么写null判断

SQL server 复习一

三十八、空值的替换

设计器上面要插入个空值的话,得写大写的N,Null。要是什么都没写,不行的,那是个字符串为0的字符串。要是写的小写的null,是字符串为null的字符串。这是我们需要小注意的地方。

下面我们再看下order by语句:

一般都是写在查询语句的最后的。

SQL server 复习一

三十九、按多列的条件进行排序

SQL server 复习一

四十、按表达式排序

一旦有了order by以后这个表就不是集合了。现在只提一下这个概念。

接下来我们看下数据分组:

首先,我们提出几个问题。什么时候才会遇到这个分组情况呢?分组是个什么东西呢?

比如根据籍贯分组,根据男女分组。

Group by在数据汇总统计的时候用,一般和聚合函数一起来用。如果不分组就用聚合函数的话,它是把组里面所有的信息当成了一组来统计。

要是分组了再用聚合函数的话,统计的是每一组的信息。

SQL server 复习一

四十一、按照班级分组

SQL server 复习一

四十二、分组后查询每个组里面有多少个人

现在想看看组中数据大于3的,如果要想对分组再进行筛选,我们用的是having。

SQL server 复习一

四十三、对分组以后再筛选用having

SQL server 复习一

四十四、分组判断的时候需要注意的情况

SQL server 复习一

四十五、分组判断的时候需要注意的情况二

Select 这块哪些列能写?哪些列不能写呢?group by中包含的列和聚合函数都能写,其它的不能写。

为什么呢?还是思考那个问题,当分完组以后,就都是组当中的信息了。在分组之前对数据的筛选用where,它们两个是不能混用的。

SQL server 复习一

四十六、简单的SQL语句执行顺序

了解SQL语句的执行顺序能知道哪用别名?对于理解SQL语句的命令也是有好处的。当然,这里列出的是简单的SQL语句执行顺序。

SQL server 复习一

四十七、Group By练习

下面我看来看下函数的类型转换:

SQL server 复习一

四十八、数据类型转换的两种写法

什么情况下会遇到数据类型的转换呢?

SQL server 复习一

四十九、实际问题中遇到的数据类型转换一

如果不转换的话,将按照字符进行排序。而不是两起来的两个或多个数字进行排序。

SQL server 复习一

五十、实际问题中遇到的数据类型转换二

在日期转换的时候用convert就行了,120是不同数据库中时间的类型。

接下来我们看下联合结果集union(集合运算符)

SQL server 复习一

五十一、union

这里有个需要注意的地方,每列当中相对应的数据类型必须得一样。调一下位置是不行的。要想能联合的话,必须得保证每个列的数量相同,数据类型相同。

SQL server 复习一

五十二、联合中有一列为空的时候

最后查询的结果集是以第一个的列名命名的。

但从姓名和性别看的话,有几条是一样的数据。Union可以去除重复数据,如果不想去除的话,后面加个all

SQL server 复习一

五十三、union all

那么union all在什么时候用呢?

常见应用:底部汇总。

SQL server 复习一

五十四、年龄汇总

SQL server 复习一

五十五、成绩汇总

下面我们看看字符串函数:

这块的学习,使用还是要多借鉴微软的帮助。

SQL server 复习一

五十六、字符串函数

自己可以看看replace,stuff这两个函数怎么用。

再下来我们看看日期函数:

日期函数还是,我们可以在数据库当中的帮助里面输入:日期和时间

SQL server 复习一

五十七、在当前时间增加时间

SQL server 复习一

五十八、计算两个时间的差

SQL server 复习一

五十九、datediff具体的应用

SQL server 复习一

六十、获取时间的某个部分

下面这个案例对做电销工作的朋友非常的实用:

创建一张表,记录电话呼叫员的工作流水,记录呼叫员编号、对方号码、通话开始时间、通话结束时间。建表、插数据等最后都自己写SQL语句。 要求:输出所有数据中通话时间最长的5条记录。orderby datediff 输出所有数据中拨打长途号码(对方号码以0开头)的总时长。like、sum 输出本月通话总时长最多的前三个呼叫员的编号。 输出本月拨打电话次数最多的前三个呼叫员的编号.group by,count(*)

CREATE TABLE [CallRecords]
(
[Id] [int] NOT NULL identity(1,1),
[CallerNumber] [nvarchar](50), --三位数字,呼叫中心员工编号(工号)
[TelNum] [varchar](50),
[StartDateTime] [datetime] NULL,
[EndDateTime] [datetime] NULL --结束时间要大于开始时间,默认当前时间
) --主键约束
alter table [CallRecords]
add constraint PK_CallRecords primary key(id) --检查约束
alter table [CallRecords]
add constraint CK_CallRecords check(CallerNumber like ‘[0-9][0-9][0-9]’) \d{3}错误!! alter table [CallRecords]
add constraint CK_CallRecords_EndDateTime check(EndDateTime > StartDateTime) --默认约束
alter table [CallRecords]
add constraint DF_CallRecords default(getdate()) for EndDateTime INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('', '', CAST(0x00009DAF00A4CB80 AS DateTime), CAST(0x00009DAF00A62E94 AS DateTime));
INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('', '', CAST(0x00009DB000D63BC0 AS DateTime), CAST(0x00009DB000D68DC8 AS DateTime));
INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('', '', CAST(0x00009DB000E85C60 AS DateTime), CAST(0x00009DB000E92F50 AS DateTime));
INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('', '', CAST(0x00009DB2015BB7A0 AS DateTime), CAST(0x00009DB2015C4DA0 AS DateTime));
INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('', '', CAST(0x00009DA4014C9C70 AS DateTime), CAST(0x00009DA4014E0308 AS DateTime));
INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('', '', CAST(0x00009DB400DAA0C0 AS DateTime), CAST(0x00009DB400DD5FE0 AS DateTime));
INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('', '', CAST(0x00009DB200B9AB40 AS DateTime), CAST(0x00009DB200B9FC1C AS DateTime));
INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('', '', CAST(0x00009DB8014042B8 AS DateTime), CAST(0x00009DB80141804C AS DateTime));
INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('', '', CAST(0x00009D9A00FB9898 AS DateTime), CAST(0x00009D9A00FE6118 AS DateTime));
INSERT [dbo].[CallRecords] ([CallerNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('', '', CAST(0x00009D9A00FB9898 AS DateTime), CAST(0x00009D9A00FE6118 AS DateTime));

SQL server 复习一

六十一、通话第一小题

思路:看到通话时长最长的,先求通话时长;最长-倒排序;前五条-top 5

SQL server 复习一

六十二、通话时长第二小题

SQL server 复习一

六十三、通话时长第三小题

SQL server 复习一

六十四、通话时长第四小题

最后一个小题,暂时不公布答案,留个做思考。

SQL server 复习一

SQL server 复习一