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 表名