当前位置: 首页 > news >正文

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

 

 

相关文章:

SQL Server特性

一、创建表 在sql server中使用create table来创建新表。 create table Customers( id int primary key identity(1,1), name varchar(5) ) 该表名为Customers其中包含了2个字段,分别为id(主键)以及name。 1、数据类型 整数类型&#xff…...

华为HCIP Datacom H12-821 卷25

1.单选题 Smurf攻击一般使用以下哪种协议 A、TCP B、BGP C、ICMP D、DHCP 正确答案: C 解析: Smurf攻击是一种病毒攻击,以最初发动这种攻击的程序“Smurf”来命名。这种攻击方法结合使用了IP欺骗和ICMP回复方法使大量网络传输充斥目…...

如何在 Selenium Python 中解决验证码 | 2024 完整指南

由于在进行网络自动化时遇到验证码是让许多人感到不知所措的问题。这些验证码专为区分人类用户和自动化脚本而设计,对于使用Selenium进行网络爬虫或自动化任务而言,无疑是一个巨大的挑战。2024年的完全指南将为您提供全面的解决方案,帮助您高…...

ASCII码对照表【2024年汇总】

🍺ASCII相关文章汇总如下🍺: 🎈ASCII码对照表(255个ascii字符汇总)🎈🎈ASCII码对照表(Unicode 字符集列表)🎈🎈ASCII码对照表&#x…...

刷题之买股票的最佳时机(leetcode)

买股票的最佳时机 动态规划入门题。 最简单的模拟式解法&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {//也可以换一种思路&#xff0c;因为只交易一次&#xff0c;那么找出股票最便宜的时候买入&#xff0c;最贵的时候卖出&#xff…...

Apache Seata透过源码解决SeataAT模式整合Mybatis-Plus失去MP特性的问题

本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 Apache Seata透过源码解决SeataAT模式整合Mybatis-Plus失去MP特性的问题 透过源码解决SeataAT…...

1.2 如何让机器说人话?万字长文回顾自然语言处理(NLP)的前世今生 —— 《带你自学大语言模型》系列

本系列目录 《带你自学大语言模型》系列部分目录及计划&#xff0c;完整版目录见&#xff1a;带你自学大语言模型系列 —— 前言 第一部分 走进大语言模型&#xff08;科普向&#xff09; 第一章 走进大语言模型 1.1 从图灵机到GPT&#xff0c;人工智能经历了什么&#xff1…...

【QT】按钮类控件

按钮类控件 按钮类控件1. PushButton2. Radio Button3. Check Box4. Tool Button 按钮类控件 1. PushButton 使⽤ QPushButton 表示⼀个按钮&#xff0c;这也是当前我们最熟悉的⼀个控件了. QPushButton 继承⾃ QAbstractButton . 这个类是⼀个抽象类. 是其他按钮的⽗类. 在…...

RedHat运维-Linux软件包管理基础-RHEL9软件包管理基础

Linux软件包管理基础-RHEL9 1. 对于RHEL9来说&#xff0c;软件包管理基础分为增、删、改、查四个部分。对于增来说&#xff0c;有&#xff1a;增加一个仓库的信息文件、启用一个仓库的信息文件、安装rpm包、解压rpm包、安装软件、安装软件组、更新软件。在这里先讲软件包管理中…...

uniapp----- 判断小程序版本有没有更新

const updateManager uni.getUpdateManager();// 当向小程序后台请求完新版本信息&#xff0c;会进行回调updateManager.onCheckForUpdate(function (res) {console.log(是否有新版本, res.hasUpdate);});// 当新版本下载完成&#xff0c;会进行回调updateManager.onUpdateRea…...

Spring Boot的无缝衔接:深入解析与实践

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ &#x1f680;The begin&#x1f697;点点关注&#xff0c;收藏不迷路&#x1f6a9; 引言 在快速迭代的软件开发环境中&#xff0c;无缝衔接是提升开发效率、降低维护成本、增强系统稳定性的关键。Spring Boo…...

在Linux上查找文件的2个好用的命令

在Linux上查找文件&#xff0c;两个非常好用的命令是find和locate。 find命令 find命令非常强大&#xff0c;可以在指定目录下查找符合条件的文件。你可以根据文件名、文件类型、大小、修改日期等多种条件来查找文件。例如&#xff0c;要在当前目录及其子目录下查找所有扩展名…...

实现WebSocket聊天室功能

实现WebSocket聊天室功能 什么是WebSocket&#xff1f;WebSocket的工作原理服务器端实现客户端实现 在现代Web开发中&#xff0c;实时通信已经变得越来越重要。传统的HTTP协议由于其无状态和单向通信的特点&#xff0c;无法很好地满足实时通信的需求。而WebSocket协议则应运而生…...

qt opencv 应用举例

在Qt中使用OpenCV可以实现各种图像处理和计算机视觉任务。以下是一些Qt与OpenCV联合应用的具体举例&#xff1a; 1. 图像读取与显示 读取图像&#xff1a;使用OpenCV的imread函数可以方便地读取各种格式的图像文件&#xff0c;如.bmp、.jpg、.png等。这个函数返回一个Mat对象…...

QT5.12环境搭建与源码编译

一、概述 QT版本&#xff1a;QT5.12.10 Qt网址&#xff1a;http://download.qt.io/archive/qt/ 编译平台 ubuntu18.04 二、安装交叉编译工具链 1、获取交叉编译工具链 一般如果是编译系统如果有对应的gcc 就是用这个就可以了 比如rk3128 lin…...

Android中android.fg线程和android.ui线程分别代表什么?

Android中android.fg线程和android.ui线程分别代表什么&#xff1f; android.fg线程&#xff08;FgThread&#xff09;&#xff1a; FgThread是Android系统中一个特殊的线程&#xff0c;其类定义大致为public final class FgThread extends ServiceThread。它主要用于提供一个…...

MATLAB 2024b 更新了些什么?

MATLAB 2024b版本已经推出了预览版&#xff0c;本期介绍一些MATLAB部分的主要的更新内容。 帮助浏览器被移除 在此前的版本&#xff0c;当我们从MATLAB中访问帮助文档时&#xff0c;默认会通过MATLAB的帮助浏览器&#xff08;Help browser&#xff09;。 2024b版本开始&…...

SSM高校教师教学质量评估系统-计算机毕业设计源码03344

摘要 在高等教育中&#xff0c;教学质量是培养优秀人才的关键。为了提高教学质量&#xff0c;高校需要建立一套科学、有效的教师教学质量评估系统。本研究采用 SSM技术框架&#xff0c;旨在开发一款高校教师教学质量评估系统。 SSM框架作为一种成熟的Java开发框架&#xff0c;具…...

【Linux进阶】文件系统5——ext2文件系统(inode)

1.再谈inode (1) 理解inode&#xff0c;要从文件储存说起。 文件储存在硬盘上&#xff0c;硬盘的最小存储单位叫做"扇区"&#xff08;Sector&#xff09;。每个扇区储存512字节&#xff08;相当于0.5KB&#xff09;。操作系统读取硬盘的时候&#xff0c;不会一个个…...

华为云简介

前言 华为云是华为的云服务品牌&#xff0c;将华为30多年在ICT领域的技术积累和产品解决方案开放给客户&#xff0c;致力于提供稳定可靠、安全可信、可持续创新的云服务&#xff0c;赋能应用、使能数据、做智能世界的“黑土地”&#xff0c;推进实现“用得起、用得好、用得放心…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...