SQL总复习:
1、启动数据库:启动服务-打开软件-选择身份验证(sql身份验证)-服务器名称(./127.0.0.1/localhost)-用户名和密码。
2、master主要数据库;model模型/模板数据库;msdb警报和日志数据库;tempdb临时数据库。
3、创建数据库:其实就是在电脑本地创建数据文件.mdf和日志文件.ldf。
create database 数据库名;
4、创建数据表:
create table 数据表名(字段名1 字段1类型,字段名2 字段2类型...)
5、脱机:数据库暂时和软件脱离关系,但是数据库还存在软件里面,只是暂时无法在软件里面操作数据库。
6、联机:恢复被脱机的数据库和软件的关系。
7、分离:数据库彻底和软件脱离关系,但是数据库还存在电脑本地。
8、附加:把数据库通过数据文件导入到软件里面。
9、sqlserver不区分大小写,但是官方推荐大写
10、行注释:--;块注释:/*被注释的内容*/
11、六大约束:
主键约束primary key(pk):该字段的数据不能重复,且不能为null;每张表可以没有主键,如果有的话只能有一个主键,但是一个主键可以由多个字段组成。
非空约束is not null:该字段的数据不能为null。
检查约束check:通过表达式约束字段的数据。
唯一约束unique:该字段的数据不能重复,但是可以为null,一个表内可以有多个唯一约束。
默认值约束default:给字段设置默认值,性别默认为男。
外键约束foreign key(FK):通过一个表内的字段来限制另外一个表内的某个字段的数据。涉及2个表:主表(主键)和从表(外键)。
12、标识列(必须是int类型):实现字段的自动增长,不能手动维护。标识种子(增长的初始值)和标识增量(每次增长的量)。
13、数据类型:
int整型;
varchar(字节数)字符类型(非固定长度);8000
char字符类型(固定长度);
text长文本;
float浮点型;
datetime日期类型;
bit布尔类型;
money货币;
14、增加:
增加单条数据:insert into 表名(字段1,字段2,字段3)
values(值1,值2,值3)
增加多条数据:insert into 表名(字段1,字段2,字段3)
select 值1,值2,值3 union
select 值1,值2,值3 union
select 值1,值2,值3 union
select 值1,值2,值3 union
select 值1,值2,值3
15、删除:
删除表:drop table 表名;
删除数据库:drop database 数据库名;
删除表内所有数据:delete from 表名;
删除学号为1的学生:delete from 表名 where 学号=1;
16、查询:
查询表内所有数据:select * from 表名;
查询学号为1的学生的名字:select 名字 from 表名 where 学号=1;
查询学号为1的学生的所有信息:select * from 表名 where 学号=1;
查询表内的所有名字和性别字段:select 名字,性别 from 表名;
查询名字中含有唐字的学生的信息:select * from 表名 where 名字 like '%唐%'
查询姓唐的学生的信息:select * from 表名 where 名字 like '唐%'
select * from 表名 where left(名字,1)='唐';
查询电话不为空的学生的信息:select * from 表名 where 电话 is not null;
查询年龄在18-100之间的学生的信息:select * from 表名 where 年龄 between 18 and 100;
select * from 表名 where 年龄>18 and 年龄<100;
查询年龄在18以下或者30以上的学生的信息:select * from 表名 where 年龄<18 or 年龄>30
查询年龄在18-20范围之内的学生的信息:select * from 表名 where 年龄 in(18,19,20);
查询年龄不在18-20范围之内的学生的信息:select * from 表名 where 年龄 not in(18,19,20);
查询姓唐并且名字只有一个字的学生的信息:select * from 表名 where 名字 like '唐_';
17、修改:
把学号为1的学生的性别改为男:update 表名 set 性别='男' where 学号=1;
把表内所有学生的年龄+5:update 表名 set 年龄=年龄+5;
把表内所有的女生的性别改为男:update 表名 set 性别='男';
18、排序:
根据年龄降序:select from 表名 order by 年龄 desc;
根据年龄升序:select from 表名 order by 年龄 asc;
19、去除重复项distinct:(效果同分组group by )
查询班级的名字(去除重复的):select distinct 名字 from 表名;
20、取前几项top:
查询班级分数前三名的学生的信息:select top 3 * from 表名 order by 分数 desc;
21、百分比percent:
查询班级前30%的学生信息:select top 30 percent * from 表名 order by 分数 desc;
22、函数:字符串函数、日期函数、数学函数、系统函数。
23、聚合函数:max求最大值、min求最小值、avg求平均值、sum求字段数据之和、count(*)求表内数据的条数。
求班级年龄最大的学生的信息:
select max(年龄) from 表名;
select top 1 * from 表名 order by 年龄 desc;
24、分组查询group by:
通过性别分组:select 性别 from 表名 group by 性别;
求出表内各个性别的总人数:select 性别,count(*) from 表名 group by 性别;
求出地址为长沙的各个性别总人数:
select 性别,count(*) from 表名 where 地址='长沙'
group by 性别;
25、分组之后的筛选having:
select 性别,count(*) from 表名 where 地址='长沙'
group by 性别
having count(*)>2
26、联表查询:
内连接:inner join:显示两个表共有的数据;
外连接:
左外连接:left join:以左表为基表,显示左表所有的数据。
右外连接:right join:以右表为基表,显示右表所有的数据。
全连接:full join:显示两个表所有的数据。
27、查询某个表的数据到一个新表里面:select 名字,性别 into 新表名 from 旧表名;
28、查询某个表的字段到一个新表里面:select 名字,性别 into 新表名 from 旧表名 where 1!=1;
29、高级子查询:由外到内。
查询语句块:select * from 表名
查询年龄比康康大的学生的信息:
select * from 表名 where 年龄 >(
select 年龄 from 表名 where 名字='康康'
);
表1:学号、姓名;
表2:学号、分数;
查询分数大于60分的学生的姓名:
select 姓名 from 表1 where 学号 in(
select 学号 from 表2 where 分数>60
)
30、isnull:
isnull(分数,0):把分数为null的值赋为0;
isnull(cast(分数 as varchar(4)),'缺考');
31、from后面接查询的结果集:
select * from(
select * from 表名 where 地址='长沙'
) 新表名 where ssex='男'
32、replace:替换
把abc里面的a替换成1:replace('abc','a','1');
把abc里面的a替换成1,b替换成2,c替换成3:
replace(replace(replace('abc','a','1'),'b','2'),'c','3')
33、视图view:是一张虚拟的表。
创建视图:
create view 视图名
as
查询sql语句
查询视图:select * from 视图名;
删除视图:drop view 视图名;