C#知识点-21(初识数据库)

数据库与内存、文件的比较

内存:
        优点:存取速度快
        缺点:-容量小
                   -断电后,数据不会保存
文件:
        优点:数据可以持久化保存
        缺点:-读取速度慢
                   -编码格式不好控制
数据库:
        优点:-容量大
                   -读取速度快
                   -统一的编码格式
        缺点:使用难度较高

SqlServer是一个关系型数据库

优点:性能高。相较于Mysql,SqlServer支持更大的数据量和更高的并发性能,可以更好的处理复杂的查询,提供更好的安全性和可靠性

关系模型概念:以行和列的形式进行数据的存储(二维表),便于用户理解

登录数据库

1、通过客户端软件登录        [.][127.0.0.1][ip地址]
-- .:本机
--127.0.0.1本机默认ip
--网络ip+SqlServer身份验证

• SQLServer 中 4 个系统数据库: Master 、 Model 、 Msdb 、 Tempdb 。
• 1 、 Master 数据库是 SQLServer 系统最重要的数据库,它记录了 SQLServer 系统的所有系统信息。
• 2 、 model 数据库用作在 SQLServer 实例上创建的所有数据库的模板。
• 3 、 Msdb 数据库是代理服务数据库,为其报警、任务调度和记录操作员的操作提供存储空间。
• 4 、 Tempdb 是一个临时数据库,它为所有的临时表、临时存储过程及其他临时操作提供存储空间。
数据类型

使用SQL语句创建数据库

使用SQL语句创建数据表

插入数据

插入一条数据:insert into Class(cid,cname,cdescription) values(8,'八班','张三')

一次性插入多条数据:

insert into Class(cName)

select 'bbb' union all

select 'ccc' union all

select 'ddd' union all

更新数据

更新一个列:update Student set sSex = ‘男’

更新多个列: update  Student set sSex ='女',sAge = 18,sBirthday='1989-8-8'

更新一部分数据: update  Student set sClassId= 4 where sClassId = 1,用where语句表示只更新Name是’tom’的行,注意SQL中等于判断用单个=,而不是==。

Where中还可以使用复杂的逻辑判断update Student set sAge=30 where sName='华佗' or sAge<25 ,or相当于C#中的||(或者)

所有学生的年龄加1update Student set sAge = sAge + 1

update Student set sClassId=6

where (sAge>20 and sAge<30) or(sAge=50)

Where中可以使用的其他逻辑运算符:or、and、not、<、>、>=、<=、!=(或<>)等

删除数据

删除表中全部数据:DELETE  FROM  Student。

Delete只是删除数据,表还在,和Drop Table不同。

Delete 也可以带where子句来删除一部分数据:DELETE FROM Student WHERE sAge > 20 

==========================

truncate table student 的作用与delete from student一样,都是删除student表中的全部数据,区别在于:

1.truncate语句非常高效。由于truncate操作采用按最小方式来记录日志,所以效率非常高。对于数百万条数据使用truncate删除只要几秒钟,而使用delete则可能耗费几小时。

2.truncate语句会把表中的自动编号重置为默认值。

3.truncate语句不触发delete触发器。

 约束

数据库约束是为了保证数据的完整性(正确性)而实现的一套机制

• 非空约束
• 主键约束 (PK) primary key constraint 唯一且不为空
• 唯一约束 (UQ)unique constraint 唯一,允许为空,但只能出现一次
• 默认约束 (DF)default constraint 默认值
• 检查约束 (CK)check constraint 范围以及格式限制
• 外键约束 (FK)foreign key constraint 表关系
– -on delete cascade  级联删除 

数据检索-查询 

