SQL(Structured Query Language)为结构化查询语言,是关系数据库的标准语言。
1.综合统一
(1)集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于一体。
(2)可以独立完成数据库生命周期中的全部活动:
①定义关系模式,插入数据,建立数据库;
②对数据库中的数据进行查询和更新;
③数据库重构和维护
④数据库安全性、完整性控制等
(3)用户数据库投入运行后,可根据需要随时逐步修改模式,不影响数据的运行。
(4)数据操作符统一
2.高度非过程化:无须了解存取路径
3.面向集合的操作方式:
①操作对象、查找结果可以是元组的集合;
②一次插入、删除、更新操作的对象可以是元组的集合。
4.以同一种语法结构提供多种使用方式:
①能够独立地用于联机交互的使用方式;
②SQL又是嵌入式语言:能够嵌入高级语言(例如C,C++,Java)程序中,供程序员设计程序时使用。
5.语言简洁,易学易用:
学生-课程数据库
学生-课程模式 S-T :
(1)学生表:Student(Sno,Sname,Ssex,Sage,Sdept)
(2)课程表:Course(Cno,Cname,Cpno,Ccredit)
(3)学生选课表:SC(Sno,Cno,Grade)
1.定义模式
(1)定义模式实际上定义了一个命名空间
(2)在这个命名空间中可以定义该模式包含的数据库对象,例如基本表、试图、索引等。
(3)在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句。
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>[<表定义子句>|<视图定义子句>|<授权定义子句>]
2.删除模式
DROP SCHEMA <模式名>
(1)CASCADE(级联): 删除模式的同时把该模式中所有的数据库对象全部删除
(2)RESTRICT(限制):如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执。当该模式中没有任何下属的对象时才能执行。
1.定义基本表
CREATE TABLE <表名>
(<列名> <数据类型>[ <列级完整性约束条件> ]
[,<列名> <数据类型>[ <列级完整性约束条件>] ] …
[,<表级完整性约束条件> ] );
如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
2.数据类型
3.删除基本表
DROP TABLE <表名>[RESTRICT| CASCADE];
(1)RESTRICT:删除表是有限制的。
①欲删除的基本表不能被其他表的约束所引用
②如果存在依赖该表的对象,则此表不能被删除
(2)CASCADE:删除该表没有限制。
①在删除基本表的同时,相关的依赖对象一起删除
4.修改基本表
ALTER TABLE <表名>
[ ADD <新列名> <数据类型> [ 完整性约束 ] ]
[ DROP <完整性约束名> ]
[ ALTER COLUMN<列名> <数据类型> ];
(1)建立索引的目的:加快查询速度
(2)谁可以建立索引
①DBA 或 表的属主(即建立表的人)
②DBMS一般会自动建立以下列上的索引
PRIMARY KEY
UNIQUE
(3)谁 维护索引
DBMS自动完成
(4)使用索引
DBMS自动选择是否使用索引以及使用哪些索引
1.语句格式
CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);
2.删除索引
DROP INDEX <索引名>;
删除索引时,系统会从数据字典中删去有关该索引的描述。
SELECT [ALL|DISTINCT] <目标列表达式>
[,<目标列表达式>] …
FROM <表名或视图名>[, <表名或视图名> ] …
[ WHERE <条件表达式> ]
[ GROUP BY <列名1> [ HAVING <条件表达式> ] ]
[ ORDER BY <列名2> [ ASC|DESC ] ];
1.选择表中的若干列
2.选择表中的若干元组
指定DISTINCT关键词,去掉表中重复的行
SELECT DISTINCT Sno
FROM SC;
(1)比较大小
(2)确定范围
谓词: BETWEEN … AND …
NOT BETWEEN … AND …
(3)确定集合
谓词:IN <值表>, NOT IN <值表>
(4)字符匹配
谓词: [NOT] LIKE ‘<匹配串>’ [ESCAPE ‘ <换码字符>’]
(5)涉及空值的查询
谓词: IS NULL 或 IS NOT NULL
(6)多重条件查询
①逻辑运算符:AND和 OR来联结多个查询条件:AND的优先级高于OR; 可以用括号改变优先级
②可用来实现多种其他谓词: [NOT] IN;[NOT] BETWEEN … AND …
3.聚集函数
(1)连接查询:同时涉及多个表的查询
(2)连接条件或连接谓词:用来连接两个表的条件——一般格式:
①[<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2>
②[<表名1>.]<列名1> BETWEEN [<表名2>.]<列名2> AND [<表名2>.]<列名3>
(3)连接字段:连接谓词中的列名称
连接条件中的各连接字段类型必须是可比的,但名字不必是相同的
1.等值与非等值连接查询
(1)等值连接:连接运算符为=
(2)自然连接
2.自身连接
(1)自身连接:一个表与其自己进行连接
(2)需要给表起别名以示区别
(3)由于所有属性名都是同名属性,因此必须使用别名前缀
3.外连接
4.复合条件连接
复合条件连接:WHERE子句中含多个连接条件
1.嵌套查询概述
一个SELECT-FROM-WHERE语句称为一个查询块,那么将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。
2.带有比较运算符的子查询
当能确切知道内层查询返回单值时,可用比较运算符(>,<,=,>=,<=,!=或< >)。
与ANY或ALL谓词配合使用
3.带有ANY(SOME)或ALL谓词的子查询
ANY:任意一个值
ALL:所有值
4.带有EXISTS谓语的子查询
[例44]查询所有选修了1号课程的学生姓名。
思路分析:
① 本查询涉及Student和SC关系
②在Student中依次取每个元组的Sno值,用此值去检查SC关系
③若SC中存在这样的元组,其Sno值等于此Student.Sno值,并且其Cno= ‘1’,则取此Student.Sname送入结果关系
SELECT [ALL|DISTINCT]
<目标列表达式> [别名] [ ,<目标列表达式> [别名]] …
FROM <表名或视图名> [别名]
[ ,<表名或视图名> [别名]] …
[WHERE <条件表达式>]
[GROUP BY <列名1>
[HAVING <条件表达式>]]
[ORDER BY <列名2> [ASC|DESC]
1.插入元组(将新元组插入指定表中)
(1)语句格式:
INSERT
INTO <表名> [(<属性列1>[,<属性列2 >…)]
VALUES (<常量1> [,<常量2>] … )
(2)INTO子句
属性列的顺序可与表定义中的顺序不一致;没有指定属性列;指定部分属性列
(3) VALUES子句
提供的值必须与INTO子句匹配(值的个数、
值的类型)
2.插入子查询结果( 将子查询结果插入指定表中)
(1)语句格式
INSERT
INTO <表名> [(<属性列1> [,<属性列2>… )]
子查询;
(2)INTO子句(与插入元组类似)
(3) 子查询:
SELECT子句目标列必须与INTO子句匹配(值的个数、值的类型)
(1)语句格式
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]…
[WHERE <条件>];
(2)功能:修改指定表中满足WHERE子句条件的元组
(3)SET子句:
①指定修改方式
②要修改的列
③修改后取值
(4)WHERE子句
①指定要修改的元组
②缺省表示要修改表中的所有元组
(1)语句格式
DELETE
FROM <表名>
[WHERE <条件>];
(2)功能:删除指定表中满足WHERE子句条件的元组
(3)WHERE子句
①指定要删除的元组
②缺省表示要删除表中的全部元组,表的定义仍在字典中
步骤
(1)打开MySQL workbench
(2)打开页面如下,并进行连接
再双击进入
(3)新建模式并命名S-T
(4)新建基本表
(5)右击student表
(6)建立表格后保存即可查询。输入查询语句
(1)打开Navicat Premium,点击连接,输入密码,用户名
(2)右击新建数据库
(3)新建基本表,通过添加栏位设计基本表,再保存命名,再双击进入填充数据
设计表
(4)如若查询,可点模式下方的查询,编写程序后查询
以上,谢谢!