sqlserver 复习

  • day-01 数据库基础

1.数据库:可以用来储存数据,且是永久性的保存。

2.创建与删除数据库的代码:

创建:create database db_数据库名字(当然db_这个前缀可以不需要)
删除:drop database db_数据库名字(同上)

3.创建数据库是会产生至少两个文件:

mdf 主数据文件 (霉豆腐)

ldf 日志文件 (烂豆腐)

ndf 次要数据文件 (嫩豆腐)

4.sql与sqlserver的区别:

sql:是一种结构化的查询语言

sqlserver:是一款数据库管理文件,利用sql语言来编写创建与删除数据库等操作。

5.sqlserver管理软件的基本使用:

①使用前必须(必须)开开启服务:

推荐使用命令提示符(注意须以管理员的身份运行)开启服务器,再输入代码:

net start mssqlserver --(开服)
net stop mssqlserver --(关服)

②登录窗口:

   服务器名称:“.”(此为小数点)、localhost、127.0.0.1

6.在sql中不区分大小写(除了命名)

        一个字符串==两个字节数

  •  day-02 表创建及约束的使用

1.数据储存到数据库是以表格的形式进行储存的。

2.三个关键词:

①精度指的是--小数点左右的个数和 例如:12.22的精度为4

②小数位数--小数点右边的个数和 例如:12.22的小数位数为2

③长度--实际储存的长度

3.数据类型(推荐记住以下四个类型):

①int 整形

②varchar 可变字符串 定义时必须赋予长度 例如:varchar(666)

如果666这个长度没用完,则会自动减去没用的长度部分,也就是不占空间

③datetime 日期

④bit 布尔值

4.学会创建与删除表格,语法:

create table tb_表名(与创数据库差不多,名字自拟)
drop table tb_表名(同上)

5.学会家约束条件(六大约束):

①主键约束 primary key

②从键约束 foreign key references

③非空约束 not nul

④默认约束 default

⑤检查约束 check

⑥唯一约束 unique

6.带约束表格创建的语法:(注意属性之间需用逗号隔开,最后一个不需要,如下所示)

7.标识符 identity(x,y):x为从一开始i,y为从一开始每次就加一(类似于约束写在后面,如下所示)

create table tb_表名
(
    属性名1 数据类型 约束 标识符(x,y),
    属性名1 数据类型 约束,
    属性名2 数据类型 约束,
    属性名3 数据类型 约束,
    属性名4 数据类型 约束,
    属性名5 数据类型 约束
)
  •  day-03 数据管理(增删改查)

1.新增(insert)的使用,推荐三种语法:

使用情况1:
    insert into tb_表名(字段1,字段2,字段3) values('值1','值2','值3')
                                       
                                        --字段之间用逗号隔开,值之间也一样,字段数=值数
                                        --值加不加单引号,有定义的数据类型决定
使用情况2:
    insert into tb_表名 values('值1','值2','值3')
                                        
                                        --前提是默认插入使用属性的值
                                        --字段之间用逗号隔开,值之间也一样,字段数=值数
                                        --值加不加单引号,有定义的数据类型决定
使用情况3:
    insert into tb_表名 values
    (''),
    (''),
    ('');
                                        --前提是默认插入使用属性的值
                                        --字段之间用逗号隔开,值之间也一样,字段数=值数
                                        --值加不加单引号,有定义的数据类型决定

2.删除(delete)的使用,语法:

delete from tb_表名;
delete from tb_表名 where 某属性 = '某值';
                                           --注意事项:from可以省略。

3.修改(update)的使用,语法:

update tb_表名 set 某属性 = '修改后的新值';

update tb_表名 set 某属性 = '修改后的新值' where 某属性 = '某值';

update tb_表名 set 某属性1 = '修改后的新值' ,某属性2 = '修改后的新值',某属性3 = '修改后的新值',某属性4 = '修改后的新值' where 某属性 = '某值';

4.查询(select)的使用,语法:

--查询三个字段的内容:
select 字段1,字段2,字段3 from tb_表名;

--“*”表示查询全部的字段内容:
select * from tb_表名; 

--为查询的字段进行起别名:
select 字段1 as '别名1' ,字段2 as '别名2' from tb_表名;

--条件查询(运算符 =、>、>=、<、<=、!=、<>)
select * from tb_表名 where 某属性 = '某值';

--区间查询(and  or  in   between ...and ...)两种方式:
select * from tb_表名 where 某属性 >= '某值' and 某属性 <= '某值';
select * from tb_表名 where 某属性 >= '某值' or 某属性 <= '某值;'
select * from tb_表名 where 某属性 in ('值1','值2','值3');
select * from tb_表名 where 某属性 between '某值' and '某值';

--排序(order by asc|desc,asc可以省略)
select * from tb_表名 order by 某属性 desc;
select * from tb_表名 order by 某属性 ,某属性 desc
select * from tb_表名 where 某属性 >= '某值' and 某属性 <= '某值' order by 某属性 desc;

--top|percent 取前几条数据
select top 3 * from tb_表名 order by 某属性 desc
select top 3 * from tb_表名 where 某属性 = '某值' order by 某属性 desc
select top 50 percent * from tb_表名 order by 某属性 desc

--模糊查询 like 一般于匹配符一起使用 % _
select * from tb_表名 where 某属性 like '%关键词%';

--去除重复 distinct
select distinct(某属性) from tb_表名;
  •   day-04 内置函数

1.字符串函数

