1、通过sql语句,给表添加约束
--class表的班级名称添加唯一约束
alter table class add constraint UQ_class_cName unique (cName)
--给student表的ssex字段添加默认约束
alter table student add constraint DF_student_ssex default '男’for ssex
--给student表的sage添加检查约束
alter table student add constraint CK_student_sage check(sage> 0 and sage<100)
—-给student的sclassid添加外键约束
alter table student add constraint FK_student_sclassid foreign key (sclassid)references class(cid)
on delete cascade --级联删除
on update cascade --级联更新
—-删除约束
alter table student drop constraint FK_student_sclassid
2、select语句
获得年纪最小的5个学生
Top 获取前几条数据 order by 排序 asc 升序排列 desc 降序排序
select top 5 * from Student order by sage asc
年纪最大的10%的学生
select top 10 percent sname from Student order by sage desc
获得年纪最大的10%的学生,并且去除重复的
distinct先去重然后默认升序排序
select distinct top 10 percent sname from student order by sname asc
求学生表中一共有多少个学生
select count(sname) from student
老师的平均工资?工资最高?工资最低?
select avg(tsalary) as '平均工资',max(tsalary) as '最高工资' ,min(tsalary) as '最低工资' from teacher
Isnull(参数1,参数2)
Isnull是判断参数1是否为null值,如果参数1为null值,则将参数1的值,替换成参数2
查询成绩在80-90分之间的所有学生
select * from score where english between 80 and 90
select * from score where English>80 and English<90
查询班级id为1,2,3的所有学生
select * from student where sclassid = 1 or sclassid = 2 or sclassid = 3
in后面的括号不能省略
select * from student where sclassid in (1,2,3)
查询所有姓张的同学
select * from student where sname like '张%'
查询名字中包含张和关的学生
select * from student where sname like '%[张关]%'
统计每个班级的人数
group by 分组
select sclassid as '班级', count(*) as '班级人数' from student group by sclassid
要求在一个表格中查询出学生的英语最高成绩、最低成绩、平均成绩
union 会去掉重复数据 union all 不会去掉重复数据
select max(english) as '成绩' from score union all
select min(english) as '成绩' from score union all
select avg(english) as '成绩' from score
表复制
1.要求新表不能存在 复制数据,不复制主键和约束
select * into newStudent from student
2.要求表必须是存在的
注意表的自增和约束
insert into newStudent select * from student
字符串函数
select Len('我爱北京天安门')(返回字符长度)
转大写,转小写
select Lower()
select Upper()
除去左空格
select LTRIM(' ab cd ')
除去右空格
select RTRIM(' ab cd ')
除去两边的空格
select TRIM(' ab cd ')
返回左侧指定的字符串
select LEFT('我爱北京天安门',2) 我爱
返回右侧指定的字符串
select RIGHT('我爱北京天安门',2) 安门
select Right(LEFT('我爱北京天安门',4),2) 北京
返回指定位置的字符串
索引从1开始
select SUBSTRING('我爱北京天安门',5,2) 天安
替换
select REPLACE('我爱北京天安门','北京','南京') 我爱南京天安门
日期函数
获得当前日期与时间
select getdate()
dateadd(datepart参数,startdate,enddate)用于计算两个日期之间的和值
datediff(datepart参数,startdate,enddate)用于计算两个日期之间的差值
datepart 是表示差/和值单位的关键字或缩写;startdate 和 enddate 表示要计算差/和值的两个日期
select datepart(datepart参数,日期)获取对应的日期数据
datepart参数:
year 年
quarter 季
month 月
day 天
dayofyear 年中的天数
week 周
hour 时
minute 分
second 秒
millisecond 毫秒
microsecond 微秒
nanosecond 纳秒
类型转换
int 转换为nvarchar
select cast(1 as nvarchar) + '我爱北京天安门'
select convert(nvarchar,1) + '我爱北京天安门'
保留指定的有效数字,其余的都用0代替
select Round(123.891891,4) 123.891800
直接进位
select CEILING(123.12) 124
convert函数:
1.第1个参数为,转换后的大小;
2.第2个为转换日期的字段或函数;
3.第3个为转换的格式。
当前时间:2023-8-21 20:37
Select CONVERT(varchar(100), GETDATE(), 0): 08 21 2023 8:37PM
Select CONVERT(varchar(100), GETDATE(), 1): 08/21/23
Select CONVERT(varchar(100), GETDATE(), 2): 23.08.21
Select CONVERT(varchar(100), GETDATE(), 3): 21/08/23
Select CONVERT(varchar(100), GETDATE(), 4): 21.20.23
Select CONVERT(varchar(100), GETDATE(), 5): 21-08-23
Select CONVERT(varchar(100), GETDATE(), 6): 21 08 23
Select CONVERT(varchar(100), GETDATE(), 7): 08 21, 23
Select CONVERT(varchar(100), GETDATE(), 8): 20:37:19
Select CONVERT(varchar(100), GETDATE(), 9): 08 21 2023 8:37:19:600PM
Select CONVERT(varchar(100), GETDATE(), 10): 08-21-23
Select CONVERT(varchar(100), GETDATE(), 11): 23/08/21
Select CONVERT(varchar(100), GETDATE(), 12): 230821
Select CONVERT(varchar(100), GETDATE(), 13): 21 08 2023 20:37:19:600
Select CONVERT(varchar(100), GETDATE(), 14): 20:37:19:600
Select CONVERT(varchar(100), GETDATE(), 20): 2023-08-21 20:37:19
Select CONVERT(varchar(100), GETDATE(), 21): 2023-08-21 20:37:19.600
Select CONVERT(varchar(100), GETDATE(), 22): 08/21/23 8:37:19PM
Select CONVERT(varchar(100), GETDATE(), 23): 2023-08-21
Select CONVERT(varchar(100), GETDATE(), 24): 20:37:19
Select CONVERT(varchar(100), GETDATE(), 25): 2023-08-21 20:37:19.600
Select CONVERT(varchar(100), GETDATE(), 100): 08 21 2023 8:37PM
Select CONVERT(varchar(100), GETDATE(), 101): 08/21/2023
Select CONVERT(varchar(100), GETDATE(), 102): 2023.08.21
Select CONVERT(varchar(100), GETDATE(), 103): 21/08/2023
Select CONVERT(varchar(100), GETDATE(), 104): 21.08.2023
Select CONVERT(varchar(100), GETDATE(), 105): 21-08-2023
Select CONVERT(varchar(100), GETDATE(), 106): 21 08 2023
Select CONVERT(varchar(100), GETDATE(), 107): 08 21, 2023
Select CONVERT(varchar(100), GETDATE(), 108): 20:37:19
Select CONVERT(varchar(100), GETDATE(), 109): 08 21 2023 8:37:19:600PM
Select CONVERT(varchar(100), GETDATE(), 110): 08-21-2023
Select CONVERT(varchar(100), GETDATE(), 111): 2023/08/21
Select CONVERT(varchar(100), GETDATE(), 112): 20230821