数据库原理及应用系列笔记之用户接口与SQL语言

本文详细介绍了数据库用户接口,特别是重点讲解了SQL语言,包括其重要术语、基本查询、函数运算、分组查询、空值问题以及扩展功能如外连接、递归查询等。此外,还探讨了数据操纵语言、视图、嵌入式SQL和存储过程的应用。
摘要由CSDN通过智能技术生成

User Interfaces and SQL Language 用户接口与SQL语言

User interface of DBMS

  • DBMS必须提供一些接口给用户使用数据库,用户接口类型包括
    • 查询语言【核心】
      • 形式化查询语言
      • 表格式查询语言
      • 图形化查询语言
      • 受限制的自然语言查询
    • 访问数据库的工具(GUI)
    • API(解决在应用程序中访问数据库)
    • 类库

关系查询语言

  • 查询语言:让用户有效的从数据库中检索需要的数据
  • 关系模型支持简单,有力的查询语言
  • 查询语言不是编程语言
    • 查询语言不是图灵完备的,不具备编程能力
    • 不能做复杂计算
形式化基础
数学化
  • 关系代数 【过程化】
  • 关系演算 【非过程化】

SQL

  • 数据定义语言【DDL】
  • 查询语言【QL】
  • 数据操纵语言【DML】
  • 数据控制语言【DCL】
重要术语与概念
  • Base Table 基表
    • 关系模型中的关系【物理存在的】
  • View 视图
    • 虚表
  • 数据类型
  • NULL
    • 保留字:空值
  • UNIQUE
    • 保留字:表的某个属性是否允许有重复值
  • DEFAULT
    • 保留字:为某张表的某个属性默认缺损值
  • PRIMARY KEY
    • 保留字:主键
  • FOREIGN KEY
    • 保留字:外键
  • CHECK
    • 保留字:定义完整性约束
基本的SQL查询
SELECT [DISTINCT] target-list
FROM     relation-list
WHERE   qualification
  • 关系列表 relation-list 【查询设计的表】
  • 目标列表 target-list 【要查询的东西】
  • 条件 qualification 【布尔表达式】
  • DISTINCT 可选字符,加了的话表明要求系统对查询结果的重复元组要消除。
查询语句执行的基本策略
  • 把FROM子句里出现的表做笛卡尔乘积
  • 把笛卡尔乘积的觉果用qualification做筛选
  • 根据target-list 内的对上一步结果做投影
  • 如果有DISTINCT,将重复元组筛选
范围变量
  • 即在FROM 内给表取别名,只要不会引起混淆,可以不加别名【下面的写法相同】

  • 找出预定了船号为103的水手的姓名

    • SELECT S.sname  【最规范写法】
      FROM Sailors S,Reserves R
      WHERE S.sid = R.sid AND R.bid=103
      
    • SELECT S.sname
      FROM Sailors S,Reserves R
      WHERE S.sid = R.sid AND bid =103
      
    • SELECT sname
      FROM Sailors,Reserves
      WHERE Sailors.sid = Reserves.sid AND bid = 103
      
例子:
  • SELECT 不同时,慎重考虑是否要加DISTINCT

    • 找出至少预定过一次船的水手

    • SELECT S.sid
      FROM Sailors S,Reserves R
      WHERE S.sid = R.sid
      
    • 比如:此例中若将sid 改为sname 那么加不加DISTINCT对结果的意义就有影响。

  • SELECT 子句中可以使用表达式

    • SELECT S.age,age1=S.age-5,2*S.age AS age2   //给结果属性命名的两种办法【不一定两种方法都支持】
      FROM Sailors S
      WHERE S.sname LIKE 'B_%B'   //支持用like表达的模糊查询
      
  • 用集合的交和并方式进行查找

    • 找出预定过一艘红船或者预定过一艘绿船的水手的编号

    • SELECT S.sid
      FROM Sailors S,Boats B,Reserves R
      WHERE S.sid =R.sid AND R.bid = B.bid AND(B.color='red' or B.color = 'green')
      
    • SELECT S.sid
      FROM Sailors S,Boats B,Reserves R
      WHERE S.sid =R.sid AND R.bid = B.bid AND B.color='red'【所有预定红船的水手编号】
      UNION
      SELECT S.sid
      FROM Sailors S,Boats B,Reserves R
      WHERE S.sid =R.sid AND R.bid = B.bid AND B.color = 'green'【所有预定绿船的水手编号】
      
    • 更新问题为:预定过红船和绿船的水手的标

  • 10
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值