1_数据库操作

(1)注释:

-- 单行注释
/**/ 多行注释

(2)创建数据库:create database 数据库名

-- create database 数据库名
create  database db_first;

(3)查询数据库:

if exsists(select * from sysdatabases where name='StudentManageDB')

(4)删除数据库:drop database 数据库名

-- drop database 数据库名
drop database  db_first;

(5)创建变量,可以声明的时候赋值,也可以先声明再赋值

declare  @currentPage int;
declare  @pageSize int;
set @currentPage=1;
set @pageSize=10;

2_数据表操作

(1)创建表:creat table 表明(列名,数据类型)

  • not null:设定该列非空,

  • primary key,设定该列为主键,

  • identity(1,1) 设定该列自增,从1开始自增,增幅为1

create table Teachers(Id int not null primary key identity(1,1),TeacherName varchar(30)  not null,Age int   not null  default(20),Sex int )

(2)查询表

if exists (select * from sysobjects where name='StudentClass')

(3)删除表

drop table StudentClass

3_插入数据

(1)表的插入 :insert into 表名(列名) values (值),

插入的时候 表名后面填写列名,values 后面填写值 值和列名要--对应

当主键设置了标识规范的时候,不让插入,只有吧IDENTITY_INSERT设置为ON才能插入

数据库对大小写不敏感,IDENTITY_INSERT与identity_insert一样

GETDATE() 是SQL_server 中得函数 用来获取当前日期

--插入
insert  into Teachers (TeacherName,Age) values ('孙老师',30)
insert  into Teachers (TeacherName,Age,Sex) values ('孙老师',20,0)
SET IDENTITY_INSERT  Teachers ON;
insert  into Teachers (Id,TeacherName,Age,Sex) values (6,'王老师',20,0)
SET IDENTITY_INSERT  Teachers OFF;
insert  into  Students(StuName,StuAge,Birthday) values ('张三',20,'2025-02-01 14:13:45');
insert  into  Students(StuName,StuAge,Birthday) values ('韩李四',20,GETDATE());
--插入多条数据
insert into  Teachers(TeacherName,Age)
--自定义结果集  开发者用多条数据合并而来
select '王老师1',30
union all
select '王老师2',30
union all
select '王老师3',30

4_修改数据

(1)修改数据:update 表名 set 修改的列名='值' where 条件

or 或者,满足一项就可以,相当于C#中的||

and 并且 满足所有的条件 相当于&&

不加修改条件的时候会修改所有的数据,切记加条件

update  Students set StuName='张三' where  Id=7;
update  Students set StuName='王大陆3',StuAge=10 where Id=6 or Id=5;  -- or  ===> ||
update  Students
set StuName='4563' 
where Id=6 and StuAge=100;  ---> and ===> && 

5_删除数据:

delete from 表名:删除数据 ,标识符不重置,可以使用where添加删除条件

truncate table 表名:删除清空数据 保留表结构 标识规范重置,不能添加where 谨慎使用

delete from  Teachers;
delete from  Teachers where  Id=2;
delete from  Teachers where  TeacherName ='孙老师';
truncate table Teachers  ;

6_查询数据

6.1_基本查询

(1)查询语句 会查到一个结果集 把结果集返回出来

select * from 表明: * all 全部列

-- * all  全部列
select  * from  Students;

(2)查询部分行,使用 'as' 或使用 '=' 重新命名字段

--查询部分列
select  StuName,StuAge from  Students;
--  查询替换列名
select TeacherName as 老师姓名,Age as  年龄 from Teachers
--使用等号重命名字段
select 出生年月=Birthday from Students where Gender='男'

(3)条件查询,多个并列条件使用 and 连接,多个或条件使用 or 连接

--加 where 筛选  
select  * from  Students  where Id =1;--查询id等于1的全部数据
select  StuName  from  Students  where Id =4; --查询id等于4的学生姓名
select  StuName  from  Students  where Id =4  and StuAge=10;
select  StuName  from  Students  where Id =4  or StuAge=10;

