当前位置:
文档之家› 数据库系统基础教程(6)_数据库语言SQL
数据库系统基础教程(6)_数据库语言SQL
6.1.4 日期和时间
• 日期和时间:
– 日期类常量: Date ‟yyyy-mm-dd‟ – 时间类常量: Time ‟hh:mm:ss.sssss‟
• 日期和时间的比较: = <> > >= < <=
– d1<d2 表示d1早于d2。 Select * from salesorder where signdate < '2005-10-1'; – d Between d1 and d2 等价于 d >=d1 AND d <=d2 select * from salesorder where signdate between '2005-10-1' and '2005-10-31';
6.1.5 空值和涉及空值的比较
• 注意:NULL不是常量,SQL语句中,不能显式 将 NULL作为操作数使用,例如:NULL+3是 错误的表达式 • 判断表达式的值是否为 NULL 表示为:
– Expression IS [NOT] NULL – 运算结果为布尔值 True 或 False 。 例:Select * From salesman Where deptid IS NULL
第六章 数据库语言SQL
• 常用数据类型:
– 字符型:
– Char, Varchar, 需确定字符串长度。用单引号标注。
– 数值型:
– 整数: – Tinyint 1字节 – Smallint 2字节 – Int | Integer 4字节 – BigInt 8字节 – 浮点数: – 精确浮点数:Decimal | Dec (precision, scale) (数字总位数, 小数点 后位数) Numeric (precision, scale) – 近似浮点数:Real, Double, Float(小数点后位数)
– Expression IS [NOT] True – Expression IS [NOT] False – Expression IS Unknown 运算结果是 True 或 False。
6.1.6 布尔值 Unknown
• 注意:在 Select 语句中,Where/Having子句中 的条件表达式可能为 True, False, Unknown三种 值,但只有使条件为 True 的元组才符合要求。 • 例如: Select * from salesorder where signdate < '2005-10-1' or signdate >= '2005-10-1' ;
–
日期型
– Date ‟ yyyy-mm-dd‟
• 每一个属性(列)必须确定一种数据类型。
第六章 数据库语言SQL • 用ISQL查询或更新数据
– 大多DBMS均提供交互操作界面,方便用户定 义数据库,完成查询及数据更新等操作。
• SQL语句计算正确性的验证:
运行SQL 构造SQL语句 得到结果 结果是否一致?
• 注意:聚合函数 Sum, Avg 等可作用于允许空值 NULL 的属性上,计算时,所有空值的行不参与 聚合运算。
6.1.6 布尔值 Unknown
• 布尔值 Unknown 如何参与逻辑运算?
– Unknown 值作为一个逻辑值,与 True 和 False 构成三 值逻辑。 – 三值逻辑运算:NOT非、AND与、OR或
6.1.1 投影
• SELECT子句的构成:
– *表示所有属性,按缺省次序排列。
SELECT * FROM customer;
– 可投影到若干属性:
SELECT custid, name FROM customer;
– AS 别名 (改名运算,改变列名,AS可省略) SELECT custid, name AS custname FROM customer; – 表达式
AND True False Unknown True True False Unknown False False False False Unknown Unknown False Unknown
设:True=1; False=0; Unknown=0.5
OR True False Unknown True True True True False True False Unknown
作业
• 旧书: P179 5.1.3 • 新版: P158 6.1.3
6.2 多关系查询
• SQL 用简单的方式在一个查询中处理多 个关系:在 From 子句中列出每个关系。
Select a1, a2, … From R1, R2, … Where cond Order By b1, …
6.2.1 乘积和连接
匹配规则: – p 中普通字符只和 s 中完全相同的字符匹配; – p 中% 可与 s 中 0 个或多个字符匹配; – p 中一个下划线可与 s 中一个任意字符匹配。 SELECT * FROM salesman WHERE name LIKE '王%'; SELECT * FROM salesman WHERE name LIKE '王_';
6.2.1 乘积和连接
• 例:计算员工号为“A0044”的销售员所销售的商品 的种类和规格。
Select a1, a2, … From R1, R2, … Where cond 实现关系代数运算: πa1,a2,…(R1 cond R2) 即 πa1,a2,…(σcond (R1 × R2 ×…))
– 注意:结果是一个包,而不是集合 ( 除非显式确 定 Select distinct ... ) – Select 子句和 Where 子句中可包含 From 子句中 的 R1,R2 等关系的属性。
6.2.1 乘积和连接
例:计算员工号为“A0043”的销售员所经办的客户 的姓名及其电话号码 Step1. Select * From salesorder, customer; Step2. Select * From salesorder, customer Where salesorder.custid = customer.custid AND empid='A0043'; Step3. Select name, phone From salesorder, customer Where salesorder.custid = customer.custid AND empid='A0043';
• SQL的主要内容:
– – – – DQL数据查询(select) DML数据操纵(insert, delete, update) DDL数据定义(create, drop, alter…) DCL数据控制(grant, revoke…)
第六章 数据库语言SQL
• 数据库服务器、数据库和表之间的关系:
– 一个数据库服务器Database Server是一个驱动引擎程 序,当驱动起来之后,可提供SQL服务。 – 一个数据库database是一组语义相关的关系模式。通 常可对应某一个或几个文件。 – 一个数据库服务器可支持1个或多个数据库运行。 – 一个表table是一个关系。 – 一个数据库可包含多个表,相互间可建立参照完整性 约束。 – 要访问某个表,必须由数据库服务器先启动该表所在 的数据库。
SELECT orderno, lineno, singlecost * quantity AS account FROM salesitem;
– 常量也可作为一列
SELECT orderno, lineno, singlecost * quantity AS account, „Yuan‟ AS “RMB” FROM "DBA"."salesitem";
6.1.7 输出排序
• ORDER BY子句
ORDER BY { expression | integer } [ ASC | DESC ], … – 当输出结果为多行时,往往需要按某次序输出结果。 即改变行顺序。 – ASC 表示升序(缺省);DESC 表示降序。 例如: SELECT * FROM salesorder ORDER BY signdate DESC , orderno ; – 可以用列号代替列名,也可能有多个排序项。
那么 a AND b = Min(a,b)
Unknown True Unknown Unknown
a OR b = Max(a,b)
6.1.6 布尔值 Unknown
NOT True False False True Unknown Unknown
NOT a = 1- a
• SQL语句如何支持三值逻辑值的比较?
第六章 数据库语言SQL
• SQL:Structured Query Language
• SQL与关系代数之间的关系:
– SQL的多数特性可对应关系代数的特性,如投影、选择、 自然连接等; – SQL也超越关系代数,如聚合运算和数据更新; – 关系代数可实现的计算,标准SQL都可实现。
• SQL标准:
– ANSI(American National Standard Institute) SQL ; – SQL-92 或 SQL2; – 较新的 SQL-99 或 SQL3。
第六章 数据库语言SQL
• 商业数据库管理系统符合的标准:
– – – – 都支持ANSI SQL; 很大程度支持SQL2标准; 支持SQL3的部分标准; 都有自己的方言。
第六章 数据库语言SQL • 表的定义:
– 表名 – 一组属性(列columns): 列名,数据类型,缺省 值,约束(主键、允许空值、唯一值)等。 – 一组外键Foreign keys – 一组约束constraints – 一组权限permissions – 一组索引indexes – 一组触发器triggers等