执行备注中的代码创建测试数据表。
简单的数据检索 : SELECT * FROM Student
只检索需要的列 : SELECT sName FROM Student 、 SELECT sName,sAge FROM Student( select 执行过程 )
列别名: SELECT sName AS 姓名 , sAge AS 年龄 , sBirthday AS 出生日期 FROM Student
使用 where 检索符合条件的数据: SELECT sName FROM Student WHERE sSex =‘ 女 ’ 。
还可以检索不与任何表关联的数据: select 1+1;select select getdate ();
Top 获取前几条数据
• 获得年纪最小的 5 个学生
• 获得年纪最大的 10% 的学生
Distinct 去除重复数据
• select distinct sName from student
• select distinct sName,sAge from student
DISTINCT 是对整个结果集进行数据重复处理的,而不是针对某一个列
distinct&top 配合使用

 模糊查询:

查询所有姓张的同学
• Select * from student where left(sName,1)=‘ 张 ‘   看上去很美 , 如果改成查询名字中带亮的学生怎么做?
换一种做法 like 
• Select  * from student where sName like ‘ 张 %’    会吧所有姓张的都查询到,现在我想查询姓张并且名字是一个字的学生?
• Select  * from student where sName like ‘% 亮 %’
通配符 % 多字符匹配的通配符,它匹配任意次数(零或多个)出现的任意字符
通配符 _ 单字符匹配,它匹配单个出现的字符
[] 只匹配一个字符  并且这个字符必须是 [] 范围内的    [0-9]  [a-z]  [ a,b,c ]
查询姓张或者姓关的同学
not 与 like 一起使用: not like ….

 
空值处理:
l 数据库中,一个列如果没有指定值,那么值就为 null ,这个 null 和 C# 中的 null ,数据库中的 null 表示“ 不知道 ”,而不是表示没有。因此 select null+1 结果是 null ,因为“不知道”加 1 的结果还是“不知道”。
l select * from score where english = null ;
l select * from score where english != null ; 都没有任何返回结果,因为数据库也“不知道”。
l SQL 中使用 is null 、 is not null 来进行空值判断: select * from score where english is null ; select * from score where english is not null ;
l ISNULL ( check_expression , replacement_value )

 

数据排序:

ORDER BY 子句位于 SELECT 语句的末尾,它允许指定按照一个列或者多个列进行排序,还可以指定排序方式是升序(从小到大排列, ASC )还是降序(从大到小排列, DESC )。
按照年龄升序排序所有学生信息的列表: SELECT * FROM  Student ORDER BY sAge ASC
l 查询班级中年龄最大的前三个学生。
按照英语成绩从大到小排序,如果英语成绩相同则按照数学成绩从大到小排序 : SELECT * FROM  Score ORDER BY english DESC,math DESC
ORDER BY 子句要放到 WHERE 子句之后 : SELECT * FROM  Score where english >=60 and math>=60 ORDER BY english DESC,math DESC
Order by 语句一般要放到所有语句的后面,就是先让其他语句进行筛选,全部筛选完成后,最后排序一下。

数据分组:

select  语句中可以使用 group by  子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息
按照班级进行分组统计各个班级的人数
每个班级的平均年龄
男生有多少个?女生有多少个人?
GROUP BY 子句必须放到 WHERE 语句的之后
每个班男同学的个数
没有出现在 GROUP BY 子句中的列是不能放到 SELECT 语句后的列名列表中的 (聚合函数中除外)
• 错误: select sClassId,count ( sName ), sAge from student group by sClassId
• 正确: select sClassId,count ( sName ),avg( sAge ) from student group by sClassId

 Having语句:

查询班级人数大于 3 的班级
Having 是 Group By 的条件对分组后的数据进行筛选
在 Where 中不能使用聚合函数,必须使用 Having , Having 要位于 Group By 之后,
查询班级人数超过三个人的班级
select sClassId,count ( sName ) from student group by sClassId having count( sName )>3
注意 Having 中不能使用未参与分组的列, Having 不能替代 where 。作用不一样, Having 是对组进行过滤。
查询男生个数大于 5 的班级

 

