--一、数据库基础
/*
如何开服务:2个 TCP/IP协议 SQL Server(MSSQLSERVER)
系统数据库:master(核心 模板) model(模型) msdb(警告日志) tempdb(临时)
数据库文件分为数据文件(.mdf/.ndf)和日志文件(.ldf)
数据库的骚操作:分离 附加 脱机 联机 导入 导出
如何创库:1.脚本 create database 库名 2.企业资源管理器/对象资源管理器
如何删库:1.脚本 drop database 库名 2.........
三个俗语:精度(例如:23434.543-->8) 小数位数(4343.23-->2) 长度(字节数 例如:小易nb-->6)
常用数据类型:
整数:int
小数:float/money
字符串:varchar 超过8000个字节用 text
日期时间:datetime
布尔:bit
图像:image
*/
--二、数据表
--如何脚本建表:
/* create table 表名( 列名 数据类型(长度) primary key, 列名 数据类型 ) */
--六大约束:
/*
1.主键约束:pk(primary key) 一个表只能有1个主键,但是这个主键是可以由多个列名共同组成的
2.外键约束:fk(references 表名(列名)) 插数据必须先主后从 删数据必须先从后主
3.检查约束:ck(check(ssex='男' or ssex='女'))
4.非空约束:not null/null
5.默认值约束:default('男')
6.唯一约束:unique
*/
--如何删除表:drop table 表名
--三、增删改 查
--3.1 增
/*
--单行插入
注意:
要插入的字段必须跟数据保持顺序、个数以及数据类型的一致
当你插入的是全部字段时,列名可以省略不写(跟建表的顺序一致)
如果主键设置了标识列,就不能手动维护(手动去赋值)
insert into 表名(列名,列名) values(数据,数据)
--多行插入
insert into 表名(列名,列名)
select 数据,数据
union
select 数据,数据
*/
--运用:插入 文成公主 女 16 大汉 这条数据
use db_1110
select * from tb_stu
insert into tb_stu(sname,ssex,sage,saddress)
values('文成公主','女',16,'大汉')
--3.2 删
--语法:delete [from] 表名 where 条件
--例如:把学号为5的学生删除
delete from tb_stu where sid=5
--3.3 改
--语法:update 表名 set 列名=要修改成什么 where 条件
--例如:把所有的男生姓名改成'蕉太狼'
update tb_stu set sname='蕉太狼' where ssex='男'
--3.4 查
--3.4.1 基础查询 ****
--语法:select 你要查询的列名(*) from 表名 where 条件
--查询全部 select * from 表名
--查询部分 select 列名,列名 from 表名
--查询全部住在大汉的女生
select * from tb_stu where ssex='女' and saddress='大汉'
--查询学号为1.3的学生 in(1,3)
select * from tb_stu where sid=1 or sid=3
--查询地址为空的学生姓名
select sname from tb_stu where saddress is null
--查询年龄在10-30之间的学生
select * from tb_stu where sage between 10 and 30
select * from tb_stu where sage>=10 and sage<=30
--按照年龄降序 asc升序
select * from tb_stu order by sage desc
--名字中含有'小' 姓'小': '小%' 第二个字符是小: '_小%'
select * from tb_stu where sname like '%小%'
select * from tb_stu where LEFT(sname,1)='小'
--前3条 50 percent
select top 3 * from tb_stu
--去除重复:distinct
--取别名: sname 姓名 sname as 姓名 姓名=sname
--3.4.2 高级查询
--联表:内联3种方式
/*
select 要查询的字段 from 表1 as a
inner join 表2 as b
on 表1和表2的关系
select 要查询的字段 from 表1 as a
join 表2 as b
on 表1和表2的关系
select 要查询的字段 from 表1 as a,表2 as b
where 表1和表2的关系
*/
use db_1114
select b.sno,b.sname,c.cname,a.degree from score as a,student as b,course as c
where a.sno=b.sno and a.cno=c.cno
--统计
/* max min avg count sum group by:分组 having:分组后过滤 where:分组前过滤 */ use db_1110 --男生人数在1人以上的地方 select saddress from tb_stu where ssex='男' group by saddress having COUNT(*)>1 --子查询 --查询比小易易年龄大的学生姓名 select sname from tb_stu where sage>( select sage from tb_stu where sname='小易易' ) --查询笔试成绩大于70分的学生姓名 use db_1114 select * from stuInfo select * from stuMarks --联表: select a.stuName from stuInfo as a,stuMarks as b where a.stuNo=b.stuNo and b.writtenExam>70 --子查询: select stuName from stuInfo where stuNo in( select stuNo from stuMarks where writtenExam>70 )
--四、函数
/*
1.日期:getdate() year/month/day() datepart() dateadd() datediff(YY/MM/DD,'','')
2.字符串:len() substring('abcdefg',2,3) replace() charindex() left/right()
3.系统:datalength()/cast/convert()数据类型的转换
4.数学:abs/sqrt/power/ceiling/floor/round
*/
--五、补充知识点
/*
1.如何复制表以及其数据: select * into 新表 from 要复制的表
2.不要数据:where 恒不等式
3.isnull(a,b):如果a为空 就用b来替代
4.学会把查询出来的结果集再当做是一个新的表来查询
*/