SQL Server基础(一)

SQL —-查询语句

sql SERVER 和.net结合的和很好

绝大多数数据库,都需要数据库服务器才能运行

表间关联,外键

SQL Server数据库中不同数据类型的含义

数据类型含义
int每个数值占用 4字节,-2,147,483,648到2,147,483,647之间的整数
smallint2个字节 存储范围是-32,768 到 32,767 之间的整数,用来存储限定在特定数值范围内的数据。
tinyint1个字节 存储范围是0到255 之间的整数,用来存储有限数目的数值。
bigint8个字节 存储范围是-9,223,372,036,854,775,808到 9,223,372,036,854,775,807之间的整数
bit值只能是0或1,当输入0以外的其他值时,系统均把它们当1看待
float浮点型,它是一种近似数值类型,float(n)可储存1-53的可变精度浮点数值
money货币型 ,8个字节
datetime储存有效日期范围是1753/1/1~9999/12/31 8字节
smalldatetime储存有效日期范围是1900/1/1~2079/6/6,精确到分钟。 4 字节
char(m)定长 字符串
varchar(m)可变长度字符串 最大为m
nvarchar(m)国际化可变长度字符串
text可变长度字符串,最大长度为 231 - 1个字节。
ntext国际化可变长度字符串,最大长度为 230 - 1个字符。
SQL语句中,字符串用单引号 ,大小写不敏感

SQL主要分为DDL DML

DDL:数据库定义语言 create drop

DML数据库操作语言 select insert update delete

设置主键自增(sql server 2017)

选择dbo.stu —–列—–右键id—-修改——列属性—-修改表示规范 是

主键以及GUID

在一个数据表中除了选择主键自增 作为唯一标识之外,还能选择guid自动生成的字符串做唯一标识符

主键自增的优点,占用空间小,无序开发人员干预,阅读性强,缺点,效率低,数据导入导出缓慢

GUID的优点,效率高,数据导入导出方便,缺点是占用空间大

在开发中唯一标识大部分时间是给电脑看的,导入导出不方便的缺点就能忽略,不过,在实际的开发中还是根据需求去选择响应的方式

设置唯一字段id
设置id的数据类型为uniqueidentifier   
在添加的时候需要将id的值设置为  newid()

SQL语句中output的用法

首先update语句执行了两个操作,先删除,后添加可以在sqlserver中输出 查看

update stu2 set name='设置唯一字段3' 
output deleted.name,inserted.name
where id=7

这段话的意思是,将id为7 的列的name修改为 ‘设置唯一字段3’,那么会输出,原本的name,以及修改之后的name值

SQL中的参数化操作

declare @id int = 7   //T-sql的语法   定义一个变量
update stu2 set name='zzz3' where id=@id

模糊查询

语句

select * from stu where name like '%设置唯%' order by id asc 

order表示排序

like表示模糊查询 % 匹配任意字符串

“%唯一%”:查询表中所有含有“唯一” 字符串的行,

“%唯一”:查询表中以”唯一“字符串结尾的行

“唯一%”:查询表中以“唯一”字符串开头的行

SQL语句支持运算

数据分组 group by(如果有where,groupby必须在where之后)

select name,Count(*) from Stu2 group by name

这句话的意思是:查stu2表中name字段,并且按照name相同的列 进行分成一组。

max()取最大 avg()取平均

聚合函数不能出现在where语句中要用having

having 是对分组后信息的过滤。不可代替where

select name,Count(*) from Stu2 group by name having Count(*)>1

TOP的用法

查询前三名

select top 3 from stu order by sclary desc

从id=6开始查询3条数据(6,7,8)

这个涉及到子查询

select top 3 * from stu
where id not in (select top 5 from stu order by id desc)
order by id desc

查询的时候去重(distinct)

select distinct name from stu
select distinct name,age from stu   //这段删除的是name,age完全重复的列

把两个查询结果合并为一个查询结果(union)

select name from stu
union
select name from stu1

函数

数字函数

函数名含义
abs()绝对值
ceiling()向上取整
floor()向下取整
round()四舍五入

字符串函数

函数名含义
len()计算字符串长度
lower() upper()转换大小写
ltrim()去掉左边的空格
rtrim()去掉右边的空格
substring(string,start_position,length)string字符串,start_position开始位置,length()长度
select LTRIM('       bb        '),RTRIM('       bb        ')

//去掉左右两边  病统计长度
  select LEN(LTRIM(RTRIM('   ACV    ')))

日期函数

函数含义
getdate()获取当前日期

类型转换

