SQL入门
来源:互联网 发布:聚合数据接口开发教程 编辑:程序博客网 时间:2024/06/06 08:50
- 1 SQL概述
- 2 数据定义
- 21 创建模式
- 22 删除
- 23 定义基本表
- 24 删除基本表
- 25 修改基本表
- 26 索引的定义
- 3 查询
- 31 单表查询
- 32 连接查询
- 33 嵌套查询
- 34 集合查询
- 35 查询注意事项
- 4 数据更新
- 5 视图
3.1 SQL概述
SQL语言所使用的动词
SQL中的数据类型
3.2 数据定义
3.2.1 创建模式
3.2.2 删除
CASCADE(级联):删除模式的同时把该模式中所有的数据库对象全部删除;
RESTRICT(限制):如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行;当该模式中没有任何下属的对象时才能执行;
3.2.3 定义基本表
常用完整性约束
(1) 主码约束:PRIMARY KEY(2) 唯一性约束(不能取相同值但允许多个空值):UNIQUE(3) 非空值约束:NOT NULL(4) 参照完整性/外码约束(在参照关系中):FOREIGN KEY (<列名>) REFERENCES <表名>(<列名>)
比如
3.2.4 删除基本表
RESTRICT(限制):删除表有限制条件
- 欲删除的表不能被其他表的约束(如外码)所引用
- 如果存在依赖该表的对象(视图、索引等),则此表不能被删除
CASCADE(级联):删除表没有限制条件
- 在删除基本表的同时,相关的依赖对象一起删除
3.2.5 修改基本表
[例8] 向Student表增加“入学时间”列,其数据类型为日期型。
ALTER TABLE Student ADD entrance DATE ;
注:如基本表中原来有记录,它们在新增加的列上的属性值取空值。
删除entrance列:ALTER TABLE Student DROP entrance ;
[例9] 将年龄的数据类型改为半字长整数。
ALTER TABLE Student ALTER COLUMN Sage SMALLINT ;
注:修改原有的列定义有可能会破坏已有数据,如缩短字符属性长度,将长整数改为短整数等。
[例10]删除/增加学生姓名必须取唯一值的约束。
ALTER TABLE Student DROP UNIQUE(Sname) ;ALTER TABLE Student ADD UNIQUE(Sname) ;
3.2.6 索引的定义
一本书的目录就是索引,通过它可以快速地定位各章节所在的起始页码。
数据库中存放了大量的数据,如何才能快速找到所需要的数据?在数据库中通过对基本表建立索引来提高查询效率。
索引的分类
普通索引(Normal Index):索引表的Search-key项中的每一索引值对应全部取该值的基本表中的记录。普通索引通过索引表的指针项指向一个单链表来实现,该链表的每个结点的数据项指向一条物理记录。
单一索引(Unique Index):每一个索引值只对应唯一的数据记录。当建立单一索引后,索引项不可以再插入已有值,但可以插入多个空值,这等同于在建表时对索引列增加一个UNIQUE约束;同样,如果待索引项存在相同值则不能建立单一索引。
聚簇索引(Cluster Index):索引项顺序与表中数据记录的物理顺序一致。即基本表是按照索引表的Search-key项的排列次序组织存储的,因此,一个基本表只能建立一个聚簇索引。
注:聚簇索引适应于很少对基本表进行增删操作或对 Search-key项进行修改操作的情况。
创建索引
删除索引
对于数据库的一些理解
- 数据库相当于一个容器,它包含了基本表、索引、视图、存储过程、触发器、约束、角色等数据库对象,这些对象都是通过SQL中的数据定义语言来建立的;
- 数据库具有很高的安全性,不是什么人都可以创建基本表、索引等数据库对象。只有DBA创建某一数据库用户,并将创建基本表等数据库对象的权力赋予该用户时,他才可以创建权力范围内的数据库对象;
- 创建基本表的只能是DBA或者得到DBA授权创建表的用户;
- 创建基本表时应指定表的主码、外码(如果有的话)及其他约束,当更新表时才能由DBMS系统自动核查数据的正确性。
- 创建索引只能由DBA或表的属主(owner,即表的建立者) 建立;
- 有些DBMS自动建立PRIMARY KEY和UNIQUE列上的索引;
- 索引的维护由DBMS自动完成,不需要任何人的干预,当索引列上的数据变动时,系统自动修改索引表;
- 索引的使用由 DBMS自动完成,系统会根据查询条件选择是否使用索引以及使用哪些索引。
3.3 查询
3.3.1 单表查询
选择表中的若干列(π)
我们可以用表达式对列进行操作
同时我们也可以对列名进行重命名
消除重复的行
注意: DISTINCT短语的作用范围是所有目标列
选择表中的若干元组
WHERE子句常用的查询条件
关于使用的例子由于太多,直接见PPT.
对查询结果排序输出
ASC(DESC):排序列为空值的元组最后(先)显示
使用集函数
对查询结果分组输出
3.3.2 连接查询
将两个表连接进行查询
连接查询的执行过程
1) 首先在表1中找到第一个元组,然后从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组;
2) 表2全部查找完后,再找表1中第二个元组,然后再从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第二个元组与该元组拼接起来,形成结果表中一个元组;
3) 重复上述操作,直到表1中的全部元组都处理完毕 。
对自身进行连接时,需要给表起别名以示区别. 同时对于表中的同名属性加别名前缀
外连接
但是需要注意的是由于自然连接是对列进行”压缩”了的,而这些连接操作均没有压缩操作. 需要我们手动实现自然连接
复合条件连接
3.3.3 嵌套查询
一个SELECT-FROM-WHERE语句称为一个查询块;
将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。
带有IN谓词的子查询
带有比较运算符的子查询
带有ANY或者ALL谓词的子查询
带有EXISTS谓词的子查询
用EXISTS/NOT EXISTS实现全称量词(难点)
3.3.4 集合查询
UNION自动去掉重复元组,如果要保留使用UNION ALL
3.3.5 查询注意事项
可以对列取别名
也可以对表取别名
其中,FIRST,SECOND,SCX,SCY
都是自己命名的
对不相关子查询可以不使用别名
DISTINCT将多条相同的记录作为一条处理。
集函数只能用于 SELECT子句和 HAVING短语之中,而绝对不能直接出现在 WHERE子句中。
这就是错误的
集函数不能嵌套
使用了分组的查询语句,其SELECT子句中只能出现分组属性和集函数,而不能有在GROUP BY没有出现的属性。
ORDER BY子句用于对查询结果进行排序后再输出,故只用于最外层的查询,而子查询中不应该出现ORDER BY子句。
关于ORDER BY还有一点需要注意
查询的输出只能取自最外层查询所使用的表,对于子查询中的属性是不能作为最终的输出的。如果输出的属性涉及多个表,则最外层查询只能使用这些表的连接查询
子查询的结果集可以看作基本关系一样作为查询的数据源。此时必须对子查询命名别名,否则为语法错误。
3.4 数据更新
数据更新是指对数据库基本表进行数据的插入、修改和删除操作,SQL提供了丰富的数据更新操作。
插入数据
修改数据
删除数据
3.5 视图
- 视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表,一般不保存数据;
- 在数据字典中只存放视图的定义,不会出现数据冗余;
- 基本表中的数据发生变化,从视图中查询出的数据也随之改变;
- 视图一经定义,就可以和基本表一样被查询、更新和删除,并且可以在视图之上再定义新的视图;
- 视图的更新(增加、删除、修改)操作会受到一定的限制,更新的结果会反馈到基本表上;
- 视图对应三级模式体系结构中的外模式。
创建视图
删除视图
查询视图
和基本表一样,视图定义之后也可以进行插入、删除和修改这三种更新操作。
(1) 用户角度:更新视图与更新基本表语法相同
(2) DBMS实现视图更新的方法
视图实体化(View Materialization)
视图消解(View Resolution)
- sql 入门
- SQL 入门
- SQL入门
- SQL 入门
- SQL入门
- SQL入门
- SQL入门
- SQL入门
- SQL入门
- SQL入门
- SQL入门
- sql入门
- sql入门
- Sql入门
- SQL入门
- SQL入门
- SQL 入门
- SQL入门
- DNS查询过程
- YII——入门第一篇
- for循环遍历多级json数据出现的一些问题
- Linux系统停的设置TCP心跳机制Keepalive为什么总是无效果
- socket、tcp、udp、http 区别
- SQL入门
- angularJs用户列表的增删改查
- 18个你可能不相信是用CSS制作出来的东西
- Intellij idea mybatis 插件 freeMybatisPlugin和 MybatisTools那些事
- vue移动端iso 利用钩子里面的导航守卫beforeRouteLeave实现返回按钮不返回上一次路由,返回到自己指定的路由
- 【教程】html+css零基础入门教程之CSS 浮动(二十四)
- Android快速实现高亮引导
- FCN网络训练 SIFTFLOW数据集
- 数据库安全性