select sClassId,count(sName) from student where count(sName)>3 group by sClassId
聚合函数不应出现在WHERE 子句中select sClassId,count(sName) from student group by sClassId having count(sName)>3Group by 前可以有where,是对筛选过后的数据进行分组
select sClassId,count(sName) from student where sSex='男' group by sClassId select sClassId,count(sName) from student group by sClassId having sAge>30
//错,having是对分组后信息的过滤,能用的列和select中能用的列是一样。
//having无法代替where。

SQL语句的执行顺序

5>…Select 5-1> 选择列 ,5-2>distinct,5-3>top
1>…From 表
2>…Where 条件
3>…Group by 列
4>…Having 筛选条件
6>…Order by 列
select sclassid , count (*) from student where ssex = ' 男 ' group by sclassid having count (*) > 2

联合结果集:

简单的结果集联合:
• select tName,tSex from teacher union
• select sName,sSex from student

合并老师表和学生表

基本的原则:每个结果集必须有相同的列数;每个结果集的列必须类型相容。
• select tName,tSex,-1 from teacher union
• select sName,sSex,sClassId from student
联合:将多个结果集合并成一个结果集。 union( 去除重复 ) 、 union all

Union all:

• select tName,tSex from teacher union
• select sName,sSex from student

UNION合并两个查询结果集,并且将其中完全重复的数据行合并为一条

• select tName,tSex from teacher union all
• select sName,sSex from student

Union因为要进行重复值扫描,所以效率低,因此如果不是确定要合并重复行,那么就用UNION ALL

 

一次插入多条数据
insert into Score(studentId,english,math)
select 1,80,100 union
select 2,60,80 union
select 3,50,59 union
select 4,66,89 union
select 5,59,100--把现有表的数据插入到新表(表不能存在)
--select * into newStudent from student
--把现有表的数据复制到一个已存在的表(backupStudent 表必须已经存在)
--insert into backupStudent select * from students

字符串函数

LEN() :计算字符串长度 查询名字大于 2 的人
LOWER() 、 UPPER () :转小写、大写
LTRIM() :字符串左侧的空格去掉
RTRIM () :字符串右侧的空格去掉
LTRIM(RTRIM('         bb        '))
LEFT() 、 RIGHT()  截取取字符串
SUBSTRING( string,start_position,length )

参数string为主字符串,start_position为子字符串在主字符串中的起始位置,length为子字符串的最大长度。SELECT  SUBSTRING('abcdef111',2,3)

Replace

日期函数

GETDATE() :取得当前日期时间
DATEADD ( datepart , number, date ) ,计算增加以后的日期。参数 date 为待计算的日期;参数 number 为增量;参数 datepart 为计量单位,可选值见备注。 DATEADD(DAY, 3,date) 为计算日期 date 的 3 天后的日期,而 DATEADD(MONTH ,-8,date) 为计算日期 date 的 8 个月之前的日期
DATEDIFF ( datepart , startdate , enddate ) :计算两个日期之间的差额。 datepart 为计量单位,可取值参考 DateAdd 。
统计不同入学年数的学生个数: select DateDiff(year,sInDate,getdate())
,count(*) from student Group by DateDiff(year,sInDate,getdate())
DATEPART ( datepart,date ) :返回一个日期的特定部分
Select Year( getdate ())/Month()/Day
求本月出生的学生
统计学生的生日年份个数: select DatePart(year,sBirthday),count(*)
from student
group by DatePart(year, sBirthday)


空值处理函数:

执行备注中的代码
如果是 null 则用 value 来代替。
ISNULL( expression,value ) :如果 expression 不为空则返回 expression ,否则返回 value 。
select studentId,isnull (english,0) from score

 

类型转换函数:

