SQL Server  的系统数据库

1、maste数据库主要记录了sql server 系统的所有的系统信息2、tempdb 数据库为临时表和其他临时存储需求提供存储空间3、model 数据库 建立所有用户数据库时的模板。4 、msdb 数据库数据库在 SQL Server 代理程序调度报警和作业时使用
CREATE  DATABASE  database_name ON PRIMARY( NAME= , FILENAME= ‘ ’ SIZE=, MAXSIZE=, FILEGROWTH=)
增加数据库容量。
   ALTER   DATABASE    database_name  MODIFY   FILE (  NAME=file_name,  SIZE=newsize )
使用T-SQL语句在查询分析器中收缩数据库容量。 DBCC SHRINKDATABASE(db_name,1) 3、更改数据库名称(1)在“对象资源管理器”窗口中,右击要更改名称的数据库->选择”
重命名”(2)在查询分析器中使用T-SLQ命令更改数据库名称。 EXEC SP_RENAMEDB ‘oldname’ , ’newname’4、删除数据库 (1)在“对象资源管理器”窗口中,右击要删除的数据库->选择“删除”命令。 (2)在查询分析器中使用T-SQL命令删除数据库。 DROP DATABASE database_name
create table table_name ( 学号 int primary key identity , 名称 char(6) not null, 专业方向 varchar(10) not null, 系部代码 char(2) not null, 备注 varchar(50) )
使用系统存储过程sp_help查看表信息。 EXEC  sp_help table_name
重命名表:exec sp_rename 'old_table_name','new_table_name‘重命名列:exec sp_rename 'table_name.old_name','new_name','column‘添加新列:alter table [table_name] add [new_column] varchar(33)更改列的数据类型:alter table [table_name]  alter column [column_name] [data_type]删除列: alter table [table_name] drop column [column_name]删除表:drop table table_name
删除表的所有数据:Truncate table [table_name]创建主键约束 alter table [table_name]  add constraint pk  primary key clustered (列名) 创建外建约束 alter table [table_name]  add constraint wz  foreign key (列名)  references 表名(列名)
1数据的添加 向表中添加数据可以使用INSERT 语句。 INSERT 语句的语法格式: 1.1、最简单的insert 语句  INSERT [into] table_name (column_list) VALUES(data_values) [into]是一个可选的关键字,可以将它用在insert和目标表之间。 table_name 是将要添加数据的表的名称 (column_list) 是要添加数据的字段名称或字段列表,必须用括写将column_list 括起来,并用逗号进行分隔。若没有指字段列表,则指字全部字段
1.2 省略values 的insert 语句 在T-SQL 语言中,有一种简单的插入多行的方法。这种方法使用select 语句查询出的结果代替values 子句.这种语法结构如下: INSERT [into] table_name (column_name)  SELECT [column_name] FROM table_name where [search_conditions][shere search] 查询条件。INSERT表和SELECT表的结果集的列数,数据类型必须一致。[search_conditions]查询条件
2数据的修改     在数据输入过程中,可能会出现输入错误,或是因为时间变化而需要更改数据。修改表中的数据可以直接打开要修改的表进行更改表的数据。或使用T-SQL进行修改,UPDATE 的语法格式如下:UPDATE table_name SET  column_name=值 where[search_conditions]          table_name是需要更新的表的名称。 SET 是指定要更新的列或变量名称的列名
3数据的删除 随着系统的运行,表中可能产生一些无用的数据,这些数据不仅占用空间,而且还影响查询的速度。删除数据可以使用detelt语句     DELETE table_name WHERE [search_conditions]   table_name 是要从其中删除数据的表中名称。   WHERE 指定用于限制册除行数据的条件。如果没有提供   where子                         句,则delete 删除表中的所有行。   [search_conditions]指定删除行的限定条件。
4.简单查询    数据库存在的意义在于将数据组织在一起,以方便查询。  SQL语言中最主要、最核心的部分是查询功能。查询语句用来对已经存在于数据库的数据按照特定的组合、条件表达式或者一定进检索。其基本格式是由select 子句、from子句和where 子句组成的sql查询语句: SELECT <列表名> FROM  <表或视图名> WHERE <查询限定条件> 也就是说, SELECT指定了要查看的列(字段),from 指定这些数据的来源(表或视图) WHERE则指定了要查询那些记录
1、输出表中的所有列    将表中的所有字段都在”结果”窗口列出来,可以有两种方法:一种是将所有字段名在SELECT关键字后列出来;另一种是在SELECT语句后使用一个*SELECT*FROM table_name2、输出表中部分列
列出表中的部分字段,可以在SELECT 关键字后依次把字段名写出来,之间用逗号隔开,字段的顺序可根据需要来指定,SELECT A,B,C FROM table_name
3、选择表中的若干记录两个不相同的记录,但在某字段上是相同的如果要去掉结果集中重复的行,可以在字段列表前面加个DISTINCT关键字。SELECT DISTINCT 列名 FROM table_name4、限制返回行数如果一个表中有上亿条记录,而用户只想看前n条,这就没有必要显视全部的记录。如果要限定返回的行数,可以在字段列表前使用TOP n关键字,可以返回结果的前n条记录信息。SELECT TOP n  FROM table_name
常用的查询条件
(1)比较大小:比较运算符是比较两个表达式的大小的运算符,各运算符的含义是=(等于)、>(大于) 、<(小于) 、>=(大于或等于) 、<=(小于或等于) 、<>(不等于) 、!=(不等于)(2)确定范围 确定范围运算符BETWEEN…AND 和NOT BETWEEN…AND…可以找属性值在(或不在)指定的范围内的记录。(3)确定集合确定集合运IN 和NOT IN 可以用来查找属性属于(或不属于)指定集合的记录
(4)字符匹配在实际的应用中,用户有时候不能给出精确的查询条件。因此,经常需要根据一些不确定的信息来查询。T-SQL语言提供了字符匹配运算符LIKE进行字符串的匹配运算。一般语法格式如下:    [NOT] LIKE ‘<匹配串>’ [ESCAPE ‘<换码字符>’]其含义是查找匹配串,与记录相匹配的记录。匹配串可以是完整的字符串,也可以含有通配符  “%”和“_” 。百分号,代表可包含任意长度的字符串。下画线,代表任意单个字符。 (5)涉及空值的查询 一般情况下,表的每一列都有其存在意义,但有时某些列可能暂时没有确定的值,这时用户可以不输入列的值。那么这列的值为NULL 空值运算符 IS NULL 用来判断指定的列值是否为空。 列表达式 [NOT] IS NULL(6) 多重条件查询 可以使用逻辑运算符 AND、OR、NOT 连接多个查询条件,实现多条件查询。 [NOT] 逻辑表达式 AND|OR
5. 完整的select 语句的基本语法格式虽然select 语句的完整语法较复杂,但是其主要的语法格式可归纳如下:SELECT select_list[into new_table_name] FROM table_list[WHERE search_conditions][GROUP BY group_by_expression][HAVING search_condition][ORDER BY  order_expression [asc|desc] ] SELECT select_list 描述结果集的列,它是一个逗号分隔的表达式, 在选择列表中使用 “*”表达式指定返回源表中所有的列
[INTO new_table_name] 用于指定使用结果集来创建一个新表,new_table_name是新表的名称FROM table_list 结果集数据来源于哪些表或视图。[WHERE search_conditions]查询条件GROUP BY group_by_expression    根据列中的值将结果分组。HAVING search_conditions 结果集附加筛选,通常与GROUP BY 一起使用。ORDER BY  order_expression [ASC|DESC] 对结果进行分组ASC 和DESC 关键字用于指定行是按升序还是降序排序。
6、用查询结果生成新表在实际的应用系统中,需要将查询结果保存成一个表,这个功能可以通过SELECT 语句中的INTO子句实现。 INTO 新表名新表名是被创建的新表,查询结果将自动添加到此表中。新表的字段由结果集中的字段列表决定。如果表名前加 “#” 则创建的表为临时表。
7、对结果进行分组 GROUP BY  将查询结果集按某一列或多列值分组,分组列的值相等为一组,并对每一组进行统计。 GROUP BY 列名 [HAVING 筛选条件表达式] “ BY 列名 “是按列名指定的字段进行分组,将该字段值相同的记录组成一组,对每一组记录进行汇总计算并生成一条记录。     “ HAVING 筛选条件表达式 ”表示对生成的组筛选后再对满足条件的组进行统计。
8、对查询的结果排序 可以使用ORDER BY 对查询结果按照一个或多个属性进行升序(ASC)或降序(DESC)排序,默认为升序。 ORDER BY {列名[ASC|DESC] [,...n] }
9、对数据进行统计。用户经常要对结果集进行统计,例如求和、平均值、最小值、个数等这些统计可以通过集合函数、COMPUTE子句,GROUP BY 子句来实现。使用集合函数COUNT([DISTINCT| ALL] *)统计记录个数COUNT ([DISTINCT| ALL] <列名>)统计记录个数。SUM ([DISTINCT| ALL] <列名>)计算一列值总和(此列必须是数值型)。AVG([DISTINCT| ALL] <列名>)计算一列值的平均值(此列必须是数值型)。MAX ([DISTINCT| ALL] <列名>)求一列值中的最大值。MIN ([DISTINCT| ALL] <列名>)求一列值中的最小值。
10、使用COMPUTE  对查询结果集中的所有记录进行汇总统计,并显视所有参加汇总记录的详细信息。 COMPUTE 集合函数 [BY 列名] 集合函数,例如 SUM() 、AVG()、COUNT()等。 “BY 列名” 按指定“列名”字段进行分组计算,并显视被统计记录的详细信息。    BY 选项必须与ORDER BY 一起使用。
11、合并结果集使用UNION 语句可以将查询结果集合并为一个结果集,也就合并操作语法如下: SELECT 语句  {UNION SELECT 语句}[,…n]参加UNION操作的各结果集的列数必须相同,对应的数据类型也必须相同。系统将自己动去掉并集的得复记录
一、连接查询前面所讲的查询是单表查询。若一个查询时涉及两个或两个以上的表,则称为连接查询。连接查询是关系数据库中最主要的查询,包括等值与非等值查询、自然连接、自身连接查询、外连接查询和复合条件连接查询等。交叉连接的语法格式:SELECT 列表列名 FROM 表名1 CROSS JOIN 表名2CROSS JOIN   交叉表连接关键字1、交叉连接查询 (1) 把A表中的所有数据,跟B表中的每一条数据进行拼接,从而形成了的新的数据集 新数据集=A表所有记录 x B表所有记录
(2)进行拼接时,加个条件语句 把学生表的每条记录的班级代码,与班级表的表的班级代码进行比较,如果列值相等,则拼接形成一条记录,否则不拼接。2、自然连接 用来连接两个表的条件称为连接条件或连接谓词,其中,比较运算符主要是:=、>、<、>=、<=、!= 等值连接的过程类似于交叉连接,不过它只拼接满足连接条件的记录到结果集中。语法格式为: SELECT 列表列名 FROM 表名1 JOIN 表名2   ON 表名.列名=表名2.列名
3、自身连接查询 连接操作既可在多表之间进行,也可以是一个表与其自己进行连接,称为表的自身连接。使用自身连接时,必须为表指定两个别名,以示区别。select a.姓名,b.性别from 学生 as a  join 学生 as b  on a.学号=b.学号
4、外连接查询 外连接的结果集不但包含满足连接条件的行,还包括相应表中的所有行,也就是说,即使某些行不满足连接条件,但仍需要输出该行记录。外连接包括三种:左外连接、右外连接和完全外连接。 (1)左外连接(LEFT OUTER JOIN) 左外连接是结果表中除了包含满足连接条件的记录外,还包含左表中不满足连接条件的记录。左表中不满足条件的记录与右表记录拼接时,右表的相应列上填充NULL值。左外连接的语法格式为: SELECT 列表列名 FROM 表名1 LEFT [OUTER] JOIN 表名2 ON 表名1.列名=表名2.列名
(2)右外连接(LEFT OUTER JOIN) 右外连接是结果表中除了包含满足连接条件的记录外,还包含右表中不满足连接条件的记录。右表中不满足条件的记录与左表记录拼接时,左表的相应列上填充NULL值。右外连接的语法格式为: SELECT 列表列名 FROM 表名1 RIGHT [OUTER] JOIN 表名2 ON 表名1.列名=表名2.列名
(3)完全外连接(FULL OUTER JOIN) 完全外连接是结果表中除了包含满足连接条件的记录外,还包含右表中不满足连接条件的记录。左(右)表中不满足条件的记录与右(左)表记录拼接时,右(左)表的相应列上填充NULL值。完全外连接的语法格式为 SELECT 列表列名 FROM 表名1 FULL [OUTER] JOIN 表名2 ON 表名1.列名=表名2.列名
5、复合连接条件查询 前面所介绍的连接查询中,ON连接条件表达式只有一个条件,允许ON连接表达式有多个连接条件,称为复合条件连接,或多表连接.SELECT 学生.学号,学生.姓名,学生.性别,班级.班级名称,专业.专业名称,系部.系部名称FROM 学生 JOIN 班级 ON 学生.班级代码=班级.班级代码   JOIN 专业 ON 学生.专业代码=专业.专业代码   JOIN 系部 ON 学生.系部代码=系部.系部代码
二、子查询 将一个查询块嵌套在另一个查询块的WHERE 子句或HAVING 短语条件中的查询叫做嵌套查询。我们把括号内的查询块称为子查询或内层查询,与之相对的概念是父查询或外层查询,即包含子查询的查询块。SQL 允许多层嵌套。但是子查询的SELECT语句中不能使用ORDER BY 子句,ORDER BY 只能对最终查询结果进行排序。 1、带有IN运算符的子查询(IN运算符的子查询返回的结果是集合) SELECT 列名 FROM 表名 WHERE 列名 IN  (SELECT 列名 FROM 表名 WHERE 列名 IN  SELECT 列名 FROM 表名 WHERE 列名 IN(1,2,3) )
2、带有比较运算符的子查询 父查询与子查询之间通过比较运算符连接,便形成了带有比较运算符的子查询。 父查询中的一个表达式与子查询返回的结果(单值)进行比较 (1)带有比较运算符的子查询返回的结果是单值 (2)若IN的子查询结果集为单值,则”=”符号和IN 可以互换 SELECT * FROM 表名 WHERE 列名= (SELECT 列名 FROM 表名 WHERE 列名=‘X’)
3、带有ANY 或 ALL运算符的子查询 子查询返回单值时可以使用比较运算符,而使用ANY 或ALL运算符时还必须同时使用比较运算符,带有ANY 或ALL 运算符的子查询的处理过程是:父查询通过ANY 或ALL运算符将父查询中的一个表达式与子查返回结果集中的某个值进行比较。
4、带有EXISTS运算符的子查询 使用EXISTS运算符后,子查询不返回任何数据,此时,若子查询结果非空(即至小存在一条记录) 则父查询的WHERE 子句返回真(TRUE),否则返回假(FLASE)