第2章 SQL Server 2012概述

1、SQL(Structed Query Language),结构化查询语言。

2、SSMS(SQL Server Mangement Studio),SQL Server 2012的操作环境。

3、连接SQL Server之前应先启动SQL Server服务,即SQL Server(MSSQLSERVER):

方法1 开始--所有程序--Microsoft SQL Server 2012--配置工具--SQL Server配置管理器。

方法2 控制面板--系统和安全--管理工具--服务。【 √ 】

4、登录账户:

(1) 创建:“Windows身份验证”登录--对象资源管理器--安全性--右击登录名--新建登录名

(2) 修改密码:“Windows身份验证”登录--对象资源管理器--安全性--打开登录名--双击自定义的登录名

(3) 赋予权限:双击自定义的登录名--属性--服务器角色 / 用户映射

(4) 删除:右击自定义的登录名--删除

第3章 数据库的创建与管理

1、数据库按照用途分类:系统数据库和用户数据库。

系统数据库:

(1) master:核心,用户不能直接修改,损坏则SQL Server服务器不能工作,需定期备份。

(2) model:模板,用模板中的默认值创建新的空白数据库。修改model将影响所有使用模板创建的数据库。

(3) msdb:代理服务数据库,供SQL Server代理程序调度警报、作业及记录操作。

(4) tempdb:临时数据库,所有建立的临时表和临时存储过程,启动时重建,关闭时清空。

用户数据库:由用户自行创建的数据库。

2、文件

(1) 数据库文件:存放数据库数据和数据库对象,可有多个数据库文件。

类型:a. 主数据文件:“. mdf ”,有且只有一个,存储数据库启动信息数据,是数据库的起点。

b. 次要数据库:“. ndf ”,可以有0或多个,除主数据文件外其余的都是次要数据文件。

(2) 事务日志文件:“. ldf ”,至少有一个,记录数据库增删改及故障记录,可分析故障原因并恢复数据。

3、创建数据库 «

CREATE DATABASE 数据库名