Select ‘您的班级编号’ + 1  错误这里 + 是数学运算符
CAST ( expression AS data_type )
CONVERT ( data_type , expression)
Round() 、 Ceiling() 、 numeric(18,4) 保留两位小数
截取日期
对日期的转换。转换成各种国家格式的日期。
• select convert(varchar( 20 ),getdate(), 104 )
• Style 的格式,查 sql 帮助。(输入 convert 函数查询)
• 将日期转换为指定格式的字符串。 日期→字符串

 

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

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

相关文章

mprpc分布式RPC网络通信框架

mprpc 项目介绍 该项目是一个基于muduo、Protobuf和Zookeeper实现的轻量级分布式RPC网络通信框架。 可以把任何单体架构系统的本地方法调用&#xff0c;重构成基于TCP网络通信的RPC远程方法调用&#xff0c;实现同一台机器的不同进程之间的服务调用&#xff0c;或者不同机器…

下载无水印抖音视频

在抖音看到某些视频想下载&#xff0c;却出现无法保存在本地【显示"作品暂时无法保存,链接已复制"】。或者下载的视频有水印。 而某些微信小程序下载可能需要付费或者有水印。其实我们可以直接使用电脑浏览器直接下载。 举个例子: 这是来自王道官方账号的一条视频链…

基于springboot的某大学外卖系统的实现(源码+论文)

文章目录 目录 文章目录 前言 一、功能设计 二、功能实现 1 后台登录 2管理员界面 3员工信息管理 4客户信息管理 三、库表设计 四、论文 前言 如今&#xff0c;信息化不断的高速发展&#xff0c;社会也跟着不断进步&#xff0c;现今的社会&#xff0c;各种工作都离不开信息化技…

Python基础二

一、变量 在编程中&#xff0c;变量是用来存储数据值的名称。在 Python 中&#xff0c;变量是动态类型的&#xff0c;这意味着你可以将任何类型的数据分配给一个变量&#xff0c;而不需要提前声明变量的类型。 1、全局变量 在函数外部定义的变量是全局变量&#xff0c;可以在程…

boost 编译

参考博客&#xff1a;vs2019 boost 入坑指南 boost下载 官方网站&#xff1a;https://www.boost.org/ 下面以boost_1_73_0为例&#xff1a; boost编译 解压boost_1_73_0.zip运行bootstrap.bat&#xff08;此时目录下会生成b2.exe&#xff09;编译boost b2 install --build…

【vue2项目总结】——动态渲染

文章目录 主页渲染封装接口页面调用传到子组件 搜索列表渲染根据关键字搜索分类id搜索 主页渲染 封装接口 封装准备接口 api/home.js import request from /utils/request// 获取首页数据 export const getHomeData () > {return request.get(/page/detail, {params: {p…

springboot3.x集成SpringDoc Swagger3

近期将springboox2.x升级到了3.x&#xff0c;索性将swagger2也同步升级到swagger3&#xff0c;具体过程如下。 一、添加maven依赖 <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>…

详解Java中的注解

在Java中&#xff0c;注解(Annotation)引入始于Java5&#xff0c;用来描述Java代码的元信息&#xff0c;通常情况下注解不会直接影响代码的执行&#xff0c;尽管有些注解可以用来做到影响代码执行。 注解可以做什么 Java中的注解通常扮演以下角色 编译器指令构建时指令运行时…

信息系统项目管理

信息系统项目管理 文章目录 信息系统项目管理前言一、信息系统管理介绍二、信息系统项目管理基础三、项目立项管理四、项目整体管理五、项目变更管理六、项目收尾管理七、项目范围管理八、项目进度管理九、项目成本管理十、项目质量管理十一、项目人力资源管理十二、项目沟通管…

Java的数据类型与变量详解

数据类型与变量 文章目录 数据类型与变量前言一、数据类型1. 基本数据类型2. 引用数据类型 二、包装类型1. 包装类型简介2. 自动装箱与拆箱3. 包装类型的常用方法4. 注意事项5. 示例 三、变量1. 变量声明2. 变量赋值3. 变量声明与赋值同时进行4. 示例 四、总结 前言 在Java编程…

