3.1 SQL查询语言概览
SQL语言有以下几个部分:
- 数据定义语言(Data-Definition Language, DDL) : SQL DDL提供定义关系模式、删除关系以及修改关系模式的命令。
- 数据操纵语言(Data-Manipulation Language, DML): SQL DML提供从数据库中查询信息,以及在数据库中插入元组、删除元组、修改元组的能力。
- 完整性( integrity): SQL DDL包括定义完整性约束的命令,保存在数据库中的数据必须满足所定义的完整性约束。破坏完整性约束的更新是不允许的。
- 视图定义(view definition): SQL DDL包括定义视图的命令。
- 事务控制(transaction control) : SQL包括定义事务的开始和结束的命令。
- 嵌入式SQL和动态SQL( embedded SQL and dynamic SQL):嵌入式和动态SQL定义SQL语句如何嵌入到通用编程语言,如C、C 和Java中。
- 授权(authorization) : SQL DDL包括定义对关系和视图的访问权限的命令。
3.2 SQL数据定义
3.2.1 基本类型
3.2.2 基本模式定义(完整性约束)
a. 创建表 create table
create table 表名 (列名称 列类型……)
实例
- 名字name的 类型为32个字节
- 年龄age 的类型为int
- 性别gender的 类型为2个字节
b. 插入数据
insert into student (name,age,gender) values (‘李四’,19,‘男’);
- 向name age gender 中插入数据 李四 19 男
c. 查看表中的全部信息select * from 表名;
d. SQL禁止破坏完整性约束的任何数据库更新
例如,如果关系中一条新插入或新修改的元组在任意一个主码属性上有空值,或者元组在主码属性上的取值与关系中的另一个元组相同,SQL将标记一个错误,并阻止更新。类似地,如果插入的course元组在dept _name上的取值没有出现在department关系中,就会破坏coume上的外码约束,SQL会阻止这种插入的发生。
e. 删除元组delete,删除表drop,增加属性alter等操作
3.3 SQL查询的基本结构select、from、where
SQL查询的基本结构由三个子句构成:select、from和where。查询的输入是在from子句中列出的关系,在这些关系上进行where和select子句中指定的运算,然后产生一个关系作为结果。
3.3.1 单关系查询
select * from 表名
在关系模型的形式化数学定义中, 关系是一个集合。因此,重复的元组不会出现在关系中。在实践中,去除重复是相当费时的,所以SQL允许在关系以及SQL表达式结果中出现重复。因此,在上述SQL査询中,每个系名在instructor关系的元组中每出现一次,都会在查询结果中列出一次。
select distinct去重
select all显式不去重
where子句
综上所述,select语句和where语句帮我们实现了关系代数中的选择运算和广义投影(即可添加运算符操作),另外指明可以用all和distinct谓词来指明需不需要去除重复。
3.3.2 多关系查询
【MySQL】 复合查询 | 内外连接-CSDN博客
顾名思义,多关系查询为在提供的多个关系中查询我们所需要的信息。
通用形式
多表笛卡尔积
select、from
- 显示雇员名、雇员工资以及所在部门的名字
- 由于员工 信息属于 emp表 而所在部门名字属于 dept表 数据来自不同的表,所以需要进行多表查询
- 分别用emp员工的信息 与 dept 部门表的信息 做 穷举 组合
- 就称 两张表 进行笛卡尔积
- 就把两张表 变成了 一张表 ,就可以进行单表查询
select、from where
如 smith 本来是20号部门的,把10号部门的信息传过来 是没有意义的
- 输入 select * from emp,dept where emp.deptno =dept.deptno;
- 把对应的部门号 与部门信息 匹配上
- 输入 select ename ,sal,dname from emp,dept where emp.deptno =dept.deptno;
- 就可以显示雇员名、雇员工资以及所在部门的名字
教材示例:查询结果见图3-5
一些补充说明:
由于上课顺序与课本顺序不同,书上认为我们学到SQL语言之前还未接触关系代数运算(第六章),如果你已经对笛卡尔运算和自然连接理解清晰透彻了,那么可以不需要看书后的一些赘叙。
3.3.3 自然连接
当然,我们已经学过了自然连接运算,但是我们要用SQL语句将其表示出来。
3.4 附加的基本运算
3.4.1 更名运算 as
在数据库的查询中我们经常碰到这样的困扰,两个表中具有相同的属性,或者需要自然连接同一个关系构成新的关系等…这时,更名运算就派上了大用场。
3.4.2 字符串运算 %
简单来说,SQL中用一对单引号来标识字符串,如果单引号为字符串组成部分则将字符串中单引号改为双引号,在不同的数据库系统中对大小写敏感不一致,并在SQL中支持使用多种函数和模式匹配等。
示例如下: