求以下SQL语句意思

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求以下SQL语句意思相关的知识,希望对你有一定的参考价值。

create
table
sc--创建名为"sc"数据表
(
snum
varchar(4),
cnum
varchar(4),
--分别创建名为"snum"长度为4个字符,数据类型为"varchar"的字段、创建名为"cnum
"长度为4个字符,数据类型为"varchar"的字段
score
decimal(4,1),
--创建名为"score"有效长度为4小数位占1位的字段
例如,插入数据“12.3”、“12”等会出现“数据溢出错误”的异常;插入“1.23”或“1.2345...”会自动四舍五入成“1.2”;插入“2”会自动补成“2.0”,以确保2位的有效长度,其中包含1位小数。
constraint
pk_sc
primary
key(snum,cnum),--
创建名为"pk_sc"的主键(其中包括"snum"和"cnum"字段)
constraint
fk_sc_snum_student
foreign
key(snum)references
student,--
创建名为"fk_sc_snum_student"
的外键关联,本表(作为从表)的"snum"字段关联(如不明确指出主表的引用字段时,则视为主表的主键)到student(作为主表)
constraint
fk_sc_cnum_cource
foreign
key(cnum)references
course,
--同上,只是关联的字段不一样罢了
constraint
ck_sc_score
check
(score
between
0
and
100)
--创建名为"ck_sc_score
check"的条件约束,
满足条件为"score
"字段大于0(包含0)且小于100(并不包含100在内)
)

大概就是这样了、当然这只是我个人的理解、、、

