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;

          

    有错误的地方欢迎大家拍砖,希望交流和共享。
  • 相关阅读:
    iOS基础教程:在建好的项目中加入CoreData[转]
    iOS开发--使用lipo命令制作模拟器与真机通用静态库
    Linux命令之du
    简单了解gzip、bzip2、xz
    Linux命令之rpm
    进入CentOS7紧急模式恢复root密码
    解决Linux用户模板文件被删除后显示不正常问题
    Linux修改用户基本信息(不含密码)
    Linux用户密码文件/etc/shadow相关
    SecureCRT、Xmanager对Linux上传下载文件或文件夹
  • 原文地址:https://www.cnblogs.com/MR_ke/p/1671282.html
Copyright © 2011-2022 走看看