数据库学习心得day2

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值