第三章-标准SQL语句

  金牌会员 | 2022-10-25 09:14:58 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 634|帖子 634|积分 1902

3.1 SQL概述:


  • SQL:结构化查询语言,是关系数据库的标准语言,SQL是一个通用的、功能极强的关系数据库语言

    • 结构化查询:理解:就是只要告诉数据库我要干什么,怎么干就可以了

  • 3.1.2 SQL的特点:

    • 综合统一:

      • 集数据定义语言 DDL,数据操纵语言 DML,数据控制语言 DCL功能于一体,可以独立完成数据库生命周期中的全部活动,如下:

        • 定义关系模式,插入数据,建立数据库,
        • 对数据库中的数据进行查询和更新   
        • 数据库重构和维护
        • 数据库安全性、完整性控制等
        • 嵌入式SQL和动态SQL定义

      • 用户数据库投入运行后,可根据需要随时逐步修改模式,不影响数据的运行
      • 数据操作符统一(如:查询就用select,删除就用:delete) 

    • 高度非过程化:

      • 非关系数据模型的数据操纵语言“面向过程”,必须制定存取路径
      • SQL只要提出“做什么”,无须了解存取路径
      • 存取路径的选择以及SQL的操作过程由系统自动完成

    • 面向集合的操作方式:

      • 非关系数据模型采用面向记录的操作方式,操作对象是一条记录
      • SQL采用集合操作方式:

        • 操作对象、查找结果可以是元组的集合
        • 一次插入、删除、更新操作的对象可以是元组的集合


    •  以同一种语法结构提供多种使用方式:

      • SQL是独立的语言
      • 能够独立地用于联机交互的使用方式
      • SQL又是嵌入式语言
      • SQL能够嵌入到高级语言(例如C,C++,Java)程序中,供程序员设计程序时使用

    • 简单容学:

      • SQL功能极强,完成核心功能只用了9个动词
      • SQL功能 动词
        数据查询SELECT
        数据定义CREATE、DROP、ALTER
        数据操纵INSERT、UPDATE、DELETE
        数据控制  GRANT、REVOKE



  • 3.1.3SQL基本概念:




    • SQL支持关系数据库三级模式结构:

      • 基本表:

        • 本身独立存在的表
        • SQL中一个关系就对应一个基本表
        • 一个(或多个)基本表对应一个存储文件
        • 一个表可以带若干索引(索引:目的:快速查找数据,理解:相当于书中的目录,如给学号做一个目录,就可以快速查找)

      • 存储文件

        • 逻辑结构组成了关系数据库的内模式
        • 物理结构是任意的,对用户透明

      • 视图

        • 从一个或几个基本表导出的表
        • 数据库中只存放视图的定义而不存放视图对应的数据
        • 视图是一个虚表
        • 用户可以在视图上再定义视图



3.2 学生-课程数据库:


  • 本章节内容以书上学习为主,书上包括示例图表等