ascii、char、charindex、replace、substring、left、right、upper、lower、ltrim、rtrim、len

1.select replace('张三爱上李四','李四','邓言康');--用邓言康替代李四

2.select left(202111,4)年--截取左边的4个字符
结果为:2021

3.select right(202111,2)月份--截取右边的2个字符
结果为:11

4.select substring(name,5,3)--截取此名字从第五个字后面的三个字
例子:select substring('歪比巴卜别比别比',5,3)
结果为:比别比

5.select substring(name,3)--截取此名字从第三个字开始后面的所有字
例子:select substring('歪比巴卜别比别比',3)
结果为:卜别比别比

6.select substring(name,-4,2)--反序操作截取,从第四个字符位置开始截取之后两个字符
例子:select substring('歪比八吧别比比',-4,2)
结果为:吧别

7.select left('name',3)--意思就是截取最左边开始的三个字符
例子:select left('abcdefg',3)
结果为:abd

8.select right和left一样,意思就是截取最右边开始的三个字符

9.len

2.日期函数

getdate()、dateadd()、datediff()、datepart()、datename()、year()、month()、day()

1.select getdate();--获得本地的时间(电脑此时的时间)

                    createtime格式为'2018-01-01'
                    getdata()为此时计算机本地时间

2.select DATEdiff(yy,createtime,getdata())--用于求xx年到此时的年份差

3.select DATEdiff(mm,createtime,getdata())--用于求xx月到此时的月份差

4.select DATEdiff(dd,createtime,getdata())--用于求xx日期到此时的天数差

5.select dateadd(mm,4,'2017-07-04')--求四个月后的日期
结果为:'2017-11-04'

6.sleetc dataname(dw,'2017-07-04')--求'2017-07-04'此时星期几
结果为:星期二

7.select datapart(month,''2017-07-04')--求'2017-07-04'此时的月份
结果为:7

8.year/month/day
select year(getdata())
结果为:2017

3.数学函数

abs、sign、round、ceiling、floor、power、sqrt

select ceiling(12.0000001)

4.系统函数

convert、cast、datalength

convert,cast用于转变数据类型(两种方法可以说是一模一样)


1.select convert(int,'123');--假设'123'为varchar,转为int类不用加单引号

2.select cast('123'as int)--123

3.若为小数
select cast(123.4 as int)--123

selecy convert(int,123.4)--123

4.datalength用于求指定表达的字节数
例子:select datalength('我爱你中国')
结果为:10
  •  day-05高级函数

1.聚合函数

max、min、count、sum、avg

聚合函数关键词拥戴字段名前面,如下所示:

select avg(sage) from tb_student

2.分组查询及筛选分组

分组关键字:group by--查什么,group by后就要接什么,where不能用在其后面,后面只能放非聚合函数的列

筛选关键词:having 只能在group by 后使用

注意:where条件中不能包含聚合函数

--统计班级的男女生多少人:
select ssex,count(*) from tb_student group by ssex;
--求各个地方的人数:
select saddress,count(*) from tb_student group by saddress;
--求住了5个人以上的地方有哪些?
select saddress,count(*) from tb_student group by saddresshaving count(*) > 5;

3.联表查询:内链接|外连接(a,b为表名)

1.1内链接

select * from a,b where a.id = b.id;

select * from a inner join b on a.id = b.id;

1.2外连接:左外连接、右外连接、全外连接

select * from left outer join b on a.id = b.id;--左

select * from right outer join b on a.id = b.id;--右

select * from full outer join b on a.id = b.id;--全

  •  day06-高级子查询

  • (意思就是不用想联表那么麻烦,就可以之间查询,往下看就知道了)

1.概述:将一个select查询的结果当做条件在另外一个select查询语句进行操作

2.特点:子查询的语句必须包裹在小括号中,执行流程:由里向外

3.方式:运算符的子查询|in的子查询

4.连接符号:“in”和等于符号“=”都一样,">"也可以,如下所示:

--查询比邓炎康年龄大的人有哪些?

select * from tb_student where sage in

( select sage from tb_student where sname = '邓炎康')

--查询成绩大于平均分的学员信息有哪些?

select * from tb_student where sno in(

select sno from score where score >  

 (  elect avg(degree) from score)

        )

--例子:--学员信息表:学号,姓名,性别,年龄--学员成绩表:考试编号,学号,javabase成绩(200),oop成绩(200),sqlserver成绩(200)--求每个人的总成绩》300的学员信息有哪些?

select * from student where sno =(

select sno from score where (javabase+oop+sqlserver)>300)

补充知识点:

(1)if exists 存在--存在不及格,砍死,否则放过你们(另外一种类似于高级查询的方式)
 

if exists (select * from score where degree < 60) 
    begin 
        print '砍死'; 
    end
else 
    begin 
        print '放过你们'; 
end

(2)表的复制

select * into 新表 from 旧表 where 1=1;//结构+数据 
select * into 新表 from 旧表 where 1=2;//结构

(3)isnull(xx,xx)

假如有null值,就可以用xx代替

  •  day07-视图和索引

1.概述:视图就是一张虚拟表,借助select查询的结果所保存的。

2.关键词:view

3.创建视图的语法

create view v_视图名称 
as 
select|update|delte|insert;

4.查询视图的语法

select * from v_视图名称

5.删除视图的语法

drop view v_视图名称

6.索引(index)

索引就是目录,提高查询效率
创建索引create index i_索引名称
on 表名(字段)


删除索引
drop index i_索引名称 
on 表名
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值