6.1 SQL语言概述
1、SQL语言提出和发展
2、SQL语言的功能概述
SQL语言是集DDL、DML和DCL于一体的数据库语言
SQL语言主要由以下9个单词引导的操作语句来构成,但每一种语句都能表达复杂的操作请求
- DDL语句引导词:Create,Alter,Drop:模式的定义和删除,包括Database,Table,View,Index,完整性约束条件等,也包括定义对象(RowType行对象,Type列对象)
- DML语句引导词:Insert,Delete, Update, Select:各种方式的更新与检索操作,如直接输入记录,从其他Table(由SubQuery建立)输入;各种复杂的检索,如连接查找,模糊查找,分组查找,嵌套查找等;各种聚集操作,求平均、求和等,分组聚集,分组过滤等
- DCL语句引导词:Grand,Revoke:安全性控制,授权和撤销授权
交互式SQL→嵌入式SQL→动态SQL等
6.2 建立数据库
1、课堂讲义使用的数据库
2、SQL-DDL
建立数据库:定义数据库和表(使用DDL),向表中追加元组(使用DML)
DDL:Data Definition Language
- 创建数据库(DB)——Create Database
- 创建DB中的Table(定义关系模式)——Create Table
- 定义Table及其各个属性的约束条件(定义完整性约束)
- 定义View(定义外模式及E-C映像)
- 定义Index、Tablescapegoat等(定义物理存储参数)
- 上述各种定义的撤销与修正
DDL通常由DBA来使用,也有经DBA授权后由应用程序员来使用
(1)创建数据库语句——Create Database
数据库是若干具有相互关联关系的Table/Realtion的集合
数据库可以看做是一个集中存放若干Table的大型文件
create database的简单语法形式:create database 数据库名;
(2)创建关系/表的语句——Create Table
create table 表名(列名 数据类型[Primary key Primary key |Unique |Unique][Not Notnull null] [, 列名数据类型[Not Notnull null] , …]) ;
“[ ] ”表示其括起的内容可以省略,“| ”表示其隔开的两项可取其一
Primary key:主键约束。每个表只能创建一个主键约束。
Unique:唯一性约束(即候选键)。可以有多个唯一性约束。
Not null: 非空约束。是指该列允许不允许有空值出现,如选择了Notnull表明该列不允许有空值出现。
语法中的数据类型在SQL标准中有定义
3、SQL-DML
建立数据库:定义数据库和表(DDL),向表中追加元组(DML)
DML:Data Manipulation Language
- 向Table中追加新的元组:Insert
- 修改Table中某些元组中的某些属性的值:Update
- 删除Table中的某些元组:Delete
- 对Table中的数据进行各种 条件的检索:Select
DML通常由用户或应用程序员使用,访问经授权的数据库
(1)向表中追击元组的值——INSERT INTO
insert into表名[ (列名[, 列名]…] values (值[, 值] , …) ;
values后面值的排序,须与into子句后面的列名排列一致
如果表明后的所有列名省略,则values后的值的排序,须与该表存储中的列名排列一致
6.3 简单查询
1、单表查询——SELECT-FROM-WHERE
Select 列名[[, 列名] …] From 表名 [ Where Where 检索条件] ;
语义:从表名中所给出的表中,查询出满足检索条件的元组,并按给定的列名及顺序进行投影显示
相当于
Select语句中的select …, from…, where…, 等被称为子句,在以上基本形式基础上会增加许多构成要素,也会增加许多新的子句,满足不同的需求。
2、检索条件——SELECT-FROM-WHERE
检索条件的书写与选择运算的条件con书写一样,只是其逻辑运算符用and , or, not 来表示, 同时也要注意运算符的优先次序及括弧的使用。书写要点是注意对自然语言检索条件的正确理解。
3、去重复记录——SELECT DISTINCT FROM-WHERE
结果唯一性问题:关系模型不允许出现重复元组。但显示DBMS,却允许出现重复元组,但也允许无重复元组。
在Table中要求无重复元组是通过定义Primary key或Unique来保证的;而在检索结果中要求无重复元组, 是通过DISTINCT保留字的使用来实现的。
4、排序——SELECT-FROM-WHERE-ORDER BY
结果排序问题:DBMS可以对检索结果进行排序,也可以升序排序,也可以降序排序
order by 列名 [asc|desc]
5、模糊查询——SELECT-FROM-WHERE * LIKE *
列名 [not] like “字符串”
找出匹配给定字符串的字符串。其中给定字符串中可以出现%,_等匹配符
匹配规则:
6.4 多表联合查询
1、多表联合查询
多表联合检索可以通过连接运算来完成,而连接运算又可以通过广义笛卡尔积后再进行选择运算来实现。
Select 列名 [ [, 列名] …] From 表名1, 表名2, … Where 检索条件;
相当于
检索条件中要包含连接条件,通过不同的连接条件可以实现等值连接、不等值连接及各种θ-连接
2、连接条件
3、表更名与表别名
连接运算涉及到重名的问题,如两个表中的属性重名,连接的两个表重名(同一表的连接)等,因此需要使用别用以便区分
as可以省略;当定义了别名后,在检索条件中可以使用别名来限属性
4、不等值连接
5、多表联合查询训练
6.5 增删改
1、更新操作
Insert、Update、Delete
SQL-DML既能单一记录操作,也能对记录集合进行批更新操作
SQL-DML的更新操作需要利用前面介绍的子查询(Subquery)的概念,以便处理“一些”、“某些”等
2、INSERT
(1)单一元组新增命令形式:插入一条指定元组值的元组
insert into表名[(列名[,列名]…)] values (值[,值]…);
(2)批数据新增命令形式:插入子查询结果中的若干条元组。待插入的元组由子查询给出
insertinto表名[(列名[,列名]…)] 子查询;
还可以有更复杂的“查询后插入到新表中”的语句,例如可以将中间结果存储成表
Insert Into St(S#, Sname, avgScore)
Select S#, Sname, Avg(Score) From Student, SC
Where Student.S# = SC.S#
Group by Student.S# ;
3、DELETE
Delete From表名[ Where条件表达式] ;
如果Where条件省略,则删除所有的元组
当删除元组时,DBMS会坚持用户定义的完整性约束条件等,如不符合完整性约束条件,则不会执行删除操作
4、UPDATE
如果Where条件省略,则更新所有的元组
6.7 修正与撤销数据库
SQL-DDL
1、撤销与修改
(1)修正数据库:修正数据库的定义,主要是修正表的定义
修正基本表的定义:
(2)撤销基本表:drop table表名
(3)撤销数据库
drop database数据库名;
示例:撤消SCT数据库
Drop database SCT;
2、数据库指定与关闭命令
有些DBMS提供了操作多个数据库的能力,此时在进行数据库操作时需要指定待操作数据与关闭数据库的功能
指定当前数据库:use 数据库名;
关闭当前数据库:close 数据库名;
小结
6.9 典型DBMS交互环境简介-SQL Server
1、SQL Server简介
2、数据库的创建-删除与维护
3、数据表的创建-与增/删/改/查