SQL Server特性

一、创建表

在sql server中使用create table来创建新表。

create table Customers(
id int primary key identity(1,1),
name varchar(5)
)

该表名为Customers其中包含了2个字段,分别为id(主键)以及name。

1、数据类型

整数类型:

tinyint(1字节,从 0 到 255)

smallint(2字节,从 -32,768 到 32,767)

int(四字节,从 -2,147,483,648 到 2,147,483,647)

bigint(八字节,从 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807)

浮点数类型:

float(单精度或双精度浮点数)

real(精确到 7 位小数的近似数值数据类型)

字符类型:

char(x)(固定存储,只能存储x个字符长度,最大长度为 8000 个字符)

varchar(x)(可变存储,可以存储0到x的字符长度,最大长度为 8000 个字符,如果x为max,那么可以存储2^31-1 个字符)

nchar(x)(固定长度的 Unicode 字符序列,最大长度为 4000 个字符)

nvarchar(x)(可变长度的 Unicode 字符序列,最大长度为 4000 个字符)

日期类型:

date(仅存储日期部分)

time(仅存储时间部分)

datetime(存储日期和时间部分)

datetime2(高精度的datetime)

二进制类型:

binary(x)(固定长度的二进制数据)

varbinary()(可变长度的二进制数据)

 如果数据中有中文字符、日文、韩文等多字节字符,建议存放数据类型为nvarchar,可以有效避免乱码。

二、定义函数

函数通常使用BEGIN...END块来定义函数体,使用CREATE FUNCTION创建函数。以力扣177题第n高的薪水举列子:

表: Employee

+-------------+------+
| Column Name | Type |
+-------------+------+
| id          | int  |
| salary      | int  |
+-------------+------+
在 SQL 中,id 是该表的主键。
该表的每一行都包含有关员工工资的信息。

查询 Employee 表中第 n 高的工资。如果没有第 n 个最高工资,查询结果应该为 null 。

定义了一个名getNthHighestSalary的函数,该函数接收一个int类型参数N并且返回一个int类型值,在BEGIN后开始我们的逻辑,RETURN具体要返回的值,以END标志结尾。

CREATE FUNCTION getNthHighestSalary(@N INT) RETURNS INT AS
BEGINRETURN (SELECT isnull((SELECT newsalary.salary FROM (SELECT DENSE_RANK() OVER (ORDER BY salary DESC) AS DenseRank ,salary FROM Employee GROUP BY Salary) AS newsalary WHERE newsalary.DenseRank=@N),null));
END
GO

调用这个函数SELECT dbo.getNthHighestSalary(要传参的值);

扩展: 

DENSE_RANK()窗口函数

DENSE_RANK()函数为数据集中的每一行分配一个连续的排名,这些排名是基于指定的排序顺序进行计算的,会保留排名的连续性。也就是说,如果有两个或多个相同的值,它们会获得相同的排名,并且下一个不同值的排名会紧接着前一个排名的下一个整数,而不会跳过任何数字。

基本语法:DENSE_RANK() OVER (PARTITION BY [column] ORDER BY [column] [ASC|DESC])

ISNULL()函数

用于检查指定的表达式是否为NULL,并在表达式为NULL时返回一个指定的替代值。

基本语法:ISNULL(expression, replacement_value)

expression:要检查是否为NULL的表达式。

replacement_value:在expression为NULL时返回的替代值。

三、索引 

聚集索引

表中只能有一个,它决定了表中数据的物理存储顺序,在sql server中通常会默认依据主键创建一个聚集索引。

列如我们创建一个表cs,对其中的id字段不设置主键,那么我们对这个表创建完成之后,不会有默认的聚集索引。

create table cs(
id int
)

 1de547a2d9d04a9ab506414388622a72.png

但是如果我们对该表cs的id字段添加primary key设置为主键,那么在创建表的同时会默认根据id这个主键创建一个索引。

create table cs(
id int primary key
)

 eee5d0bcfeb649eabe591d77ff1962b8.png

查看该索引的属性,我们可以看到,是根据id字段进行创建的该索引。 

804a1880329844cc8ae5517c210de455.png

非聚集索引

