概述
一.SQL
1.sql语言的分类:
(1)DDL(数据定义语言)eg:CREAT,ALERT,DROP
(2)DML(数据操纵语言)eg:INSERT,DELETE,UPDATE
(3)DQL(数据查询语言)eg:SELECT
(4)DCL(数据控制语言)eg:权限管理(GRANT.REVOKE),事务管理
2.基本类型
char(n):固定长度的字符串,用户指定长度
varchar(n):可变长的字符串,用户指定最大长度
int:整数类型,等价于Integer
smallint:小整数类型
numeric(p,d):定点数,精度由用户指定,表示有p位数字,其中d位在小数点右边
real,double precision:浮点数与双精度浮点数,精度与机器有关
float(n):精度至少n位浮点数
null: 每种类型都可以包含一个特殊值,即空值,可以申明属性值不为空,禁止加入空值
date:日期类型(关于时间的类型在不同的sql中可能不同)
3.修改基本表
用ALERT TABLE 其中具体的操作用MODIFY(修改属性),ADD(增加属性),DROP(删除属性)
4.删除基本表:用DROP
5.SQL定义语句:
(1)建立数据库:CREATE DATABASE 数据库名
(2)建立基本表:CREATE TABLE 表名 {列名,数据类型,完整性约束}
完整性约束包括:主键子句,检查子句,外键子句,not null
6.DELETE删除语句:DELETE FROM 表名[WHERE 表达式]
7.UPDATE修改语句 UPDATE 表名 SET 列名=表达式[WHERE 条件表达式]
二. 表的操作的基本知识
1.
SELECT 列名1,列名2,...
FROM 表1,表2...
WHERE 连接条件
(上述查询语句等价的关系代数是:先对FROM后面的关系进行笛卡尔积,然后根据WHERE进行选择,最后根据SELECT进行投影)
注意:
1.SQL不允许在属性中使用 "-",而应该使用"_",并且不区分字母的大小写,可以使用大写或者小写命名表,属性
2.SQL允许在关系以及SQL表达式中出现重复的元组,如果要强行去除,可以加上distinct关键字
3.select子句中还可以使用带有运算符的算术表达式,运算对象可以是常数或者元组的属性
4.SQL可使用as子句,为关系和属性进行重命名的机制,as既可以出现在select子句中,也可以出现在from子句中
eg:select name as instructor_name,course_id from instructor,teachers where....(重命名属性)
eg:select T.name,S.course_id from instructor as T,teachers as S where ....(重命名两个表,为了简洁)
eg:select distinct T.name from instructor as T , instructor as S where T.salary > S.salary and S.dept_name = 'a' (对一个表进行两次重命名,为了区分)
5.like 模糊查询(%,_)
6.排序 :使用order by 子句 ,升序是asc(默认),降序是desc
eg:select * from instructor order by salart desc,number asc
7.union是要么要么,intersect两者都,except剔除掉
8.聚集函数:avg,min,max,sum,count 其中sum和avg必须是数字集,但是其他运算符还可以作用在非数字数据类型的集合上,如字符串,注意:除了count(*)外的所有聚集函数都会忽略输入集合中的空值,空集的count运算值为0,其他所有的聚集运算在输入为空集的情况下返回一个空值
9.分组聚集 group by :子句中给出一个或者多个属性来构造分组,在group by 子句中的所有属性上取值相同的元组将被分在一组,另外。可以使用having(类似于where,只不过只是针对分组进行操作)对分组来进行选择
2.嵌套子查询
1.exist可以测试一个子查询中是否存在元组,子查询为空时返回true值
2.unique可以测试在一个子查询中是否存在重复的元组,如果没有重复的元组,将返回true
3.数据库的删除操作
delete from instructor where ... ...
4.数据库的插入操作
insert into (...) values (...)
insert into course(course_id,title,credit) values ('cs-232','base-system','5')
总结:SQL查询语句执行顺序:from->where->group->having->select->order by
三.表的连接查询(内连接和外连接)
1.内连接
(1)等值连接:表之间通过一个“等于”关系连接起来,产生一个连接临时表,然后对表进行处理产生最终的结果
(2)非等值连接:表之间的关系不是等值关系而是其他关系,通过指定的非等值关系,将两个表连接起来,产生一个临时表,然后对该临时表进行处理后生成最终的结果
(3)自连接:有时需要将同一个表进行连接,这种连接称为自连接,进行自连接就像两个表分开一样,可以把一个表的某行与同一个表中的另一行连接起来。
2.外连接:会返回FROM子句中提到的至少一个表或者视图的所有行,只要这些行符合任何WHERE或者搜索条件,将索引通过左外连接引用的坐标的所有行,以及通过右外连接引用的右表的所有行(左外连接,右外连接,全外连接)
(1)左外连接
注意:null也会放进去
(2)右外连接
(3)全外连接:保留不匹配信息
三.子查询
1.一般子查询:常用于SELECT语句的WHERE子句中
2.相关子查询
(3)带有EXISTS测试的子查询(exists一般用在WHERE子句中。其后紧跟一个SELECT子查询,从而构成一个条件,带有EXIST的子查询不反悔任何数据,只返回逻辑真和逻辑假)
四.sql控制语句(事务管理和数据保护)
1.授予权限:GRANT
格式:GRANT 权限 ON 对象 TO 用户 (WITH GRANT OPTION)
2.收回权限:REVOKE
五.视图
1.定义:是从一个或者多个基本表中导出的表,与基本表不同,是一个虚表,数据库中只存放视图的定义,而不存放视图对应的数据,这些数据都仍然存放在基本表中,在对视图进行查询时要执行对应的SELECT语句
如果一个视图是从单个基本表中导出来的,并且只是去掉了基本表的某些行和列,但是保留了主码,我们称这类视图为行列子集视图
2.视图的作用:
·简化对用户的操作;
·使用户以多种角度看待同一数据;
·对于数据库的重构提供了一定程度的逻辑独立性;
·能对机密数据提供安全保护;
3.视图更新的限制:一个视图对应一个SELECT语句
SQL中对SELECT语句必须满足以下的规则:
- FROM子句只能包含一个关系R,不能再包含其他关系
- WHERE子句再子查询中不能使用关系R
- SELECT(没有DISTINCT)中的属性列表必须包含足够多的属性,以保证对视图的元组进行插入时,能够用null或者默认值来填充所有其他不属于该视图的属性
- 查询中不包含group by 或者 having子句
4.视图的创建与删除
(1)创建:
CREATE VIEW 视图名(列明序列)AS SELECT 查询语句
(2)删除视图
DROP VIEW 视图名
六.索引(为了加快查询的速度,可以通过sql语句机型创建删除索引,空间换时间)
1.索引的作用
- 提高查询的速度
- 提高连接,ORDER BY 和 GROUP BY执行的速度
- 查询优化过程依赖索引
- 强制实施的唯一性
2.索引类型
- 聚集索引:数据表记录中的物理顺序与索引顺序相同,即缩影顺序决定了表中记录行的存储顺序,记录都是经过排序的,所以每个表只能有一个聚集索引
- 非聚集索引:表中的每一列都可以建立自己的非聚集索引
- 唯一性索引:标识表中任何两个记录的索引值都不相同,与表的主键类似,它可以 确保索引列不包含重复的值
注意:再创建主键和唯一性约束的列上会自动创建一个唯一性索引,如果表中没有创建其他的聚集索引,则会自动创建聚集索引
3.创建索引
create index 索引名 on 表名
4.删除索引
DROP INDEX表名,索引名
最后
以上就是孝顺楼房为你收集整理的数据库的复习--3.SQL语言的全部内容,希望文章能够帮你解决数据库的复习--3.SQL语言所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复