(4)使用加号可以将多列数据显示到同一列中

  • + 连接的数据类型必须兼容

  • 如果使用 + 连接字符型数据,结果为字符串数据的连接

  • 如果使用 + 连接数值型数据,结果为数值的和

select 学号=StudentId,总成绩=CSharp + SQLServer from ScoreList

(5)查询空列

select * from ScoreList where SQLServer is null

(6)使用常量列:增加新的一列

select StudentName, Gender, Birthday, Age, StudentIdNo,学校='111' from Students where Gender='男' and Age > 24

(7)限制固定行数 top 顶端的,

  • top n 最上边的n行数据

  • top 40 percent 返回百分之多少行

select top 4 StudentName, Gender, Birthday from Students
select top 40 percent StudentName, Gender, Birthday from Students

(8)排序

升序:asc 默认为升序排列,可省略

降序:desc

select StudentId, (CSharp + 5) as C#, DB=SQLServer 
from ScoreList 
where (CSharp + 5) > 80 
order by CSharp ASCselect StudentId, (CSharp + 5) as C#, DB=SQLServer 
from ScoreList 
where (CSharp + 5) > 80 
order by CSharp DESC

(9)多列排序,前一个条件相等时,自动按照下一个条件排序。

select StudentId, (CSharp + 5) as C#, DB=SQLServer from ScoreList where (CSharp + 5) > 80 order by CSharp DESC, SQLServer DESC

6.2_模糊查询

(1)like:使用 like 查询时,字段中的内容并不一定与查询内容完全匹配,只要字段中含有这些内容即可。

select  * from  Students   where StuName   like  '王%';-- 以 '王' 开头
select  * from  Students   where StuName   like  '%2';-- 以 '2' 结尾
select  * from  Students   where StuName   like  '%2%';--  包含 '2'  2 在结尾 中间 开头 都可以匹配

(2)between:把某一字段中的值在特定范围内的记录查询出来,使用 between包含断点值(闭合区间)。

-- between 之间 
select  StuName  from  Students  where Id   between 5 and 8;select StudentName, Birthday from Students where Birthday between '1999-01-01' and '2001-05-05'
--建议不要比较字符串
-- select  * from  Students   where StuName >= '吴亦凡'  and StuName<='王大陆'

(3)IN:即把某一字段中内容与所列出的查询内容列表匹配的记录查询出来(相当于把要查询的内容通过枚举的方式一一列出来),更精确一些。

IN: 指定某列的值必须在指定的列表中,

NOT IN :操作符用于指定某列的值不能在指定的列表中。

--IN操作符用于指定某列的值必须在指定的列表中。
select  * from  Students   where StuName  in  ('张三','李四');
-- NOT IN操作符用于指定某列的值不能在指定的列表中。
select  * from  Students   where StuName  not  in  ('张三','李四');
6.2_多表联查

(1)连接分类

  • 外连接(outer)

    • 左连接:Left,左表为主,返回左表中的所有行,如果左表中行在右表中没有匹配行,则结果中右表中的列返回空值。

    • 右连接,right,右表为主,返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值。

    • 全连接:返回左表和右表中的所有行。当某行在另一表中没有匹配行,则另一表中的列返回空值

  • 内连接(inner)

    • 等值连接:在连接条件中使用等于号(=)运算符,其查询结果中列出被连接表中的所有列,包括其中的重复列。

    • 不等链接:在连接条件中使用除等于号之外运算符(>、<、<>、>=、<=、!>和!<)

  • 交叉连接

    • 不带where条件子句:它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积(例如:T_student和T_class,返回4*4=16条记录),如果带where,返回或显示的是匹配的行数

    • 有where子句:往往会先生成两个表行数乘积的数据表,然后才根据where条件从中选择。cross join后加条件只能用where,不能用on