聚集索引一张表中只能存在一个,而非聚集索引一张表可以存在多个,它与表中的数据分开存储,包含指向表中数据的指针。

列如创建一个school表,其中包含三个字段,现在我用name列创建一个名idx_school的非聚集索引,创建完成之后,我们对school表中的name字段进行查询。

--创建表school
create table school(
id int identity(1,1),--id
name varchar(5),--姓名
age int--年龄
)--创建非聚集索引
CREATE NONCLUSTERED INDEX idx_school  
ON school(name);--查询
select name from school

我们可以在执行计划中看到Index Scan,这表示我们成功使用了索引进行查询,使用的索引是[school].[idx_school]索引(就是school表下的idx_school索引),就是我们所创建的非聚集索引。

bb87fd7cebd04136b3383dbd5741a421.png

复合索引

由多个列组成的索引,根据列的顺序来决定查询速度的快慢,本质上也是非聚集索引。

同样使用非聚集索引的表,如果我们要使用非聚集索引查询年龄为多大的姓名,在使用idx_school索引时,是不会触发索引查询的。

select name from school where age=12

 我们在执行计划中可以看到Table Scan这表示为表扫描,对整张表[school]进行扫描查询。

3f5e07734beb4803950eeb940cdf3fd8.png

在这种情况下,我们就需要创建复合索引,创建完复合索引之后再执行相同的查询语句。

--创建复合索引
CREATE NONCLUSTERED INDEX idx_name_age
ON school (name ASC, age ASC);--ASC为升序,DESC为降序--查询
select name from school where age=12

现在我们在执行计划中就看到Index Scan,使用的是[school].[idx_name_age]索引。 

0f6f2344a19c45aba6ddb0a7e699b422.png

删除索引:DROP INDEX 索引名 ON 表名

四、视图 

视图是一种虚拟的表,其内容由查询定义,本身不存储数据,而是根据查询结果动态生成数据,其每次查询视图时都会执行背后的SQL查询。

创建视图

对school表中的name和age字段创建一个名newschool的视图。

create view newschool as
select name,age from school

使用视图 

和查询普通表一样进行查询视图。

select * from newschool

 

 

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

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

相关文章

Towards Accurate and Robust Architectures via Neural Architecture Search

基于网络架构搜索的准确性与鲁棒性结构研究 论文链接:https://arxiv.org/abs/2405.05502 项目链接:未开源 Abstract 为了保护深度神经网络免受对抗性攻击,对抗性训练因其有效性而受到越来越多的关注。然而,对抗训练的准确性和鲁…

扩散模型笔记

长参数“T”决定了生成全噪声图像所需的步长。在本文中,该参数被设置为1000,这可能显得很大。我们真的需要为数据集中的每个原始图像创建1000个噪声图像吗?马尔可夫链方面被证明有助于解决这个问题。由于我们只需要上一步的图像来预测下一步&#xff0c…

如何设计一个高可用的分布式系统?

如何设计一个高可用的分布式系统? 大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在当今互联网应用架构中,高可用性是至关重要的特性之一。设计一个高可用的分布式系统需要考…

vue2 webpack使用optimization.splitChunks分包,实现按需引入,进行首屏加载优化

optimization.splitChunks的具体功能和配置信息可以去网上自行查阅。 这边简单讲一下他的使用场景、作用、如何使用: 1、没用使用splitChunks进行分包之前,所有模块都揉在一个文件里,那么当这个文件足够大、网速又一般的时候,首…

1.3镜像管理

【必知必会】了解镜像的命名及导入导出镜像 1.3.1镜像的命名 一般情况下,镜像是按照如下格式命名的 服务器ip:端口/分类/镜像名:tag 如果不指明端口,默认是80,tag是latest,比如:192.168.26.101:5000,再比如hub.c.163.com/library/mysql:latest.分类也可以不写,比如d…

【C++】cout.self()函数

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文作为 JohnKi 学习笔记,借鉴了部分大佬案例 📢未来很长&#…

Avalonia中的Binding

文章目录 简介概念不同的绑定源绑定转换器图片路径转换简介 绑定是一个非常强大的概念,它允许绑定两个属性,这样当其中一个属性发生变化时,另一个也会发生变化。 通常,绑定从source属性到target属性——正常OneWay绑定,但也有一个TwoWay绑定可以确保两个属性同步,无论哪…

