我是靠谱客的博主 孝顺楼房,最近开发中收集的这篇文章主要介绍数据库的复习--3.SQL语言,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一.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语言所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部