zoukankan      html  css  js  c++  java
  • 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;

          

    有错误的地方欢迎大家拍砖,希望交流和共享。
  • 相关阅读:
    事务传播机制,搞懂。
    洛谷 P1553 数字反转(升级版) 题解
    洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is Here 题解
    洛谷 P1055 ISBN号码 题解
    洛谷 P2141 珠心算测验 题解
    洛谷 P1047 校门外的树 题解
    洛谷 P1980 计数问题 题解
    洛谷 P1008 三连击 题解
    HDU 1013 题解
    HDU 1012 题解
  • 原文地址:https://www.cnblogs.com/MR_ke/p/1671282.html
Copyright © 2011-2022 走看看