--多表查询
--外连接
--左连
select * from CustomerInfo as C
left outer join AddressInfo as A on C.AddressId=A.AddressId;
--左连
--as 可以省略,outer也可以省略,默认为outer
select * from CustomerInfo as C
left join UserInfo U on C.CreateUaerId=U.UserId;
--右连接
select * from CustomerInfo as C
right join UserInfo U on C.CreateUserId=U.UserId;
--全连接
select * from CustomerInfo as C
full join UserInfo U on C.CreateUserId=U.UserId;
--设置显示的列
select C.CustomerId,C.CustomerName,C.Sex,C.Age,C.Phone,A.ProvinceName,A.City,A.Area from CustomerInfo as  C 
left outer  join AddressInfo as A on C.AddressId=A.AddressId;
--列可使用+显示在一列
select C.CustomerId,C.CustomerName,C.Sex,C.Age,C.Phone,A.ProvinceName+A.City+A.Area   DataiAddress from CustomerInfo as  C 
left  outer  join AddressInfo as A on C.AddressId=A.AddressId;--内连接
--等值连接
select * from CustomerInfo as  C 
inner   join UserInfo U  on  C.CreateUserId=U.UserId;
--不等连接
select * from CustomerInfo as C
inner join UserInfo U on CreateUserId<>U.UserId;
--不等连接
select C.CustomerId,C.CustomerName,C.AddressId,A.AddressId, A.ProvinceName+A.City+A.Area as  DataiAddress from CustomerInfo as C
inner join AddressInfo as A on C.AddressId<>A.AddressId;--交叉连接
--不带where
select C.CustomerId,C.CustomerName,C.Age,A.AddressId, A.ProvinceName+A.City+A.Area as  DataiAddress  from CustomerInfo as C 
cross join  AddressInfo as A
--带where
select C.CustomerId,C.CustomerName,C.Age,A.AddressId, A.ProvinceName+A.City+A.Area as  DataiAddress  from CustomerInfo as C 
cross join  AddressInfo as A where C.AddressId=A.AddressId;
6.3_分组查询与统计

(1)使用Group by分组

分组 Group By 的标准,一般要出现在展示项中,一般形如:select 聚合函数, xx, [不要出现非聚合项] from table_name group by xx

select COUNT(*) as 总人数, ClassName from Students
inner join StudentClass on StudentClass.ClassId = Students.ClassId
group by ClassNameselect Score ,Count(Score) as ScoreCount from StudentInfo--查询
where Score>=90 and Score<=100			--筛选
group by Score							--分组
order by ScoreCount desc,Score asc;		--排序

(2)分组统计筛选 having:

分组后筛选:借助having子句,having子句,只能配合group by使用

having count(Score)>=4专门对分组后的结果进行二次筛选,列的别名不能当作having条件

select  Score ,Count(Score) as ScoreCount from StudentInfo
where Score>=90 and Score<=100			
group by Score	having count(Score)>=4
order by ScoreCount desc,Score asc;	
--having的其他作用
-- 查询重复的字段
select StudentId from ScoreList group by StudentId having COUNT(*) > 1
select * from ScoreList
where StudentId in (select StudentId from ScoreList group by StudentId having COUNT(*) > 1)
order by StudentId

(3)嵌套查询,

select * from 
(
select  Score ,Count(Score) as ScoresCount from StudentInfo
where Score>=90 and Score<=100		
group by Score
)
as MyTable where ScoresCount>=4

(4)分组查询对比

where子句:

  • 从数据源中去掉不符合其搜索条件的数据

group by 子句:

  • 搜集数据行到各个组中,统计函数为各个组计算统计值

having 子句:

  • 在分组结果中,去掉不符合其组搜索条件的各组数据行

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

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

相关文章

python中的filter函数

