TransactSQL语言 学习sql server2005 step by step(四)

4.1Transact-SQL语言简介

     Transact-SQL语言是微软公司在Microsoft SQL Server系统中使用的语言,是对SQL语言的一种扩展形式。 Transact-SQL语言有4个特点:一是一体化的特点,集数据定义语言、数据操纵语言、数据控制语言、事务管理语言和附加语言元素为一体。二是有两种使用方式,即交互使用方式和嵌入到高级语言中的使用方式。三是非过程化语言,只需要提出“干什么”,不需要指出“如何干”,语句的操作过程由系统自动完成。四是,类似于人的思维习惯,容易理解和掌握。那么sql2005还支持xml.

注意:我所讲的内容是针对sql2005有些操作也会对比sql200.

 4.2Transact-SQL语言的特点和执行方式

     在Microsoft SQL Server 2005系统中,根据Transact-SQL语言的功能特点,可以把Transact-SQL语言分为5种类型,即数据定义语言、数据操纵语言、数据控制语言、事务管理语言和附加的语言元素。 l在Microsoft SQL Server 2005系统中,主要使用SQL Server Management Studio工具来执行Transact-SQL语言编写的查询语句。除此之外,还可以使用sqlcmd实用工具来执行Transact-SQL语句。

 4.3数据定义语言

     数据定义语言用于创建数据库和数据库对象,为数据库操作提供对象。例如,数据库以及表、触发器、存储过程、视图、索引、函数、类型、用户等都是数据库中的对象,都需要通过定义才能使用。在DDL中,主要的Transact-SQL语句包括CREATE语句、ALTER语句、DROP语句。

4.4数据操作语言

     数据操纵语言主要是用于操纵表、视图中数据的语句。当我们创建表对象之后,初始状态时该表是空的,没有任何数据。如何向表中添加数据呢?这时需要使用INSERT语句。如何检索表中数据呢?可以使用SELECT语句。如果表中数据不正确的,那么可以使用UPDATE语句进行更新。当然,也可以使用DELETE语句删除表中的数据。实际上,DML语言正是包括了INSERT、SELECT、UPDATE、DELETE等语句。

4.5数据控制语言

    数据控制语言(DCL)主要用来执行有关安全管理的操作,该语言主要包括GRANT语句、REVOKE语句和DENY语句。GRANT语句可以将指定的安全对象的权限授予相应的主体,REVOKE语句则删除授予的权限,DENY语句拒绝授予主体权限,并且防止主体通过组或角色成员继承权限。

4.6表

    表是关系模型中表示实体的方式,是用来组织和存储数据、具有行列结构的数据库对象。 一般而言,表具有下列一些基本特点:代表实体、由行和列组成、行和列的顺序是不重要的等等。 下面,详细讲述这些特点。

     4.6.1表的类型

      在Microsoft SQL Server 2005系统中,按照表的作用,可以把表分为4种类型,即

  • 普通表
  • 已分区表

     如果一个表中包含了大量的、以多种不同方式使用的数据,且一般地查询不能按照预期的成本完成,那么应该考虑使用已分区表。 已分区表是指按照数据水平方式分区,将数据分布于一个数据库的多个不同的文件组中。在对数据进行查询或更新时,这些已分区表将被视为独立的逻辑单元。

       注意:只有Microsoft SQL Server 2005企业版支持已分区功能。

  • 临时表
  • 系统表

每一种类型的表都有自己的作用和特点。

4.7简单T-sql语句总结

查询语句基本结构:
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

select 子句
自定义输出格式
例:查全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名
SELECT Sname , 'Year of Birth:',
        2003-sage , LOWER(Sdept)
FROM    Student;


消除重复行: DISTINCT    (缺省为ALL)

例: 求选修了课程的学生号
       SELECT    DISTINCT Sno
       FROM      student

Where 子句——运算符
比较:<、<=、>、>=、=、<>、not + ~
确定范围:Between A and B、Not Between A and B
确定集合:IN、NOT IN
字符匹配:LIKE,NOT LIKE
空值:IS NULL、IS NOT NULL
多重条件:AND、OR、NOT

例1.求年龄在18~22 (含18, 22)之间的学生名及年龄
SELECT Sname, Sage
FROM    Student
WHERE   Sage BETWEEN 18 AND 22;

或者:
SELECT Sname, Sage
FROM    Student
WHERE Sage>=18 AND Sage<=22;

例2.求信息工程系、计算机系、数学系的系名、学生名 (或不是这些系的学生)
        SELECT   Sdept, Sname       
        FROM     Student
        WHERE    Sdept IN (‘IE’, ‘CS’, ‘MA’);
例3.求倒数第三、四个汉字为’系统’的课程名
   SELECT Cname
   FROM Course
   WHERE Cname LIKE ‘%系统_ _ _ _’;

例4.查缺少成绩的学生的学号和相应的课程号

    SELECT   Sno, Cno  
    FROM      SC
    WHERE   Grade IS NULL;

Group By子句

将查询结果集按某一列或多列的值分组,值相等的为一组,一个分组以一个元组的形式出现
只有出现在Group By子句中的属性,才可出现在Select子句中

组函数的使用:
COUNT([DISTINCT|ALL] *|列名)
SUM([DISTINCT|ALL] 列名)
AVG([DISTINCT|ALL] 列名)
MAX([DISTINCT|ALL] 列名)
MIN([DISTINCT|ALL] 列名)


例:统计各系学生的人数。
       Select sdept,count(*) as stu_count
       From Student
       Group By sdept

Having子句

决定哪些分组符合要求,作用于分组

例:求选修课程在2门以上且都及格的学生号及总平均分
SELECT Sno, AVG(ALL Grade)  
FROM SC
GROUP BY Sno
HAVING COUNT(Cno)>2 AND MIN(Grade)>=60;

ORDER BY子句
对查询结果按照一个或多个列的值进行升/降排列输出,升序为ASC;降序为DESC,空值将作为最大值排序

例:对选修’C5’课程的学生按成绩降序排列,同分数者按学号升序排列
SELECT Sno, Grade
From SC
WHERE Cno=’C5’
ORDER BY Grade DESC,Sno ASC;


SQL更新语句

插入记录: INSERT INTO ..... VALUES()

例1:新增一个学生信息
INSERT INTO   student
VALUES(‘2003001’,‘陈冬’,18,‘男’,’电商’,’管理学院’,’徐州’);


例2:新增一条选课记录
INSERT INTO   SC(Sno,Cno)  
VALUES (‘2003001’,‘C003’);


删除记录:DELETE FROM

例1:删除学号为‘2003009’的学生。

DELETE FROM   SC
WHERE sno = ' 2003009 ';

例2:清空SC表
    DELETE FROM SC      


修改记录:UPDATE SET

例1:把名为MARTIN的职工的工种改为MANAGER, 工资增加收入20%,
UPDATE EMPLOYEE
SET    JOB=‘MANAGER’,Salary= Salary*1.2
WHERE NAME = ‘MARTIN’;

例2:将所有学生的年龄增加1岁
    UPDATE student
    SET    Sage=Sage+1;

      

有错误的地方欢迎大家拍砖,希望交流和共享。
原文地址:https://www.cnblogs.com/MR_ke/p/1671282.html