看到当年自己学SQL Server 的笔记
数据库
数据量DataBase,不同类型的数据应该放到不同的数据库中,
.便于对各个数据类别进行个性管理
.避免命名冲突
.安全性更高;
table(表):数据库中的关系指的就是表;
一张表就是一个类,列就是类的字段,行就是一个类的对象
数据库的主键(Primary key);
主键就是数据行的唯一标识。不会重复的列才能当主键。一个表可以没有主键,但是会非常难以处理,因此没有特殊理由表都要设定主键
主键有两种选用策略:业务主键和逻辑主键。业务主键是使用有业务意义的字段做主键,比如身份证号、银行账号等;逻辑主键是使用没有任何业务意义的字段做主键,完全给程序看的,业务人员不会看的数据。因为很难保证业务主键不会重复(身份证号重复)、不会变化(帐号升位),因此推荐用逻辑主键。 .主键的作用:唯一标识表中的一条记录。
.选择多列同时作为一个主键→组合主键(复合主键).(一般不建议采用)
组合主键-复合主键(多列同时作为主键)—不推荐
.唯一的。不能为空值
.不经常变化的(稳定)比较稳定的列(不经常更新的,最好是建好以后再也不更新。)
.大量字符串的列不适合作为主键
.优先选择单列作为主键(避免使用组合主键)
.优先使用逻辑主键(没有意义的),避免使用业务主键(身份证号、工号等。) 主键表,外键表
外键表就是A表引用了B表的主键,那么A表叫做外键表,
B表叫做主键表,两者之间的联系通过主键和外键联系, 创建数据库
create database MyDatabase
on
(
name='文件名',
filename='文件地址',
size=3mb,
filegrowth=1mb,--自动增长
)
log on --操作日志文件
(
name='文件名_log',
filename='地址名_log',
size=1mb,
filegrowth=%,
) 创建表
create table Student
(
stuid int primary key identity(,),
stuName nvarchar() not null,
stuGender bit not null,
stuAge int ,
stuClass nvarchar(),
) 数据类型
nvarchar(),存10个汉字,10个字母
varchar(),里面的内容可以是10个也可以不是10,少于10个
char(),5个汉字,10个字母, 如果存的内容(字母)小于10,不足的用空格补充.固定的内容
nchar(),凡是带n的那么就可以存汉字
int bit(true,false)写代码的时候用1,0的方式 float
--查询表中的全部内容
select *from Student--(表名) 向表中插入数据
--第一种方式
insert into Student(stuName,stuGender,stuAge,stuClass)values('刘备',,,'三年四班')
--第二种方式
insert into Student values('小乔',,,'三年二班')
--第三种,可以多条插入 用select 和union 连接
insert into Student
select '貂蝉',,,'三年四班' union
select '郭嘉',,,'三年三班' union
select '张飞',,,'三年四班'
修改表中的数据
--修改数据 关键字 是update <表名> set <要修改的列名=要修改的值> where 条件
update Student set stuAge-=
update Student set stuAge= where stuid= 删除数据
--删除数据 delete from <表名> where <条件>
delete from student where stuid=
--delete 删除的是数据,表还在,但自动增长的Id会接着已经删除的id接着加,不会在从1开始
--第二种删除方式 能把表给删除
drop table student
--第三种方i 式删除 删除的也是数据 表还在 但id是从1开始
truncate table student
--truncate 效率要比 delete 快的多 约束--非空约束
not null
--主键约束
primary key
--为年龄增加一个检查约束:年龄必须在-120岁之间,含岁与岁。
alter table student add constraint CK_stuAge check(stuAge >= and stuAge<=)
--为EmpId增加一个主键约束
alter table student add constraint PK_stuId primary key(stuid)
--非空约束,为stuName增加一个非空约束
alter table student alter column stuName varchar() not null
--为stuName增加一个唯一约束
alter table student add constraint UQ_stuName unique(stuName)
--为性别增加一个默认约束,默认为'男'
alter table student add constraint DF_stuGender default('男') for stuGender
--手动修改一下stuName的数据类型(varchar())
alter table student alter column stuName varchar() 增加删除列
--增加一个EmpId列
--alter table <表名> add <要加的列名> <数据类型>
alter table student add EmpId int --手动删除一列(删除列)
--alter table <表名> drop column <要删除的列名>
alter table student drop column empid --(要删除的列名) 查询表中的内容
--第一种方式
select stuName as '姓名',stuAge as '年龄'from student
--第二种方式
select 姓名=stuName,年龄=stuAge from student --带条件查询
select *from Student where stuGender=
--查找前十位 top
select top * from TblStudent --查找按照年龄从小到大 排序 order by asc
select *from TblStudent order by TSAge asc --查找按照年龄从大到小 排序 order by desc
select *from TblStudent order by TSAge desc --查找年龄最小的前十位
select top * from tblstudent order by TSAge asc --查找年龄最大的显示总数的10% select top percent * from TblStudent order by TSAge desc --去除重复姓名查找
select distinct TSName as '姓名' from TblStudent 聚合函数 --查询多少行; count()只能有一个参数
select COUNT(TSName) as '人数' from TblStudent
--也可以这样查询
select COUNT(TSName) as '人数',COUNT(TSCardId) as '标号' from TblStudent --切换成绩表
select *from TblScore --查询英语成绩最高
select MAX(tsenglish) as '英语最高' from TblScore --查询英语最低 和数字最高分
select MIN(tsenglish) as '英语最低',MAX(tsmath) as '数学最高' from TblScore --聚合函数还有sum()求和,avg()求平均值,len()长度, 多条件查询
--查询年龄在20-30之间的男生
select * from student where stuage>= and stuage<= and stugender=
第二种做法 用between ...and ...
select * from student where stuAge between and and stugender =
--in 查询班级id 为1 或者2 或者 的同学信息
select * from student where classid= or classid= or classid=
第二种做法
select * fromstudent where classid in(,,)
模糊查询
--名字中已张字开头的%代表任何内容,一字或多字
select from student where tsName like '张%'
--姓张的后面跟个%符号的,
select from student where tsName like '张[%]%'
--查询姓张的的但是后面只能有一个字'_'
select from student where tsName like '张_'
--查询姓张的姓名一共三个字
select from student where tsName like '张%' and len(tsName)= 数据分组
--查询每个班级的id有多少人
--group by 分组
select stuid as '班级的id',
count(*) as '人数'
from student
group by stuid --查询每个班中男生有多少人
select stuid as '班级',
count(*) as '人数'
from student
where stuGender=
group by stuid --查询每个班人数超过5个的人
select stuid as '班级',
count(*) as '人数'
from student
group by stuid
having count(*) in()
--注意having 不能使用在未分组的列 having 是筛选的意思 --统计每种商品的总销售量 并进行降序排序
select 商品名称,
SUM(销售数量) as '总销售量'
from MyOrders
group by 商品名称
having SUM(销售数量) >
order by '总销售量' desc --请统计总销售价格超过3000元的商品和销售总价 并进行降序排序
select 商品名称,
SUM(销售数量*销售价格) as '总销售价'
from MyOrders
group by 商品名称
having SUM(销售数量*销售价格)>
order by '总销售价' desc --统计各个客户对可口可乐的喜爱度(统计每个购买人对可口可乐的购买数量)
select 购买人,
sum(销售数量)as '销售总量'
from MyOrders
where 商品名称='可口可乐'
group by 购买人
order by '销售总量' desc 类型转换函数
数据类型转换的语法是
如果要把int类型转换为字符串 convert(char,列名)
例如如果要把所有的信息放在一个单元格之中的语法就是
select stuname+convert(varchar(),stuAge)+stuClass from student --表连接,首先列数相同 ,类型相同 select *from TblTeacher select *from TblStudent select ttname ,ttgender from TblTeacher
union --单独的union 去除重复 加上all 不去重复
select tsgender,tsaddress from TblStudent select * from TblScore --查询学生的的 最高成绩 最低成绩 总分
--第一种
select max(tenglish) as '最高成绩',
MIN(tenglish) as '最低成绩',
SUM(tenglish) as '总成绩'
from TblScore --第二种
select '最高成绩',MAX(tenglish) from TblScore
union
select '最低成绩',MIN(tenglish) from TblScore
union
select '总成绩',SUM(tenglish) from TblScore 变成列
select union
select union
select 数据备份--
select *from TblStudent
--把TblStudent表中的结构和数据,存到一个新表中,这个新表可以没有,在备份数据的同时新表自动生成
--就是把一个表复制过来
select *into newd from TblStudent
--表复制了 但没有数据
select *into newd1 from TblStudent where <>
--第三种 表有了 没有数据 建议使用这个
select top * into newd2 from TblStudent
--表要存在的一中
insert into newd3 select *from TblStudent 字符串函数
select len("字符串的长度");
select datalength('aa');--获得字符串的字节数
--获得tblstudent表中tsname的字节数
select *,datalength(tsName)from tblstudent
select lower('转小写');
select upper('转大写');
select rtrim('去除字符串右侧的空格');
select ltrim('去除字符串左侧的空格');
select left('截取左边字符串',)--'截取' 从左边切2个
select right('从右边切字符串',)-- '符串' 从右边切2个
select substring('str',,);
select getdate()-- 获取当前时间
select dateadd(year,,getdate());--在当前时间加上5年
--计算生日
select datediff(year,'2010-10-1',getdate())
--获取年月日 时间的部分
select datepart(year,getdate()); --创建一个存储过程(就相当于方法)
--计算两个数的和
create proc usp_addnumber --(usp_addnumber 相当于方法名 usp_ 是 我们自己写的标示)
@num1 int,
@num2 int
as
begin
select @num1+@num2
end --执行存储过程的时候传参 ,有三种方式
--第一种
exec usp_addnumber , --(参数1 参数 )
--第二种
exec usp_addnumber @num1=,@num2= --(直接给参数名赋值)
--第三种
declare @n1 int=, @n2 int=
exec usp_addnumber @num1=@n1,@num2=@n2 --分页存储过程
create proc GetPage
@Page int, -- 页数
@ct int,-- 每页条数
@sumCt int output --返回总条数
as
begin
select *from (select 编号=row_number() over(order by NewsId desc),* from vw_news ) as news where news.编号 between (@Page-)*@ct+ and @Page*@ct set @sumCt=(select COUNT(*)from vw_news) end
看到当年自己学SQL Server 的笔记的更多相关文章
- SQL Server -- 回忆笔记(五):T-SQL编程,系统变量,事务,游标,触发器
SQL Server -- 回忆笔记(五):T-SQL编程,系统变量,事务,游标,触发器 1. T-SQL编程 (1)声明变量 declare @age int (2)为变量赋值 (3)while循环 ...
- 轻松学SQL Server数据库
轻松学SQL Server数据库pdf 下载地址:网盘下载 目录: 第1章 数据库与SQL Server 2008 11.1 数据库基础 21.1.1 数据库的概念 21.1.2 数据库模型 2 ...
- 【SQL Server学习笔记】Delete 语句、Output 子句、Merge语句
原文:[SQL Server学习笔记]Delete 语句.Output 子句.Merge语句 DELETE语句 --建表 select * into distribution from sys.obj ...
- sql server 常见问题笔记
1.关于复制类型 快照发布:发布服务器按预定的时间间隔向订阅服务器发送已发布数据的快照. 事务发布:在订阅服务器收到已发布数据的初始快照后,发布服务器将事务流式传输到订阅服务器. 对等发布:对等发布支 ...
- sql server 2008笔记
sql server 2008开启远程访问数据库 1.以windows验证模式进入数据库管理器. 第二步:右击sa,选择属性: 在常规选项卡中,重新填写密码和确认密码(改成个好记的).把强制实施密码策 ...
- SQL server 学习笔记1
1.查询安装的排序规则选项喝当前的排序规则服务器属性 select * from fn_helpcollations(); 2.查看当前服务器的排序规则 select serverproperty(' ...
- SQL Server 自学笔记
--★★★SQL语句本身区分大小写吗 --SQLServer 不区分大小写 --Oracle 默认是区分大小写的 --datetime的输入格式,2008-01-07输入进去后显示为1905-06-2 ...
- SQL Server -- 回忆笔记(四):case函数,索引,子查询,分页查询,视图,存储过程
SQL Server知识点回忆篇(四):case函数,索引,子查询,分页查询,视图,存储过程 1. CASE函数(相当于C#中的Switch) then '未成年人' else '成年人' end f ...
- SQL Server -- 回忆笔记(三):ADO.NET之C#操作数据库
SQL Server知识点回忆篇(三):ADO.NET之C#操作数据库 1.连接数据库 (1)创建连接字符串: 使用windows身份验证时的连接字符串: private string conStr= ...
随机推荐
- #include <queue>
双端队列deque比向量vector更有优势 双端队列(deque) 连续存储的指向不同元素的指针所组成的数组<deque> 队列(queue) 先进先出的值的排列 <queue&g ...
- flume【源码分析】分析Flume的启动过程
h2 { color: #fff; background-color: #7CCD7C; padding: 3px; margin: 10px 0px } h3 { color: #fff; back ...
- 聚类算法初探(六)OPTICS
最近由于工作需要,对聚类算法做了一些相关的调研.现将搜集到的资料和自己对算法的一些理解整理如下,供大家参考. 另外在算法代码方面,我也做了一些实现(包括串行和并行),欢迎感兴趣的朋友探讨和交流. 第一 ...
- 依赖注入及AOP简述(四)——“好莱坞原则”和依赖注入框架简介 .
3.2. “好莱坞原则” 看了前面关于依赖注入概念的描述,我们来提炼出依赖注入的核心思想.如果说传统的组件间耦合方式,例如new.工厂模式等,是一种由开发者主动去构建依赖对象的话,那么依赖注入模 ...
- Windows下nc文件传输
起初用的一下命令: 接收端:nc –n –l –p port –vv > xxx 发送端:nc –n ip port < yyy 但是发现数据传输完成后,不会自动断开连接,要手动的断开,这 ...
- 【floyed】【HDU1217】【Arbitrage】
题目大意: 给你几种货币,以及几种汇率关系,问是否存在套利的可能? 思路: 初步想法:图上存在一个环的路径上权值相乘大于1.... 再者:该如何找到图上所有环呢.... 好吧 经过鸟神 和 况神的指点 ...
- UVA 11925 - Generating Permutations
题意: 给出一个1到n的排列,给出操作顺序,使升序排列能变为所给排列. 分析: 正常冒泡排序的想法.如果前两个数,前面的大于后面的,则换(特例是n,1不能换).否则,就用2的逆操作,把最后的数放前面. ...
- Android博客
各版本SDK Tools及ADT下载技巧:http://www.cnblogs.com/zhjsll/p/5147553.html 深入浅出SlidingMenu:http://www.cnblogs ...
- WebView的基本使用
---恢复内容开始--- 一.实例化WebView 通过xml实例化 xml <WebView android:id="@+id/webview" android:layou ...
- 解决chrome下上传文件 返回值带 <pre style="word-wrap:break-word;white-space:prewrap;"></pre>
解决办法:后台 response.setContentType("text/html");