目录 定义与参数说明 特点 使用场景 常用操作 筛选偶数 去除空字符串 筛选正数 筛选字典 配合集合与元组 注意事项 定义与参数说明 filter函数是Python内置的高阶函数之一&#xff0c;用于筛选可迭代对象中的元素&#xff0c;根据返回值的布尔结果&#xff08;True 或…

BERT(Bidirectional Encoder Representations from Transformers)模型详解

一、BERT 简介BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是由 Google 在 2018 年提出的一种预训练语言表示模型。它基于 Transformer 编码器结构&#xff0c;首次提出了 双向上下文建模 的方法&#xff0c;大幅度提升了自然语言处理…

【开题答辩全过程】以 基于Springboot+微信小程序的网上家教预约系统的设计与实现-开题为例,包含答辩的问题和答案

个人简介&#xff1a;一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧…

课小悦系列智能耳机上市,用硬核科技为教育赋能

在人工智能与教育深度融合的浪潮中&#xff0c;深圳课小悦科技有限公司以“智慧教育专家”的姿态崭露头角。这家深耕智能教育硬件的创新企业&#xff0c;于2025年8月正式推出革命性产品H360PRO系列教考耳机&#xff0c;为语言学习场景提供颠覆性解决方案。创新基因&#xff1a;…

[react] class Component and function Component

我对react的用法理解还一直停留在多年以前&#xff0c;说明这段时间我没有更新react的知识。我大脑中记得还是使用Class Component this.setState&#xff0c;可是今天看了看react的文档&#xff0c;发现怎么不一样了&#xff0c;用的都是function useState的方式了。你知道这…

以太坊智能合约地址派生方式:EOA、CREATE 和 CREATE2

1. 引言 在以太坊上&#xff0c;智能合约可以通过以下三种方式之一进行部署&#xff1a; 1&#xff09;由外部账户&#xff08;Externally Owned Account, EOA&#xff09;发起交易&#xff0c;其中 to 字段设为 null&#xff0c;而 data 字段包含合约的初始化代码。2&#x…

基于RISC-V架构的国产MCU在eVTOL领域的应用研究与挑战分析

摘要电动垂直起降飞行器&#xff08;eVTOL&#xff09;作为未来城市空中交通的重要组成部分&#xff0c;对嵌入式控制系统的性能、可靠性和安全性提出了极高的要求。RISC-V作为一种新兴的开源指令集架构&#xff0c;为国产微控制器&#xff08;MCU&#xff09;的研发和应用带来…

深度学习中的“集体智慧”:Dropout技术详解——不仅是防止过拟合,更是模型集成的革命

引言&#xff1a;从“过拟合”的噩梦说起 在训练深度学习模型时&#xff0c;我们最常遇到也最头疼的问题就是过拟合&#xff08;Overfitting&#xff09;。 想象一下&#xff0c;你是一位正在备考的学生&#xff1a; 欠拟合&#xff1a;你根本没学进去&#xff0c;所有题都做错…

在JavaScript中,比较两个数组是否有相同元素(交集)的常用方法

方法1&#xff1a;使用 some() includes()&#xff08;适合小数组&#xff09;function haveCommonElements(arr1, arr2) {return arr1.some(item > arr2.includes(item)); }// 使用示例 const arrA [1, 2, 3]; const arrB [3, 4, 5]; console.log(haveCommonElements(ar…

心路历程-Linux的系统破解详细解说

CentOS7系统密码破解 密码破解是分两种情况的&#xff1b;一种是在系统的界面内&#xff0c;一种就是不在系统的页面&#xff1b; 今天我们就来聊聊这个系统破解的话题&#xff1b; 1.为什么需要破解密码&#xff1f;–>那当然是忘记了密码&#xff1b;需从新设置密码 2.但是…

IDE和AHCI硬盘模式有什么区别

IDE&#xff08;Integrated Drive Electronics&#xff09;和 AHCI&#xff08;Advanced Host Controller Interface&#xff09;是硬盘控制器的工作模式&#xff0c;主要区别在于性能、功能兼容性以及对现代存储设备的支持程度。以下是详细对比和分析&#xff1a;一、本质区别…