函数含义
cast()类型转化
convert()类型转化
select cast('123456' as int)    //转化成数字
select cast('2018-08-08' as datetime)   //转成日期

convert(datetime,'2018-08-08')
convert(varchar(50),'1223')

空值处理函数

函数含义
ISNULL(exp,value)exp不是空返回exp,否则返回value
select ISNULL(fNAME,'OOO')  AS XINGMING FROM stu

case()函数

case i
when 1 then one
when 2 then two
else 'nonono'
end
select name,(
    case level
    when 1 then '游客'
    when 2 then '会员'
    else '未知客户类型'
    end 
) as 等级 from person


//范围值的判断
select name,(
    case 
    when level<= 2 then '游客'
    when level<5 and level>=2 then '会员'
    else '未知客户类型'
    end 
) as 等级 from person

练习

单号的字段名 order   金额的字段名 money  数据表名为table
select order,
(
case
when money>0 then money
else 0
endas 收入,
(
case
when money<0 then abs(money)
else 0
endas 支出 from table

//解题思路   首先用case()函数将声场统计成1,负场统计成0,在group by 分组
select Name,
Sum(
    case N'胜' then 1
    else 0
    end
) as 胜,
Sum(
    case N'负' then 1
    else 0
    end
) asfrom table
group by Name

索引(目录) ——index

全表扫描:逐条查询数据 —–效率最差

创建目录 经常要查询(检索)的字段 ——-where

能提高查询效率,对写程序没有影响

索引占空间大,插入,删除,修改麻烦,因为需要更新索引

/* 即使创建了索引,仍然有可能全表扫描,比如使用like 函数 类型转换等

表链接Join(inner Join | Left Join | Right Join)

select t1.name,t2.age,t2.sex
from table1 as t1 join table as t2 on ti.cid=t2.pid

查询年龄大于15的人的name,age,sex

select t1.name,t2.age,t2.sex
from table1 as t1 join table as t2 on ti.cid=t2.pid
where t2.age > 15

查询年龄大于平均年龄的的人的name age sex

select t1.name,t2.age,t2.sex
from table1 as t1 join table as t2 on ti.cid=t2.pid
where t2.age > (select avg(age) from table2)

子查询

select t1.name,t2.age,t2.sex
from table1 as t1 join table as t2 on ti.cid=t2.pid
where t2.age > (select avg(age) from table2)
ROW_NUMBER() over()—排序(开窗函数)

 在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where group by  order by 的执行。

select name,age,sex,ROW_NUMBER() OVER(order by age desc) as 0;
rank() over() 是跳跃排序 有两个第二名时接下来就是第四名(同样是在各个分组内).
dense_rank() over()是连续排序,有两个第二名时仍然跟着第三名。
  • 42
    点赞
  • 213
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
SQL Server是由Microsoft开发的关系型数据库管理系统(RDBMS)。它是一种功能强大且广泛使用的数据库平台,用于存储、管理和处理大量结构化数据。以下是SQL Server的一些基础知识点: 1. 数据库:SQL Server是基于数据库的,数据库是一个组织和存储数据的容器。它可以包含多个表、视图、存储过程等对象。 2. 表:表是SQL Server中存储数据的基本单位。它由行和列组成,每列定义了表中的一个属性,每行则表示一个记录。 3. SQL语言:SQL(Structured Query Language)是用于与数据库进行交互的标准语言。SQL Server支持标准的SQL语法,包括数据查询(SELECT)、数据插入(INSERT)、数据更新(UPDATE)和数据删除(DELETE)等操作。 4. 主键:主键是表中用于唯一标识每个记录的列或列组合。它的值必须是唯一且非空的,用于确保数据的完整性和一致性。 5. 外键:外键是表中的一列,用于建立表与表之间的关系。它引用了另一个表中的主键,用于维护数据之间的引用完整性。 6. 索引:索引是一种数据结构,用于提高查询性能。它可以加快数据检索速度,类似于书的目录,可以快速找到需要的数据。 7. 视图:视图是基于一个或多个表的查询结果集。它类似于虚拟表,可以简化复杂的查询操作,并提供了一种安全性控制机制。 8. 存储过程:存储过程是一组预编译的SQL语句集合,可以被多次调用。它可以接受参数、执行复杂的逻辑操作,并返回结果。 9. 触发器:触发器是与表相关联的一段代码,当表中的数据发生变化时自动执行。它可以用于实现数据约束、数据审计等功能。 10. 事务:事务是一组数据库操作的逻辑单元,要么全部执行成功,要么全部回滚。它用于确保数据的一致性和完整性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值