5.SQL-结构化查询语言(一)

SQL怎么念?

  • /'sɜːkl/ – 同 circle. 部分开发者独创发音
  • /ˈsiːkwəl/ - 同 Sequel.
  • Ess-cue-ell, 即 S-Q-L, ISO 标准规定发音

大纲

  • 介绍
  • 数据定义语言-DDL
    • 基础概念
  • 数据操作语言-DML
  • 数据定义语言-DDL
    • 进阶概念

数据定义语言:DDL(基础概念)

允许指定

  • 定义属性及其定义域
  • 完整性约束
  • 在磁盘上存储的组织方式
  • 索引方法
  • 用户对 relation 的权限操作
SQL的主要数据类型
  • char(n):长度恒为 n 的字符串
  • varchar(n):可变长度的字符串,最长为 n
  • int:整型,四个字节
  • smallint:小整型,一般两个字节,具体和机器有关
  • Numeric(p,d):数值,一共 p 位,其中小数点后 d 位
  • real,double precision:浮点数和双精度浮点数,具体与机器相关的精度
  • float(n):浮点数,用户通过 n 指定精度( bits )
  • 还有 date、time 等......
  • 所有数据类型的取值范围都包含 null,可以在声明的时候加上后缀 not null,表示不允许取 null 值
  • float [ (n) ] 其中 n 是用于以科学记数法存储浮点数尾数的位数,因此决定了精度和存储大小。如果指定了 n,则它必须是 1 到 53 之间的值。n 的默认值为 53。
    • image
SQL模式定义

image

  • 删除表
    • 从数据库中删除 relation r,我们用 drop table 命令:
      • drop table r
  • 修改表
    • alter table:删除或者增加属性
    • 加属性后,现有记录在新属性的值为 null
      • alter table customer add phone char(10)
      • alter table customer drop phone
完整性约束
  • IC:anytime-constrain —— 数据库在任何时候都要成立
    • 譬如:not null 表示相应的属性值不能为空
    • ICs:一般情况下,在设定 relation 的时候设定 IC 约束
  • ICs:在 relation 发生变化的时候,IC 都会被检查

数据操纵语言(DML)

基本查询语句
  • 查询语句在 SQL 中的基本形式
    • image
    • Relation-list:关系名称列表(每个名称后面可能带有范围变量)
    • Target-list:属性列表,逗号分隔
    • Qualification:逻辑表达式
    • DISTINCT:可选,表示最终结果去重(默认不去重)
    • SELECT clause:后接选择的属性
      • 选取 columns.相当于 projection 操作
    • FROM clause:返回 relations 的笛卡尔积
    • WHERE clause:可选语句,用来指定记录需要满足的条件.相当于selection操作
    • image
  • 以一个表为例:
    image
    • 我们查找贷款关系中所有支行的名字
      • image
      • 消重
        • image
算数运算
  • select 字句可以包含涉及运算符 +,-,/ 和 × 的算术表达式,并对元组的常量或属性进行操作
  • 譬如:
    SELECT branch name, loan-number, account * 100 FROM loan
  • 将返回与 loan 相同的关系,只不过属性 amount 乘以 100
WHERE 语句
  • WHERE 子句指定 FROM 子句的 relation 中的元组必须满足的条件
    • 例如:
      • image
  • WHERE 语句允许使用逻辑运算符 and,or,not
  • SELECT 和 WHERE 语句中用到的属性必须存在于 FROM 语句的 relation 中
  • 可以直接用 between ... and ... 关键字表示目标区间
    • 例如
      • image
FROM 语句
  • FROM 返回的是 relations 的笛卡尔积
  • 例如:查找:borrower × loan
    • image
  • 找出在 Perryridge 分行拥有贷款的顾客及其贷款记录
    • image
    • image
重命名操作
  • 使用 as 字句重命名关系和属性
  • 重命名用法
    • image
  • 把 loan-number 属性重命名为 loan-id
  • 例如:
    • image
  • 可以在 from 语句利用 as 关键字起别名
    • image
  • 找出资产不是比 Zhuhai 所有的支行的资产都少(或相等)的支行。即:只要大于至少 Zhuhai 一家的支行都行
    • image
字符串操作
  • 在匹配中,可以用特殊字符描述字符串模式
    • % 指代任意字符组合(可以为空)
    • _ 指代任意单个字符
  • 找出地址名字带有 Main 的顾客
    • image

    • image
  • 在上述 SQL 语句中如何还想要匹配“ main ”,即包括 Main 和 main 甚至 MAIN 等,怎么做呢?(Oracle 匹配区分大小写)
    • Oracle 正则表达式函数 REGEXP_LIKE 的使用:
      • REGEXP_LIKE(x, pattern, [match_option])
    • 当源字符串 x 匹配正则表达式 pattern 时,返回 true,可以使用 match_option 修改默认匹配选项,该参数可以被设置为:
      • -'c', 说明在匹配时区分大小写(默认选项)
      • -'i', 说明在匹配时不区分大小写
      • -'n', 允许使用可以匹配任意字符串的操作符(通常是 '.' )
      • -'m', 将 x 作为一个包含多行的字符串
    • image
      • 上面的 SQL 语句匹配 test_reg 表中 name 列含有两个连续字符 'a'(不区分大小写)的行,如 name = “SaAs”
      • 此外,我们用了正则表达式中的后引用语法 '...\n' 表示重复n次上次匹配的内容,此处(a)\ 1 表示匹配两个连续的字符 'a'
给结果排序
  • 按名字给结果排序
    • image

  • image
  • image
  • asc 表示升序,也是默认模式
  • desc 表示降序
  • 在很多的时候对结果排序很耗时,在必要的时候用
  • 例:按 customer-city 升序、customer-name 降序列出所有客户的姓名
    • image
    • image
posted @ 2024-12-11 19:59  韦飞  阅读(130)  评论(0)    收藏  举报