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中可以使用的其他逻辑运算符:orandnot<>>=<=!=(或<>)等

删除数据

删除表中全部数据: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.mzph.cn/news/727072.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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>…

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

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

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

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

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…

网易家居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 …

砝码称重 蓝桥杯

在C中&#xff0c;fabs()和abs()都用于计算数字的绝对值&#xff0c;但它们之间有一些区别。 fabs(double x)&#xff1a;计算浮点数x的绝对值&#xff0c;返回一个double类型的结果。 abs(int x)&#xff1a;计算整数x的绝对值&#xff0c;返回一个int类型的结果。 数组的默…

1w字带你快速入门Docker

1. 什么是容器 容器是一种轻量级的、可移植的、自包含的软件单元&#xff0c;它包含运行应用程序所需的所有内容&#xff0c;包括代码、运行时、系统工具、系统库和设置。容器与虚拟机类似&#xff0c;但它们更加轻量级&#xff0c;并且依赖于宿主内核。容器可以使用 Docker 等…

太阳能光伏电池的simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 光伏电池的基本结构 4.2 光伏电池的工作原理 5.完整工程文件 1.课题概述 太阳能光伏电池的simulink建模与仿真.分析不同光照温度&#xff0c;光照强度下的光伏电池的U-I特性曲线以及P-V特性曲线。 …

java VR全景商城 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城 小程序商城搭建

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

php安装kafka

我的开发环境是php7.3 ,先来部署两个php扩展&#xff0c;php7.3目录下放librdkafka.dll,ext/php_rdkafka.dll&#xff0c;php.ini增加,[rdkafka] extension php_rdkafka.dll php7.3对应的扩展包链接&#xff1a;PECL :: Package :: rdkafka 看自己php版本对应在这里找PECL :: …