3.3 数据的定义:


  • SQL的数据定义功能:模式定义、表定义、视图和索引的定义
  •  
  • 3.3.1 模式的定义于删除:

    • 定义模式:

      • 模式在SQL理解:相当于一个仓库有不同的房间存放不同的工具,不同的房间就是不同的模式,不同的房间也只能放不同的工具,可以给房间授权只允许谁去访问,数据库就相当于仓库
      • 语句格式如下:

        • CREATE SCHEMA  AUTHORIZATION  

          • AUTHORIZATION :该关键字的意思是把谁设置成该模式的管理员


      • 例子:为用户WANG定义一个学生-课程模式S-T

        • CREATE SCHEMA "S-T" AUTHORIZATON WANG;

      • 细节:

        • 若没有指定模式名,那么就以用户名来表示

          • CREATE SCHEMA   AUTHORIZATON WANG; 

        • 在创建模式时同时还可以建立表

          • 语法:CREATE SCHEMA   AUTHORIZATON [|]; 


        • 执行创建模式语句必须拥有DBA权限,或者DBA授权在CREATESCHEMA的权限

          • 如:张三管理太多模式了,他就可以在创建模式的时候把权限给到历史,注意的是数据库要有李四这个人



    • 删除模式:

      • 语法:DROP SCHEMA  ;
      • 中的两选项必须二选一:

        • CASCADE(级联)

          • 删除模式的同时把该模式中所有的数据库对象全部删除

        • RESTRICT(限制)

          • 如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行


      • 例子:DROP SCHEMA ZHANG CASCADE;

        • 删除模式ZHANG,同时该模式中定义的表也被删除 



  • 3.3.2 基本表的定义、删除与修改:

    • 定义基本表:    

      • 语句格式:


          CREATE TABLE  
          (   [],
              [],
            []);





      • 细节:

        • 如果完整性约束条件涉及到该表的多个属性列 -  [],否则定义在列 - []
        • 逗号代表一条语句的结束 
        • [ ] 大括号里的内部代表可有可无

      • 例子:






    • 数据类型:





        • 字符串类型:

          枚举类型
          枚举类型英文为ENUM,对1~255个成员的枚举需要1个字节存储;对于255 ~ 65535个成员,需要2个字节存储。最多允许65535个成员。创建方式:enum(“M”,“F”);
          日期类型:



    • 模式与表:

      • 每一个基本表都属于某一个模式,一个模式包含多个基本表

        • 理解:模式代表仓库房间,基本表代表工具,工具可以是锤子、铁锹等等,所以基本表都属于某一个模式,一个模式包含多个基本表

      • 创建基本表(其他数据库对象也一样)时,若没有指定模式,系统根据搜索路径来确定该对象所属的模式

        • 理解:创建表,没有指定模式,根据搜索路径来确定:买了工具,都我没有说放到能够房间,那就谁买的谁去管理
        • 显示当前搜索路径:

          • SHOW search path; 

        • 搜索路径的当前某默认值:

          • $user(用户名,登录时的用户名), PUBLIC;

        • DBA用户可以设置搜索路径:

          • SET search_path To "S-T",PUBLIC;  

            • “S-T”就是修改的搜索路径,PUBLIC是没有S-T就创建一个PUBLIC的模式       
            • 理解:买工具回来放到S-T房间,如果没有S-T房间就放到PUBLIC房间中去


        • 若搜索路径的模式名都不存在,系统将给出错误
        • 若搜索路径中的存在模式,ROMBS还使用模式列表中第一个存在的模式作为数据库对象的模式名

          • 理解:我设置了多个模式名,使用的时候用第一个,如果不存在在找第二个               



    • 创建基本表:

      • 在模式的状态下创建表 - 就是创表的时候指定模式:
      • 1.创建表给出模式名:

        • CREATE TABLE "ST-T".Studnet(...);  // Student所属的模式是S-T  
        • CREATE TABLE "ST-T".Course(...);  // Course所属的模式是S-T - 后需还可以往模式中添加表,一个模式可以有若干个基本表(前面有说)
        • CREATE TABLE "ST-T".SC(...);  // SC所属的模式是S-T       

      • 2.在创建模式语句中同时创建表:



      • 3.设置所属模式,在创建表中不必给出模式名(就是设置它的搜索路径)




    • 修改基本表:

      • 语法:

        • CASCADE - 级联删除,使用该操作自动删除引用了该列的其它对象
        • RESTRICT -限制删除,使用该操作如果该列被其它对象引用,就会拒绝删除该列
        • ALTER COLUMN - 用于修改原有的列定义,包括修改列名和数据类型  

      •   
      • 例子:


    • 删除基本表: 

      • 语法:DROP TABLE [RESTRICT| CASCADE];
      • 基本表定义被删除,数据被删除,表上建立的索引、视图、触发器等一般也将被删除
      • RESTRICT:删除表是有限制的,欲删除的基本表不能被其他表的约束所引用
        如果存在依赖该表的对象,则此表不能被删除  

      • CASCADE:删除该表没有限制。
        在删除基本表的同时,相关的依赖对象一起删除

      • 例子:

      • 不同数据库处理的策略:       



  • 3.3.3 索引的创建和删除:

    • 建立索引的目的:加速查询速度
    • 谁可以建立索引:DBA或表的属主(建表人)   
    • DMBS一般会自动建立以下列上的索引(相当于有下面关键字的自动加到目录):

      • PRIMARY KEY;
      • UNIQUE;  

    • 谁维护索引:DMBS自动完成
    • 使用索引:DMBS自动执行是否使用索引及使用哪些索引 
    • R(R表示关系数据库)DBMS中索引一般采用B+树、HASH索引来实现
    • B+树索引具有动态平衡的优点
      HASH索引具有查找速度快的特点
      采用B+树,还是HASH索引 则由具体的RDBMS来决定

    • 索引是关系数据库的内部实现技术,属于内模式的范畴
    • CREATE INDEX 语句定义索引时,可以定义索引是唯一索引、非唯一索引(如:年龄,年龄可能就是会重复)或聚簇索引
    • 建立索引:

      • 语句:CREATE [UNIQUE(唯一索引)] [CLUSTER(聚簇索引)] INDEX  
                   ON ([][,[] ]…); - 不写大括号里面的索引,就是非唯一索引


    • 建立唯一索引例子:  
    •  
    • 建立聚簇索引例子

      • 什么是聚簇索引:数据搜索到计算机中
      •   


 









    • 删除索引:

      • 语句:DROP INDEX;
      • 删除索引时,系统会从数据字典中删去有关该索引的描述
      • 例:删除Student表的Stusname索引
      • DROP INDEX Stusname; 

    • 数据字典: - 和新华字典一样记录了所有数据

      • 数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有的定义信息,包括关系模式定义、视图定义、索引定义、完整性约束定义、各类用户对数据库的操作权限、统计信息等。
      • 关系数据库管理系统在执行SQL的数据定义语句时,实际上就是在更新数据字典表中的相应信息。
      • 在进行查询优化和查询处理时,数据字典中的信息是其重要依据