工地/矿区/电力/工厂/环卫视频智能安全监控反光衣AI检测算法的原理及场景应用

一、引言 随着科技的快速发展,特别是在智能交通和安全生产领域,对于夜间或弱光环境下的人员识别和安全监控需求日益凸显。反光衣作为一种重要的安全装备,被广泛应用于道路施工、工地作业、夜间巡逻、安全生产等场景,旨在提高人员的…

Meerkat:第一个统一视听空间和时间定位的MLLM

大型语言模型(LLMs)在各种自然语言处理任务中表现出色,达到了理解和推理能力的人类水平精度。此外,借助新兴的指令微调范式,这些语言模型可以被赋予遵循开放式自然语言指令的能力,甚至可以与其他模态&#…

9、Redis 高级数据结构 HyperLogLog 和事务

1. HyperLogLog 简介 HyperLogLog 是一种用于基数估计的概率数据结构。它并不是一种新的数据结构,而是 Redis 中的一种字符串类型。HyperLogLog 的主要优点是能够利用极少的内存空间完成对独立总数的统计,适用于统计大量数据的独立元素数量&#xff0c…

机器学习第四十六周周报 FMP

文章目录 week46 FMP摘要Abstract1. 题目2. Abstract3. FMP3.1 优化框架3.2 优化器 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程 5. 结论6.代码复现1. FMP2. fairGNN小结参考文献 week46 FMP 摘要 本周阅读了题为Chasing Fairness in Graphs: A GNN Architecture Per…

Mac OS系统中Beyond Compare 4破解方式

文章出处 https://blog.csdn.net/qq_42418042/article/details/137544113 前言 记录实操过程,以防以后找不到了~ 实际原理是启动时删除文件,实现无限试用 实操过程 下载安装包 官网链接 https://www.scootersoftware.com/download.php 解压、移动到应…

【Spring Cloud】微服务的简单搭建

文章目录 🍃前言🎄开发环境安装🌳服务拆分的原则🚩单一职责原则🚩服务自治🚩单向依赖 🍀搭建案例介绍🌴数据准备🎋工程搭建🚩构建父子工程🎈创建父…

leetcode每日一题-3033. 修改矩阵

题目描述: 解题思路:简单题目,思路非常直接。对列进行遍历,记录下最大值,然后再遍历一遍,把-1替换为最大值。需要注意的是进行列遍历和行遍历是不同的。 官方题解: class Solution { public:v…

行业事故---语雀

文章目录 时间线剖析心得 时间线 根据公告中关于故障的时间点梳理如下: 14:07 数据存储运维团队收到监控系统报警,定位到原因是存储在升级中因新的运维工具 bug 导致节点机器下线;14:15 联系硬件团队尝试将下线机器重新上线;15:…

网络漏洞挖掘实测报告

关于作者:个人主页 网络漏洞挖掘实测报告 一、前言 网络漏洞挖掘是信息安全领域中至关重要的一环。通过挖掘和修复漏洞,可以有效地保护系统免受潜在的攻击和破坏。本报告旨在记录一次完整的网络漏洞挖掘实测过程,包括实施方法、过程、结果以…

微软正在放弃React

最近,微软Edge团队撰写了一篇文章,介绍了微软团队如何努力提升Edge浏览器的性能。但在文中,微软对React提出了批评,并宣布他们将不再在Edge浏览器的开发中使用React。 我将详细解析他们的整篇文章内容,探讨这一决定对…

笔记:SpringBoot+Vue全栈开发2

笔记:SpringBootVue全栈开发2 1. MVVM模式2. Vue组件化开发3. 第三方组件element-ui的使用4. axios网络请求5. 前端路由VueRouter 1. MVVM模式 MVVM是Model-View-ViewModel的缩写,是一种基于前端开发的架构模式,其核心是提供对View和ViewMod…

Leetcode 77:组合

给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 未剪枝版&#xff1a; public List<List<Integer>> combine(int n, int k) {backtracking(n,k,1);System.out.println(res);return res;}public void backtracking(int n,int k,int …

【全面介绍下如何使用Zoom视频会议软件!】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…