[ ON [ PRIMARY ]

[ <数据文件参数>[ , ... n ]

[ , <文件组参数>[ , ... n ]

]

[ LOG ON { <日志文件参数>[ , ... n ] } ]

<文件参数> :: =

{

(

[ NAME = 逻辑文件名, ]

FILENAME = 物理文件名

[

, SIZE = 大小

[ , MAXSIZE = { 最大容量 | UNLIMITED }]

[ , FILEGROWTH = 增长量 [ KB|MB|GB|TB|% ]

]

)

[ , ... n ]

}

<文件组参数> :: =

{

FILEGROUP 文件组名 [ DEFAULT ]

<文件参数>[ , ... n ]

}

CREATE DATABASE mytest ON PRIMARY

(NAME = ‘ mytest_data1 ’,

FILENAME = ‘ d : \ db \ mytest_data1 . mdf ’,

SIZE = 6MB ,

MAXSIZE = 30MB ,

FILEGROWTH = 15 %

) ,

(NAME = ‘ mytest_data2 ’,

FILENAME = ‘ d : \ db \ mytest_data2 . mdf ’,

SIZE = 4MB ,

MAXSIZE = 30MB ,

FILEGROWTH = 15 %

)

LOG ON

(NAME = ‘ mytest_log1 ’,

FILENAME = ‘ d : \ db \ mytest_log1 . ldf ’,

SIZE = 1MB ,

MAXSIZE = 20MB ,

FILEGROWTH = 5 %

) ,

(NAME = ‘ mytest_log2 ’,

FILENAME = ‘ d : \ db \ mytest_log2 . ldf ’,

SIZE = 1MB ,

MAXSIZE = 20MB ,

FILEGROWTH = 5 %

)

GO

● ON:指定用来存储数据库中数据部分的磁盘文件——数据文件。

● PRIMARY:指定关联数据文件的主文件组。若未指定PRIMARY,则CREATE的第一个文件为主数据文件。

● LOG ON:指定用来存储数据库中日志部分的磁盘文件——日志文件。如果没有LOG ON系统将自己创建。

● 文件参数:定义文件属性。

NAME:指定文件逻辑名称,是数据库在SQL Server中的标识符。

FILENAME:指定数据库所在文件的操作系统文件名称和路径,要确保路径已经存在。

SIZE:指定文件初始大小,应不小于model数据库的主数据文件的大小。若未指定则使用model数据库主数据文件的大小。

次要数据文件未指定大小,则以1MB作为该文件的大小。

MAXSIZE:指定操作系统文件可增长到的最大尺寸。若未指定则无限大(UNLIMITED),直到磁盘被占满。

FILEGROWTH:指定文件的自动增量。MB或者%,若为0则不允许文件增长。

● 文件组参数:控制文件组属性。

FILEGROUP:文件组逻辑名称,须唯一且符合标识符规则。

DEFAULT:指定该文件组为数据库中默认的文家组。

4、数据库管理

(1) 查看及修改:右键--属性

(2) 更名:方法1 使用SSMS图形界面

方法2 使用T-SQL语句:ALTER DATABASE mytest

MODIFY NAME = db_mytest

(3) 删除:方法1 使用SSMS图形界面

方法2 使用T-SQL语句:DROP DATABASE mytest

5、数据库的分离,即只将用户数据库从SSMS中删除,对应的物理文件.mdf和.ldf不删除。

(1) 分离:用户数据库--右键--任务--分离

(2) 附加:数据库--右键--附加--添加

(3) 移动:分离--剪切.mdf和.ldf--附加

(4) 复制:(用户数据库--右键--任务--脱机)--复制.mdl和.ldf --(右键--联机)

第4章 数据表的创建与管理

1、数据表的创建

(2) 使用T-SQL语句创建数据表

CREATE TABLE 表名

(

列名1 数据类型 列的特征,

列名2 数据类型 列的特征,

... ...

列名n 数据类型 列的特征

)

USE TestStudentdb                        ——说明对哪一个数据库进行操作

GO

CREATE TABLE TestScore

(

testsco_id INT IDENTITY(1 , 1) ,          ——标识列(int),从1开始递增

testsco_stuno VARCHAR(10) NOT NULL ,  ——非空

testsco_overall FLOAT                     ——未说明,可为空

)

GO                                        ——怎么设置主键?

CREAT TABLE [ DataBaseName.[ SchemaName ].] TableName

/*创建表的数据库名*/ /*创建表的架构名*/  /*创建表的名称*/

(column_name data_type [NOT NULL]|[DEFAULT[expression]]|{PRIMARY KEY|UNIQUE}[CLUSTERED|NONCLUSTERED][ASC|DESC])[, ...n]

/*各列名称*//*数据类型*//*列值非空*/ /*  指定列的默认值 */   /*   主码   */ /*标识列*//*聚集索引*/ /*  非聚集索  *//*默认*//*降*/

2、数据表的管理

(1) 使用SSMS图形界面管理数据表

(2) 使用T-SQL管理数据表:(单击“新建查询”打开空白.sql--输入T-SQL语句--单击V检查--单击!执行--检查表中数据)

a. 添加字段:

SSMS

数据表--右键--设计                                                              表右键

语法

ALTER TABLE 表名

ADD 字段名 字段类型 列的特征

修改字段类型:

SSMS

数据表--右键--设计                                                              表右键

语法

ALTER TABLE 表名

ALTER COLUMN 字段名 字段类型 列的特征

删除字段:

SSMS

数据表--右键--设计                                                              表右键

语法

ALTER TABLE 表名

DROP COLUMN 字段名

b. 添加约束CONSTRAINT: ALTER TABLE 表名

ADD CONSTRAINT 约束名 约束类型 具体的约束说明

主键约束 PRIMARY KEY:

SSMS

设计--列名--右键--设置主键                                                   列名右键

举例

ALTER TABLE StudentTest       /*   表级约束只要这部分  */

ADD CONSTRAINT PK_stutestno PRIMARY KEY (stutest_no)

GO                  <约束名>                         <列名>    [, ... n]

注:每个表只能有一个主键约束,且其约束的列值不能重复或空。

外键约束FOREIGN KEY(关系):

设计右击空白--关系--添加--常规·表达式--选择对应                                                   空白右键

举例

ALTER TABLE ScoreTest             /*  表级约束不省略这部分   */

ADD CONSTRAINT FK_scoteststuno FOREIGN KEY(scotest_stuno) REFERENCES StudentTest (stutest_no)

GO               <约束名>                        <列名>                     <外表名>   <列名>

注:外键所引用的列必须是主键约束的列或标识列; 用户数据库--数据库关系图--新建--全选--添加--保存--刷新。

唯一约束UNIQUE(标识列):

SSMS

设计--列属性--(是标识)--“是”                                                    列属性

举例

ALTER TABLE StudentTest

ADD CONSTRAINT UQ_stutestname UNIQUE (stutest_name)

注:可在一表中定义多个UNIQUE,也可在多个列上定义一个UNIQUE,其组合不重复即可。

表设计--右击空白--索引/键--查看唯一键。

默认约束DEFAULT:

SSMS

设计--列属性--默认值或绑定--输入内容                                            列属性

举例

ALTER TABLE StudentTest

ADD CONSTRAINT DF_stutestnative DEFAULT(‘吉林’) FOR stutest_native

检查约束CHECK:

SSMS

设计右击空白--CHECK--添加--常规·表达式--输入                                空白右键

举例

ALTER TABLE StudentTest

ADD CONSTRAINT CK_stutestemail CHECK(stutest_email like ‘%@%.%’)

例:stu_email like ‘%@%.%’   (注:%表示任意多个字符)

删除约束: ALTER TABLE 表名

DROP CONSTRAINT 约束名(如CK_stutestemail)

3、数据表的删除

(1) 使用SSMS图形界面删除数据表

(2) 使用T-SQL删除数据表:DROP TABLE 表名

第5章 数据管理(增、删、改、导入导出)

1、使用SSMS图形管理界面

(1) 添加数据:右击表--编辑前200行--增加字段的值

(2) 修改数据:右击表--编辑前200行--修改字段的值

(3) 删除数据:右击表--编辑前200行--右击选中一条记录--删除

2、使用T-SQL

(单击“新建查询”打开空白.sql--输入T-SQL语句--单击V检查--单击!执行--检查表中数据)

(1) 插入单行数据:

语法:INSERT [ INTO ] <表名> [列名列表] VALUES <值列表>

INTO:“[]”表示可选部分,增强可读性。

表名:指定向哪个表插入数据。

列名:若有多列可用逗号隔开,若省略列名则按数据表定义的顺序依次插入数据。

值列表:插入各列对应的数值,逗号隔开,值与列对应,字符串用单引号。

注:不要向标识列中插入数据值。                                                      (注:红色为常见易错处)

在插入数据时注意不要违反CHECK约束。

若字段不允许为空,且未设置默认值,则必须给该字段设置数据值。

可以使用关键字DEFAULT代替插入的数值,这样可以改具有默认值的列插入数据。

(2) 插入多行数据:

● 从一个表中查询出来部分信息,将这些信息插入到另外一个表中:

INSERT INTO Contact (con_name, con_email, con_phone)

SELECT stu_name, stu_email, stu_phone

FROM Student

● 通过Union关键字合并数据进行插入:

INSERT INTO Contact (con_name, con_email, con_phone)

SELECT ‘黄飞’, ‘huangfei@163.com’, ‘15720613345’ UNION

SELECT ‘徐强’, ‘xuqiang@163.com’, ‘15720613346’ UNION

SELECT ‘段悦’, ‘duanyue@163.com’, ‘15720613347’

注:UNION关键字将两个不同的数据或查询结果组合成一个新的结果集,注意个数、顺序、类型。

● 通过INSERT...VALUE方式一次插入多条记录:

INSERT INTO Contact (con_name, con_email, con_phone)

VALUES (‘胡康’, ‘hukang@163.com’, ‘15720613265’) ,

(‘周星’, ‘zhouxing@163.com’, ‘15720613266’) ,

(‘李刚’, ‘ligang@163.com’, ‘15720613267’)

(3) 更新数据:UPDATE <表名> SET <列名=更新值> [WHERE<条件>]

SET指定更新的列和值,多个“列名=更新值”用逗号隔开,最后一个“列名=更新值”不加逗号

WHERE子句是可选的,若省略则对表中所有记录进行更新。

● 更新单行:UPDATE Contact SET con_email = ‘ww@163.com’, con_phone = ‘15788889999’

WHERE con_id=1

● 更新多行:UPDATE Contact SET con_email = ‘zjff@163.com’ WHERE con_email = NULL

● 更新所有:UPDATE Contact SET con_phone = ‘13388887777 ’

(4) 删除数据:DELETE FROM <表名> [WHERE<条件>]

● 删除单行:DELETE FROM Contact WHERE con_id = 0

注:在删除主表中某条数据信息时,若该信息在子表中以外键形式存在,则禁止删除主表中该信息。

办法是将主表中要删除的信息先在子表中全部删除。简便的方法是触发器。

● 删除多行:DELETE FROM Contact WHERE con_class = ‘12自动化’

● 删除所有:DELETE FROM Contact

扩展:TRUNCATE TABLE <表名>

TRUNCATE TABLE用来删除表中所有行,但表的结构、列、约束、索引等不会被改动,

比DELETE执行速度快,且占用资源和日志少,该操作不能用于有外键约束引用的表。

3、导入/导出数据

(1) 文本文件·导入·数据库数据

右击数据库--任务--导入数据--打开“SQL Server导入导出向导”窗口--下一步

打开“选择数据源”窗口--“数据源”选“平面文件源”--单击“浏览”选择导入的文件路径--取消“在第一个数据中显示列名称”框

下一步--下一步--选择要导入的数据库--下一步--选择要导入的数据表

下一步--保持默认--下一步--选中“立即运行”复选框--下一步--完成--单击关闭按钮即可查看导入的数据。

(2) 表格文件·导入·数据库数据

右击数据库--任务--导入数据--打开“SQL Server导入导出向导”窗口--下一步

“选择数据源”窗口--“数据源”选“Microsoft Excel”--单击“浏览”选择导入的Excel路径--取消“首行包含列名称”复选框

下一步--选择要导入的数据库--下一步--选中“复制一个或多个表或视图的数据”单选按钮

下一步--选中Sheet$选项--在目标处选择要导入的数据表

下一步--保持默认--下一步--选中“立即运行”复选框--下一步--完成--单击关闭按钮即可查看导入的数据。

(3) 数据库数据·导出·文本文件

右击数据库--任务--导出数据--打开“SQL Server导入导出向导”窗口

下一步--打开“选择数据资源”窗口--选择要导出的数据库

下一步-打开“选择目标”窗口

“目标”选择“平面文件目标”并选择文件路径及要保存的文件名

下一步--打开“指定表复制或查询”窗口--保持默认

下一步--打开“配置平面文件目标”窗口并在“源表或源视图”选择要导出的数据表

下一步--打开“保存并运行”窗口--保持默认

下一步--打开“完成该向导”窗口--单击完成打开“执行成功”窗口--单击关闭按钮即可查看导出的文件。

(4) 数据库数据·导出·表格文件

右击数据库--任务--导出数据--打开“SQL Server导入导出向导”窗口

下一步--打开“选择数据资源”窗口--选择要导出的数据库

下一步-打开“选择目标”窗口

“目标”选择“Microsoft Excel”并选择文件路径及要保存文件名

下一步--打开“指定表复制或查询”窗口--保持默认

下一步--打开“选择源表或源视图”窗口并选择要导出的数据表

下一步--打开“查看数据类型映射”窗口

下一步--打开“保存并运行包”窗口

下一步--打开“完成该向导”窗口--单击完成打开“执行成功”窗口--单击关闭按钮即可查看导出的文件。

第6章 数据查询(T-SQL语句)

1、SELECT语句

SELECT [ ALL | DISTINCT ] [ TOP n[ PRECENT ] [ WITH TIES ] ] { * | <字段列表> }

FROM 表名 | 视图名

[ WHERE <检索条件表达式> ]

[ GROUP BY <分组依据列> ] [ HAVING <组提取条件表达式> ]

[ ORDER BY <排序依据列> ] [ ASC | DESC ]

注:ALL:默认,查询出的结果可以包含重复行。

DISTINCT:查询的结果如果有值相同的行,则只显示其中一行。

TOP n[ PRECENT ]:返回查询结果的前n行,或前百分之n行。

{ * | <字段列表> }:“*”表示查询所有字段;<字段列表>表示查询指定的字段,多个字段逗号隔开。

2、查询列

● 查询全部列:SELECT * FROM <表名>

● 查询指定列:SELECT <列名1> [ , ...n ] FROM <表名>

● 查询计算后的列:SELECT 2016-brthday AS age FROM <表名>             (注:在查询中使用常量列同理,包括‘字符串’)

● 改变查询结果的列名:SELECT <列名> AS <新名> FROM <表名>             (注:使用* 不可指定列别名,多列逗号隔开)

● TOP关键字限制返回行数:SELECT TOP n <列名> [, ...n][WITH TIES] FROM <表名>   注:TIES可并列

● 消除重复的数据行:SELECT DISTINCT <列名> FROM <表名>

3、查询行(条件查询)

● 比较判断符:SELECT * FROM Student WHERE stu_sex = ‘男’                          =、>、>=、<、<=、!=

● 逻辑运算符:SELECT * FROM Student WHERE stu_sex = ‘男’ AND stu_age = ‘16’              AND、OR、NOT

● 空值判断符:SELECT stu_name FROM Student WHERE stu_native IS [NOT] NULL

● 范围运算符:SELECT * FROM Student WHERE stu_age [NOT] BETWEEN 13 AND 16

● 列表运算符:SELECT * FROM Student WHERE stu_native [NOT] IN (‘北京’, ‘上海’)

● 模式匹配符:SELECT stu_name, stu_sex FROM Student WHERE stu_sex [NOT] LIKE ‘李%’

_:任何单个字符

%:任意多个字符,包括0个

[ ]:指定范围内的单个字符,如[abf-z]表示除‘c’ ‘d’ ‘e’以外任意一个字符

[^]:不在指定范围内的单个字符,如[abf-z]表示‘c’ ‘d’ ‘e’之内任意一个字符

LIKE ‘ab%’

LIKE ‘%ab’

LIKE ‘%ab%’

LIKE ‘_ab’

LIKE ‘_[abc]’

LIKE ‘[abc]%’

返回以‘ab’开头的任意字符串

返回以‘ab’结尾的任意字符串

返回包含‘ab’的任意字符串

返回以‘ab’结尾的包含三个字符的任意字符串

返回第二个字符是的任意字符串

返回以‘a’ ‘b’或‘c’开头的任意字符串

4、查询排序

● 对一列排序:SELECT * FROM Student ORDER BY stu_id ASC                          (注:可省略ASC,默认升序)

● 对多列排序:SELECT * FROM Score ORDER BY sco_overall DESC, sco_usual DESC             (矛盾处如何取舍?)

5、聚合函数

● SELECT SUM(sco_overall) AS ‘总评成绩总分’, AVG(sco_overall) AS ‘总评成绩平均分’ FROM Score

注:SUM()和AVG()——所包含的列必须是数值型

● SELECT MAX(sco_overall) AS ‘总评成绩最高分’, MIN(sco_overall) AS ‘总评成绩最低分’ FROM Score

● SELECT COUNT(*) AS ‘及格数’, FROM Score WHERE sco_overall >= 60           (注:COUNT(*)——包括空值行)

SELECT COUNT(stu_phone) AS ‘有手机号码的人数’ FROM Student           (注:COUNT(字段名)——不包括空值行)

6、分组查询

● GROUP BY分组:

例:SELECT Cno AS ‘课程号’ COUNT(Sno) AS ‘选课人数’ FROM SC WHERE Sdept = ‘信息’ GROUP BY Cno

/*先执行WHERE选出信息系学生,再执行GROUP BY对SC表按Cno分组(同Cno一组),最后执行COUNT求每组人数*/

注:GROUP BY后不能用AS指定的别名,如‘课程号’;GROUP BY分组依据列不能是text、ntext、image和bit类型的列。

● HAVING分组

说明:WHERE筛选FROM指定的表,GROUP BY对筛选结果进行分组,HAVING在对分组进行二次筛选)

WHERE和HAVING的区别: ● WHERE中使用的条件在HAVING中同样适用;

● WHERE中不可以包含聚合函数,HAVING可以;

● WHERE的条件在分组之前应用,HAVING在之后。

例:SELECT Sno, COUNT(*) AS ‘选课门数’ FROM SC WHERE Sdept = ‘信息’ GROUP BY Sno HAVING COUNT(*)>3

/*先执行WHERE选出信息系学生,再执行GROUP BY将学生按学号Sno分组,再执行HAVING将COUNT(*)>3的选出*/

辩:SELECT Sdept, COUNT(*) FROM Student WHERE Sdept IN(‘计算机’, ‘信息’) GROUP BY Sdept 【 √ 】

... ... ... ... ... ... ... ... ... ... ... ... ... .... GROUP BY Sdept HAVING Sdept IN(‘计算机’, ‘信息’) 【 √ 】

SELECT Sdept, COUNT(*) FROM Student WHERE Sage<=20 GROUP BY Sdept 【 √ 】

... ... ... ... ... ... ... ... ... ... ... ... ... ...  GROUP BY Sdept HAVING Sage<=20 【 × 】

注:GROUP BY后结果中只含分组依据列Sdept和五个聚合函数,即执行到HAVING时已没有Sage列 ! ! !

即,HAVING中只能包含聚合函数和分组依据列 !

7、多表连接查询

(1) 内连接 语法:SELECT 列表.列名 FROM 列表1 [INNER] JOIN 列表2 ON 连接条件表达式

● 等值连接:连接条件表达式使用“=”,查询结果中列出被连接表中的所有列,包括重复列。

SELECT * FROM Student INNER JOIN Class ON Student.stu_classid=Class.cla_id   (注:*指Student的所有列)

● 自然连接:连接条件表达式使用“=”,查询结果中列出被连接表中的所有列,删除重复列。         (注:语法上与上区别?)

SELECT Student.*, Class.cla_name FROM Student INNER JOIN Class ON Student.stu_classid=Class.cla_id

● 使用表别名:原名 [AS] 别名                                            (注:后面改的名字,前面已经可以使用了?)

SELECT t.tea_name, d.dep_name FROM Teacher AS t INNER JOIN Department AS d ON t.tea_depid=d.dep_id

● 多表内连接:每增加一张表,就增加一个[INNER] JOIN ... ON子句。

SELECT Student.stu_name, Course.cou_name, Score.sco_overall FROM Score

INNER JOIN Student ON Score.sco_stuno=Student.stu_no

INNER JOIN Student ON Score.sco_courseid=Course.cou_id

(2) 外连接

● 左外连接LEFT [OUTER] JOIN:结果不仅包括连接列所匹配的行,还包括LEFT [OUTER] JOIN指定的左表的所有行,

若左表某行在右表没有匹配行,则结果集中右表的所有选择列均为空值。

语法:SELECT 列表.列名 FROM 表1 LEFT [OUTER] JOIN 表2 ON 连接条件表达式

● 右外连接RIGHT [OUTER] JOIN:同理。

语法:SELECT 列表.列名 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 连接条件表达式

● 全外连接FULL [OUTER] JOIN:同理。

语法:SELECT 列表.列名 FROM 表1 FULL [OUTER] JOIN 表2 ON 连接条件表达式

(3) 交叉连接

含义:将连接的两个表的所有行进行组合形成一个结果集,相当于两个表的“乘积”。

语法:SELECT 列表.列名 FROM 表1 CROSS 表2

第7章 T-SQL语句

1、语言分类

● 数据操作语言DML:INSERT、DELETE、UPDATE、SELECT

● 数据控制语言DCL:GRANT、DENY、REVOKE

● 数据定义语言DDL:CREATE/DROP/ALTER TABLE/VIEW/INDEX/PROCEDURE/TRIGGER

● 附加语言元素:SET/BEGIN TRANSACTION/COMMIT、OPEN、CLOSE、DECLARE、ROLLBACK、FETCH、EXECUTE

● 注释:单行注释( “ -- ” ); 多行注释( “ /* ... */ ” )

2、变量

(1) 局部变量(前缀@)

● 声明:DECLARE @变量名 数据类型

● 赋值:方法1:SET @变量名=值

方法2:SELECT @变量名=值     (注:要确保查询的记录不多于一条,否则把最后一条查询记录的值赋给变量)

● 例:DECLARE @name VARCHAR(10)

DECLARE @classid VARCHAR(10)

SET @name = ‘王濛’                                                          --为@name赋值

SELECT @classid = stu_classid FROM Student WHERE stu_name = @name   --为@classid赋值

SELECT * FROM Student WHERE stu_classid = @classid

(2) 全局变量(前缀@@)

全局变量

说明

@@CONNECTIONS

@@ERROR

@@IDENTITY

@@LANGUAGE

@@MAX_CONNECTIONS

@@REMSERVER

@@ROWCOUNT

@@SERVERNAME

@@SERVICENAME

@@TRANSCOUNT

@@VERSION

返回自上次启动SQL Server以来连接或试图连接的次数。

返回最后一个T-SQL错误的错误号,没有错误返回0。

返回最后插入行的标识列的列值。

返回当前使用语言的名称。

返回SQL Server实力允许同时进行的最大用户数。

返回登录记录中记载的远程SQL Server服务器的名称。

返回收上一个SQL语句影响的行数。

返回本地服务器名称。

返回该计算机上的SQL服务的名称,若当前实力为默认实例,则返回MSSQLSERVER。

返回当前连接的活动事务数。

返回SQL Server的版本信息。

例:SELECT @@LANGUAGE AS ‘使用语言’, @@SERVICENAME AS ‘SQL服务名称’

3、输出语句

方法1:SELECT 变量 AS 自定义列名0

例:SELECT @@LANGUAGE AS ‘当前使用的语言’    (注:输出结果以表格方式显示)

方法2:PRINT 变量或字符串

例:PRINT ‘当前使用的语言是:’ + @@LANGUAGE  (注:输出结果以文本方式显示)

例:PRINT ‘当前错误号是:’ + @@ERROR          (注:文本类型 + 整数类型 = 出错)

改:PRINT ‘当前错误号是:’ + CONVERT(VARCHAR(10), @@ERROR)

4、流程控制语句

技巧:将表格数据和文本消息输出在同一窗口——工具--选项--查询结果--将查询结果的默认方式改为:以文本格式显示结果!

WHILE、BEGIN...END、IF...ELSE语句

CASE语句

DECLARE @num int

WHILE(1=1)

BEGIN

SELECT @num = COUNT(*) FROM Score WHERE sco_overall <= 50

IF(@num>0)

UPDATE Score SET sco_overall = sco_overall + 1

ELSE

BREAK

END

CASE 表达式

WHEN 值/表达式 THEN 结果

... ...

[ELSE 其他结果]

END

5、批处理语句

批处理是一条或多条T-SQL语句集合,这些语句为完成一个整体的目标而同时执行,GO是结束标志。

SQL Server规定,创建库、创建表、创建存储过程、创建视图等,都必须在结尾加上“GO”批处理标志。

第8章 数据查询进阶--子查询

若一个SELECT嵌套在INSERT、DELETE、UPDATESELECT中,则称为嵌套查询。外层是主查询;内层是子查询,子查询用括号括起来,先执行,但子查询的SELECT语句中不能使用ORDER BY子句(ORDER BY只能对最终查询结果进行排序)。

1、使用比较运算符的(不相关)子查询:

语法:WHERE 表达式 比较运算符 (子查询)

例:SELECT stu_name FROM Student WHERE stu_sex = (SELECT stu_sex FROM Student WHERE stu_name = ‘王濛’)

2、使用[NOT] IN的(不相关)子查询:

语法:WHERE 表达式 [NOT] IN (子查询)

例:查询选修VB课程的学生的学号和姓名。

方法1:SELECT Sno, Smane FROM Student S ON S.Sno = SC.Sno JOIN Course C C.Cno = SC.Cno WHERE Cname =‘VB’

方法2:SELECT Sno, Sname FROM Student

WHERE Sno IN (SELECT Sno FROM SC

WHERE Cno IN (SELECT Cno FROM Course WHERE Cname = ‘VB’))

3、使用[NOT] EXISTS的(相关)子查询:

语法:WHERE 表达式 [NOT] EXISTS (子查询)

说明:系统对EXISTS后面的子查询进行运算判断它是否返回行,若至少返回一行,则EXISTS的结果为TRUE,否则为FALSE,

外层查询在EXISTS为TRUE时才执行。由于EXISTS只返回真假,在子查询中指定列名没有意义,因此列名通常用“*”。

例:查询没有选修“c01”课程的学生的姓名。

法1:SELECT DISTINCT Sname FROM Student S JOIN SC ON S.Sno=SC.Sno WHERE Cno != ‘c01’              【×】

法2:SELECT Sname FROM Student WHERE Sno IN (SELECT Sno FROM SC WHERE Cno != ‘c01’)               【×】

... ... ... ... ... ... ... ... ... ... ... ... ... ... ... [NOT] IN (SELECT Sno FROM SC WHERE Cno = ‘c01’)         【√】

法3:SELECT Sname FROM Student WHERE EXISTS (SELECT * FROM SC WHERE Sno=S.Sno AND Cno != ‘c01’)【×】

... ... ... ... ... ... ... ... ... ... ... ... [NOT] EXISTS (SELECT * FROM SC WHERE Sno=S.Sno AND Cno = ‘c01’)【√】

注:三种错误的原因相同,在查询时是组行判断的,而这三种情况下只要满足Cno != ‘c01’就作为结果,使得结果中既包含没有c01

的学生,也包括选c01的同时也选了其他课程的学生。

第9章 索引、视图、事务、存储过程、触发、游标(并发控制、函数)

第1章 下载及安装

SQL Server 2012 案例教程(贾祥素)——学习笔记的更多相关文章

  1. (火炬)MS SQL Server数据库案例教程

    (火炬)MS SQL Server数据库案例教程 创建数据库: CREATE DATABASE TDB //数据库名称 ON ( NAME=TDB_dat,//逻辑文件名 在创建数据库完成之后语句中引 ...

  2. MDX导航结构层次:《Microsoft SQL Server 2008 MDX Step by Step》学习笔记九

    <Microsoft SQL Server 2008 MDX Step by Step>学习笔记九:导航结构层次   SQL Server 2008中SQL应用系列及BI笔记系列--目录索 ...

  3. SQL Server 2012复制教程以及复制的几种模式

    简介 SQL Server中的复制(Replication)是SQL Server高可用性的核心功能之一,在我看来,复制指的并不仅仅是一项技术,而是一些列技术的集合,包括从存储转发数据到同步数据到维护 ...

  4. 一个小时成功安装SQL Server 2012图解教程

    在安装微软最新数据库SQL Server 2012之前,编者先确定一下安装环境:Windonws 7 SP1,32位操作系统.CPU是2.1GHz赛扬双核T3500,内存2.93GB. 安装SQL S ...

  5. SQL server 2012安装教程

    转自:https://blog.csdn.net/u013162035/article/details/78567389 注]博主使用的是SQL Server2012 其他版本的安装类似.[第一步]下 ...

  6. Eclipse 连接 SQL Server 2012数据库 教程

    教程:https://wenku.baidu.com/view/78b9957e0066f5335a8121b7.html

  7. Microsoft SQL Server 2012安装说明

    Microsoft SQL Server 2012安装说明 环境:Windows8, Windows7, WinVista, Win2003, WinXP Microsoft SQL Server 2 ...

  8. SQL Server 2012安装错误案例:Error while enabling Windows feature: NetFx3, Error Code: -2146498298

    案例环境: 服务器环境 :    Windows Server 2012 R2 Standard 数据库版本 :    SQL Server 2012 SP1 案例介绍:   在Windows Ser ...

  9. SQL SERVER 2012 执行计划走嵌套循环导致性能问题的案例

    开发人员遇到一个及其诡异的的SQL性能问题,这段完整SQL语句如下所示: declare @UserId             INT declare @PSANo              VAR ...

随机推荐

  1. js的event事件

    一 .  焦点:使浏览器能够区分区分用户输入的对象,当一个元素有焦点的时候,那么他就可以接收用户的输入. 我们可以通过一些方式给元素设置焦点 1.点击 2.tab   3.js 不是所有元素都能够接受 ...

  2. 提升单元测试体验的利器--Mockito使用总结

    为神马要使用Mockito? 在编写单元测试的时候,为了尽可能的保证隔离性,我们时常需要对某些不容易构造或者不容易获取或者对外部环境有依赖的对象,用一个虚拟的对象来创建以便于测试.假设你正在开发的的代 ...

  3. 作为前端,我为什么选择 Angular 2?

    转自:https://sanwen8.cn/p/2226GkX.html 没有选择是痛苦的,有太多的选择却更加痛苦.而后者正是目前前端领域的真实写照.新的框架层出不穷:它难吗?它写得快吗?可维护性怎样 ...

  4. uibutton颜色设置

     UIColor *color = [UIColor colorWithRed:100 / 255.0 green:20 / 255.0 blue:50 / 255.0 alpha:1.0]; 

  5. JavaScript中Object的总结

    基于原型继承,动态对象扩展,闭包,JavaScript已经成为当今世界上最灵活和富有表现力的编程语言之一. 这里有一个很重要的概念需要特别指出:在JavaScript中,包括所有的函数,数组,键值对和 ...

  6. MAVEN总结,整合Eclipse以及配置私服

    对maven的理解 我们知道maven是一个项目管理工具,其核 心特点就是通过maven可以进行jar包的依赖管理,保证jar包版本的一致性,以及可以使多个项目共享jar包,从而能够 在开发大型jav ...

  7. maven无法加载本地jar包以及maven项目打包后本地jar包没有打进项目的问题解决办法

    1.首先设置依赖项,这样maven就会把该路径下的jar包导入项目引用 <dependency> <groupId>DPSDK-Manager</groupId> ...

  8. 利用arpspoof和urlsnarf 进行ARP嗅探

    地址解析协议 (ARP, Address Resolution Protocol) 是如何将网络设备的MAC地址和其IP地址关联起来的,这样在同一个局域网内的设备就能相互知道彼此的存在.ARP基本上就 ...

  9. JDBC加载数据库驱动的方式

    JDBC作为数据库访问的规范接口,其中只是定义一些接口.具体的实现是由各个数据库厂商来完成. 一.重要的接口: 1.public interface Driver 每个驱动程序类必须实现的接口.Jav ...

  10. JavaScript数组知识点

    强类型语言数组特点:连续的,指定好长度, 还要规定好数据类型弱类型语言数组特点:不一定是连续的 可以不用指定长度 不限定数据类型(可以存储任意类型的数据)数组定义方式:1.var arr=new Ar ...