【密码学实战】密码实现安全测试基础篇 . KAT(已知答案测试)技术解析与实践

KAT 测试技术解析 在密码算法的安全性验证体系中&#xff0c;Known Answer Test&#xff08;KAT&#xff0c;已知答案测试&#xff09;是一项基础且关键的技术。它通过 “已知输入 - 预期输出” 的确定性验证逻辑&#xff0c;为密码算法实现的正确性、合规性提供核心保障&…

如何用Redis作为消息队列

说明&#xff1a;以前背八股文&#xff0c;早就知道 Redis 可以作为消息队列&#xff0c;本文介绍如何实现用 Redis 作为消息队列。 介绍 这里直接介绍 yudao 框架中的实现。yudao 是一套现成的开源系统框架&#xff0c;里面集成了许多基础功能&#xff0c;我们可以在这基础上…

解决 uniapp 修改index.html文件不生效的问题

业务场景&#xff1a;需要在H5网站设置追踪用户行为&#xff08;即埋点&#xff09;的script代码。 问题&#xff1a;无论如何修改根目录下的index.html文件都不会生效 问题原因&#xff1a;在 manifest.json 文件中有个【web配置】—>【index.html模版路径】&#xff0c;…

C语言第十一章内存在数据中的存储

一.整数在内存中的存储在计算机内存中&#xff0c;所有的数字都是以二进制来存储的。整数也不例外&#xff0c;在计算机内存中&#xff0c;整数往往以补码的形式来存储数据。这是为什么呢&#xff1f;在早期计算机表示整数时&#xff0c;最高位为符号位。但是0却有两种表示形式…

K8s部署dashboard平台和基本使用

Kubernetes 的默认 Dashboard 主要用于基本的资源查看与管理,如查看 Pod、Service 等资源的状态,进行简单的创建、删除操作 。然而,在企业级复杂场景下,其功能显得较为局限。 与之相比,开源的 Kubernetes Dashboard 增强版工具 ——Dashboard UI ,为用户带来了更强大的功…

JavaEE进阶-文件操作与IO流核心指南

文章目录JavaEE进阶文件操作与IO流核心指南前言&#xff1a;为什么需要文件操作&#xff1f;一、java.io.File 类的基本用法1.1 文件路径1.2 常用方法示例获取文件信息创建和删除文件目录操作文件重命名和移动二、IO流的基本概念2.1 核心困境&#xff1a;字节流 vs. 字符流字节…

动手学深度学习03-线性神经网络

动手学深度学习pytorch 参考地址&#xff1a;https://zh.d2l.ai/ 文章目录动手学深度学习pytorch1-第03章-线性神经网络1. 线性回归1.1 什么是线性回归&#xff1f;1.2 如何表示线性回归的预测公式&#xff1f;2. 损失函数2.1 什么是损失函数&#xff1f;2.2 如何表示整个训练集…

如何安全解密受限制的PDF文件

当你需要从PDF中复制一段文字用于报告或引用时&#xff0c;如果文件被禁止复制&#xff0c;解密后即可轻松提取内容&#xff0c;避免手动输入的麻烦。它解压后双击主程序即可运行&#xff0c;无需安装&#xff0c;即开即用&#xff0c;十分便捷。建议先将界面语言切换为中文&am…

利用DeepSeek辅助编译c#项目tinyxlsx生成xlsx文件

继续在寻找比较快的xlsx写入库&#xff0c;从https://github.com/TinyXlsx/TinyXlsx/ 看到它的测试结果&#xff0c;比c的openXLSX快几倍&#xff0c;就想试用一下&#xff0c;仔细一看&#xff0c;它是个c#项目&#xff0c;需要.NET 8.0。 于是上微软网站下载了.NET 8.0 SDK&a…