3.4 数据查询:

<ul>语句:

    1. /*
    2. SELECT - 查询
    3. all - 显示所有
    4. distinct - 显示不同的(去重)
    5. from - 去哪个表查
    6. where - 条件
    7. group by - 分组
    8. order by - 排序
    9. */
    10. SELECT [ALL | DISTINCT ]<目标列表达式>[,<目标列表达式>]...
    11. FROM<表名或视图名>[,<表名或视图名>...] | (<SELECT语句>)[AS]<别名>
    12. [WHERE<条件表达式>]
    13. [GROUP BY<列名1>[HAVING<条件表达式>]]
    14. [ORDER BY<列名2>[ASC | DESC]]
    复制代码
          
细节:

  • 语句中的字母不分大小写
  • 语句中的符号都为业务状态下的
  • [ ]中的内容,不是语句必须内容,需要该功能在添加
3.4.1 单表查询:


  • 什么是单表查询?只对一个表的内容进行查询
  • 查询表中的若干列:

    • 查询指定列:  
      1. /*
      2. 查询全体学生的学号和姓名
      3. */
      4. SELECT son,sname FROM Student;
      复制代码
    • 查询表中全部列:
      1. /*
      2. 查询全体学生的详细记录
      3. */
      4. SELECT * FROM Student;
      复制代码
    • 选择经过计算的值:

      • 作用:选出表中指定的属性列,经过计算后输出
      • 格式:SELECT字语句的可以为:算数表达式、字符串常量、函数、列别名
      •  例: 注意表格的名字

      • 例:函数的使用,不存在列,输出到表格

      • 例:别名的使用


    • 选择表中的若干元组:

      • 消除取值重复的行(去重):

        • 两个关键字:DISTINCT(显示去重后的)和ALL(显示所有),不写关键字默认是ALL
        • 例:
        •  

      • 查询满足条件的元组:

        • 通过关键字where子句实现
        • 操作符说  明
          =等于
          不等于
          !=不等于
          </tdtd小于/td/trtrtd=/tdtd小于等于/td/trtrtd!/tdtd不小于/td/trtrtd/tdtd大于/td/trtrtd=/tdtd大于等于/td/trtrtd!>不大于
          BETWEEN , NOT BETWEEN在指定的两个值之间 ,不在指定访问的值
          IS NULL, IS NOT NILL为NULL的值, 不为NULL的值
          AND,OR,NOT并且 ,或者,反;不是
              
        • 例子:比较大小  

        • 例子:确定范围
        •   
        • 例子:确定集合

        • 例子:字符匹配


      • 例子:匹配串为含通配符的字符串

        • %表示任意长度的字符串
        • _ ,下斜线表示任意单个字符


      • 例子:使用换码字符串将通配符转义为普通字符

        • ESCAPE ''  - 如:查询的字符串中有& _ 这些特殊字符时,可以通过转码让它转为字符


      • 例子:涉及空值的查询

        • IS NULL或IS NOT NULL, "IS" 不能用“=”代替 


      • 例子:多重条件查询

        • AND和OR来联结多个查询条件,AND的优先级高于OR,可以用括号来改变优先级
        • 有时候可以用:[NOT] IN 或 [NOT] BETWEEN ... AND ...   


      • 例子:ORDER BY子句(排序)

        • ORDER BY 子句可以按一个或多个属性列排序
        • 升序:ASC; 降序:DESC; - 默认是升序
        • 空值默认是最大值
        • ASC:排序列为空值的元组最后显示
        • DESC:排序列为空值的元组最先显示


      • 聚集函数

        • COUNT ( * )  统计元组(行)个数 
        • COUNT ( [ DISTINCT | ALL ]  )    统计一列中的值的个数
        • SUM( [ DISTINCT | ALL ]  )            计算一列值的总和(该列必须是数组型)
        • AVG( [ DISTINCT | ALL ]  )             计算一列值的平均值(该列必须是数组型)
        • MAX( [ DISTINCT | ALL ]  )       求一列中的最大值
        • MIN( [ DISTINCT | ALL ]  )      求一列中的最效值
        • 细节:WHERE子句中不能使用聚集函数作为条件表达式,只能在SELECT和GROUPBY的HAVING子句中


      • GRIOUP BY子句(分组) 

        • GRIOUP BY子句作用:按指定的一列或多列值分组,值相等的为一组,来细化聚集函数的作用对象
        • 细节:

          • 未对查询结果分组,聚集函数将作用于整个查询结果
          • 对查询结果分组,聚集函数将分别作用于每个组
          • 语     



      • HAVING语句    

        • GROUP BY子句分组后,可以使用HAVING语句指定筛选条件 
        • 细节:

          • HAVING是和GROUP BY语句连在一起的,作用在分组对象中



      • HAVING短句与WHERE子句的区别

        • HAVING是和GROUP BY语句连在一起的,作用在分组对象中
        • WHERE是作用在整个查询对象中
        • 作用对象不同:WHERE子句作用于基表或视图,从中选择满足条件的元组。HAVING短语作用于组,从中选择满足条件的元组
        • WHERE子句中是不能用聚集函数作为条件表达式的




3.4.2 连接查询:

<ul>等值连接与非等值连接查询:

  • 连接查询的WHERE子句中用来连接两个表的条件称为连接条件或连接谓词
等值连接:当连接运算符为=时,称为等值连接
非等值连接:所以非=符号时,称为非等值连接
细节:
<ul>连接谓词中的列名称为连接字段,并且各连接字段必须是可比的,但名字不必相同
<strong>运算符有:= > < >= 、=、

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表