T-SQL 运行架构:
系统数据库:
Master:master 数据库记录SQL Server 系统的所有系统级信息。主要包括实例范围的元数据、端点、链接服务器和系统配置设置以及记录了所有其他数据库的存在、数据库文件的位置以及 SQL Server 的初始化信息
Model: 提供了SQL Server 实例上创建的所有数据库的模板
Msdb: 主要由 SQL Server 代理用于计划警报和作业
Tempdb: tempdb 系统数据库是一个全局资源,可供连接到 SQL Server 实例的所有用户使用,并可用于保存显式创建的临时用户对象、SQL Server 数据库引擎创建的内部对象,行版本数据等
SQL 文件:
SQL Server 数据库具有三种类型的文件:
A、主数据文件(行数据文件):主数据文件是数据库的起点,指向数据库中的其他文件。每个数据库都有一个主数据文件。主数据文件的推荐文件扩展名是 .mdf。
B、次要数据文件(行数据文件):除主数据文件以外的所有其他数据文件都是次要数据文件。某些数据库可能不含有任何次要数据文件,而有些数据库则含有多个次要数据文件。次要数据文件的推荐文件扩展名是 .ndf。
C、日志文件(记录数据变化的过程):日志文件包含着用于恢复数据库的所有日志信息。每个数据库必须至少有一个日志文件,当然也可以有多个。日志文件的推荐文件扩展名是 .ldf。
文件名:分逻辑名及物理名
文件组的概念:
任何一个行数据文件必须属于一个文件组
文件组是一个管理单位,一个文件组下有多个文件
SQL 认证方式:
1)、WINDOWS 身份认证
2)、WINDOWS 和SQL 混合身份认证
常用T-SQL 语句复习:
1)、查询6 月11日后所有打卡记录
select *
from TimeRecords
where sign_time > '2011-06-11'
2)、查询7 月13日的所有打卡记录
select *
from TimeRecords
where CONVERT (char(10),sign_time,121)= '2011-07-13'
3)、使用运算符
select N'firstname '+N' lastname'
使用N:强制为Unicode(即一个英文字母占用2 个字节)
4)、使用函数DATEADD,在当前时间加一天:
select getdate()
select DATEADD (DAY,1,GETDATE())
GETADD:取当前时间
day:时间元素,可为year,month,hour 等
1:需增加的数
例:
select DATEADD (DAY,1,GETDATE())
select DATEADD (year,1,getdate())
select DATEADD(month,1,getdate())
5)、使用函数:datediff,取2 个日期之间折指定日期部分的区
select DATEDIFF(year,'2011-09-9','2002-09-09')
year:时间元素,即取两个日期间年的差距
例:
select DATEDIFF (day,'2011-02-09','2030-09-09')
6)、使用函数:datename,返回日期中指定
select DATENAME (year,'2011-01-08')
select DATEPART (month,'2009-08-09')
7)、使用函数ABS:取绝对值
select ABS(5)
select ABS (-5)
8)、使用函数LOWER:返回指定字母的小写
select LOWER ('ABCd')
9)、使用函数UPPER:返回指定字母的大写
select UPPER ('abCd')
10)、使用函数round: 从指定位数返回指定数值的四舍五入
select ROUND (34.3545,2)
select ROUND (34.3545,1)
10)、select 语句高级应用:
A、查询6 月11日有多少条打卡记录
select COUNT(sign_time)
from TimeRecords
where CONVERT (char(10),sign_time,121) = '2011-06-11'
B、查询6 月11日最晚及最早打卡记录
select MAX(sign_time)
from TimeRecords
where CONVERT (char(10),sign_time,121) = '2011-06-11'
select MIN(sign_time)
from TimeRecords
where CONVERT (char(10),sign_time,121) = '2011-06-11'
C、查询6 月11日每人打卡次数
select emp_id,COUNT(sign_time)
from TimeRecords
where CONVERT (char(10),sign_time,121) = '2011-06-11'
group by emp_id
D、查询6 月11日至6 月15日每天打卡记录汇总
select CONVERT (char(10),sign_time,121) as [time],COUNT(sign_time) as con
from TimeRecords
where CONVERT (char(10),sign_time,121)>= '2011-06-11'
and CONVERT (char(10),sign_time,121) <= '2011-06-15'
group by CONVERT (char(10),sign_time,121)
由于time 是系统保留变量,强制使用需带[ ]号.
(char(10),sign_time,121) as [time]:用于显示日期信息
COUNT(sign_time) as con :用于显示汇总记录
E、查询2011-06-11至6 月15日间每人每天打卡次数
select convert(char(10),sign_time,121) [time],emp_id,COUNT(sign_time) as cnt
from TimeRecords
where sign_time >= '2011-06-11'
and sign_time <= '2011-06-15'
group by CONVERT(char(10),sign_time,121),emp_id
order by [time]
或者:
select CONVERT (char(10),sign_time,121) as [day],emp_id,COUNT(sign_time) as con
from TimeRecords
where CONVERT (char(10),sign_time,121) >= '2011-06-11'
and CONVERT (char(10),sign_time,121) <= '2011-06-15'
group by emp_id,CONVERT (char(10),sign_time,121)
order by [day]
F、使用having,筛选出2011-06-12日每个员工的打卡次数
select convert(char(10),sign_time,121) siti,emp_id,COUNT(sign_time) as cnt
from TimeRecords
where sign_time >= '2011-06-11'
and sign_time <= '2011-06-15'
group by CONVERT(char(10),sign_time,121),emp_id
having CONVERT(char(10),sign_time,121)='2011-06-12'
order by siti
G、多表查询:
简单多表查询——等值连接:
select a.emp_id,b.emp_name,a.sign_time
from TimeRecords a,employee b
where a.emp_id = b.emp_id
and a.emp_id='P0226023'
或者:
select a.emp_id,b.emp_name,a.sign_time
from TimeRecords a join employee b
on a.emp_id = b.emp_id
在TimeRecords 和employee 中,查找条件emp_id 相等,且emp_id 等于P0226023 的字段.简单多表查询要求2 个表一定要有一个相同的列字段,及内容进行关联才能查询