T-SQL 运行架构:

 

21. SQL -- TSQL架构,系统数据库,文件,SQL 认证,TSQL语句_database

数据

Mastermaster 数据库记录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-116 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 个表一定要有一个相同的列字段,及内容关联才能查询