祝你好运、、、
参考技术A create
table
sc
(
snum
varchar(4),
cnum
varchar(4),
score
decimal(4,1)
建立一个表,表名为sc,里面有三个字段
分别是snum(应该是学生学号),cnum(课程编号),score(分数)
constraint
pk_sc
primary
key(snum,cnum),建立主键是snum和cnum
constraint
fk_sc_snum_student
foreign
key(snum)references
student,建立外键关联到student表
constraint
fk_sc_cnum_cource
foreign
key(cnum)references
course建立外键关联到course表,
constraint
ck_sc_score
check
(score
between
0
and
100)
分数字段的输入约束,约束分数只能是0到100

sql 时间计算,有以下一个每天的刷卡时间表,求每天上班上了多少个小时的sql 语句

5378 2011.08.01 0757 07:57 201108010757 6 003765 1080113:40 A .0 01
5378 2011.08.01 1201 12:01 201108011201 6 003765 1080208:24 A .0 NULL 01
5378 2011.08.01 1255 12:55 201108011255 6 003765 1080208:24 A .0 NULL 01
5378 2011.08.01 1801 18:01 201108011801 6 003765 1080208:24 A .0 01
5378 2011.08.02 0757 07:57 201108020757 6 003765 1080208:24 A .0 01
5378 2011.08.02 1200 12:00 201108021200 6 003765 1080417:24 A .0 01
5378 2011.08.02 1254 12:54 201108021254 6 003765 1080417:24 A .0 01
5378 2011.08.02 1809 18:09 201108021809 6 003765 1080417:24 A .0 01
5378 2011.08.03 0758 07:58 201108030758 6 003765 1080417:24 A .0 01
5378 2011.08.03 1200 12:00 201108031200 6 003765 1080417:24 A .0 NULL 01
5378 2011.08.03 1255 12:55 201108031255 6 003765 1080417:24 A .0 01
5378 2011.08.03 1806 18:06 201108031806 6 003765 1080417:24 A .0 01
5378 2011.08.04 0755 07:55 201108040755 6 003765 1080417:24 A .0 01
5378 2011.08.04 1200 12:00 201108041200 6 003765 1080417:24 A .0 01
5378 2011.08.04 1256 12:56 201108041256 6 003765 1080417:24 A .0 01
5378 2011.08.04 1800 18:00 201108041800 6 003765 1080614:48 A .0

没有提供字段名,不方便描述。
假设员工都是上白班,早上上班,下午下班;便可以得出一个结论,每天最早的刷卡记录就是上班时刷的,每天最晚的刷卡记录便是下班记录,不理会中间刷了几次。
1. 先按工号和日子分组,同一天的记录分到一个组,求最早记录和最晚记录。
select emp_id, cast(convert(varchar(10),punch_time,102) as datetime) as workday, min(punch_time) as punch_in, max(punch_time) as punch_out
from TableName
group by emp_id, cast(convert(varchar(10),punch_time,102) as datetime)

-- 其中语句cast(convert(varchar(10),punch_time,102) as datetime) 是去掉打卡时间字段里的时间部分,只保留日期部分,使同一天的记录聚合到同一个组内。

2. 用下班时间减去上班时间就得出上班的小时数。完整的SQL语句如下:
select emp_id, cast(convert(varchar(10),punch_time,102) as datetime) as workday, datediff(hour,min(punch_time) , max(punch_time) ) as hours
from TableName
group by emp_id, cast(convert(varchar(10),punch_time,102) as datetime)

如果有夜班(即跨24:00的班次),就复杂一些了,需要额外处理。
参考技术A use Tempdb%Ago%A--> --> %A %Aif not object_id(N'Tempdb..#Tab') is null%A%9drop table #Tab%AGo%ACreate table #Tab([ID] int,[Name] nvarchar(2),[Logtime] Datetime,[action] nvarchar(2))%AInsert #Tab%Aselect 1,N'张三','2011-08-24 08:00',N'登录' union all%Aselect 2,N'张三','2011-08-24 08:31',N'登录' union all%Aselect 3,N'张三','2011-08-24 09:20',N'离开' union all%Aselect 4,N'张三','2011-08-24 09:29',N'登录' union all%Aselect 5,N'张三','2011-08-24 13:50',N'离开' union all%Aselect 6,N'张三','2011-08-24 14:20',N'登录' union all%Aselect 7,N'张三','2011-08-24 15:20',N'登录' union all%Aselect 8,N'张三','2011-08-24 16:30',N'离开' union all%Aselect 9,N'张三','2011-08-24 08:00',N'登录' union all%Aselect 10,N'陶明','2011-08-24 07:31',N'登录' union all%Aselect 11,N'陶明','2011-08-24 08:20',N'离开' union all%Aselect 12,N'陶明','2011-08-24 09:50',N'登录' union all%Aselect 13,N'陶明','2011-08-24 15:50',N'离开' union all%Aselect 14,N'陶明','2011-08-24 16:10',N'离开' union all%Aselect 15,N'陶明','2011-08-24 16:42',N'离开'%AGo%ASelect %A%9CONVERT(VARCHAR(8),[Logtime],112) AS 日期,%A%9[Name] AS 姓名,%A%9min(CASE WHEN [action]=N'登录' THEN convert(varchar(8),[Logtime],8) END) AS 最早上班时间,%A%9max(CASE WHEN [action]=N'离开' THEN convert(varchar(8),[Logtime],8) END) AS 最晚下班时间%Afrom #Tab%AWHERE CONVERT(VARCHAR(8),[Logtime],112)='20110824'%AGROUP BY CONVERT(VARCHAR(8),[Logtime],112),[Name]%A%A/*%A日期%9姓名%9最早上班时间%9最晚下班时间%A20110824%9陶明%907:31:00%916:42:00%A20110824%9张三%908:00:00%916:30:00%A*/

参考资料:百度一下

以上是关于求以下SQL语句意思的主要内容,如果未能解决你的问题,请参考以下文章

sql中的count是啥意思呢,求例子

sql多条件分组查询,求sql语句。

sql 中的查询语句

sql 时间计算,有以下一个每天的刷卡时间表,求每天上班上了多少个小时的sql 语句

MYSQL语句,union生成一个表无法update,求高手帮忙,谢谢

SQL server 数据库 用T-SQL语句创建以下四张表 求代码指导