用户角色的重要性:确保财务数据安全的最佳方式

在企业的财务管理业务中&#xff0c;一个人几乎不可能完成所有的财务记账任务&#xff0c;例如设定预算、发票审批等等&#xff0c;至少不能有效地执行。最为明智的方式&#xff0c;是将这些任务分派给特定的人员&#xff0c;比如部门经理、财务经理或者销售、市场人员等等。 但…

C++读取NC数据的结果与真实数值不一致的解决方法

本文介绍基于C 语言的netCDF库读取.nc格式的栅格文件时&#xff0c;代码读取到的数据与栅格文件的实际数据不一致的解决方法。 最近&#xff0c;由于需要读取ERA5气象数据&#xff0c;因此使用C 语言中的netCDF库读取.nc格式文件。其中&#xff0c;偶然发现在Visual Studio的代…

Acwing枚举、模拟与排序(二)

回文日期 原文链接&#xff1a;https://www.acwing.com/problem/content/468/ 由于只有八位数&#xff0c;而且回文串左右对称&#xff0c;因此可以只枚举左半边。然后判断&#xff1a; 整个八位数日期是否合法是否在范围内 一共枚举1e4个数。判断过程是常数级别的&#xff0…

CC攻击的特征和防护措施

随着互联网的快速发展&#xff0c;网络攻击日益频繁。在目前的各种网络攻击中&#xff0c;CC攻击是一种常见的网络攻击手段之一。CC攻击&#xff08;也称为DDoS攻击&#xff09;是指通过大量请求或恶意流量向目标网站或服务器发送请求&#xff0c;以使其服务不可用。可能大家都…

Error:java:JDK isn‘t specified for module “模块名称“

可能是创建模块后不小心删掉了.idea.或.idea出错 只要删除.idea&#xff0c;close project出去&#xff0c;重新进让idea自动下载

VS2022打包C#安装包(最新、最全)

开发c#的一个小工具到打包环境碰壁了&#xff0c;在网上找了很多资料耶踩了很多坑&#xff0c;耗时1hour才打包完毕&#xff0c;避免以后碰到类似的问题再次记录&#xff0c;自认为步骤比较全面&#xff0c;如果有帮助麻烦点个赞呗&#xff01;&#xff01;&#xff01; 一、Mi…

QT状态机入门

Qt状态机&#xff08;QStateMachine&#xff09;是Qt框架中用于管理状态和状态转换的一种工具。它允许您将程序的行为分解为一系列离散的状态&#xff0c;并根据一定的条件进行状态之间的转换。Qt状态机提供了一个灵活的、可视化的方式来描述程序的状态和状态转换关系。 优点&…

网易家居315特别策划 | MLILY梦百合荣获2024年度家居行业服务榜样

3月,网易家居“寻找家居服务榜样”315特别策划如期而至,重磅奖项“2024年度家居行业服务榜样”揭晓,该奖项授予在家居服务方面做出突出贡献、起到示范引领作用的先进企业。其中,MLILY梦百合荣获“2024年度家居行业服务榜样”重磅奖项。 伴随市场需求演变、企业发展驱动、产业升…

echarts使用总结

最近项目大量的曲线图,柱状图,饼图...总结一下使用过程中的小问题及解决方法 . 1.当x轴太拥挤,x轴数据不能全部展示怎么办? 这时候就只需要在xAxis的axisLabel对象中添加属性 interval : 0 就可以显示全部数据 , interval 属性是用来调整x轴数据的间距的 , 数值越大间距越大…

Linux基础命令[11]-find

文章目录 1. find 命令说明2. find 命令语法3. find 命令示例3.1 不加参数3.2 按照时间3.3 -empty&#xff08;空白文件或目录&#xff09;3.4 -name&#xff08;名称查找&#xff09;3.5 -size&#xff08;大小查找&#xff09;3.6 -type&#xff08;类型查找&#xff09;3.7 …