Summary Of SQL

SQL基础知识总结

1.数据库和数据库管理系统区分:DataBase(DB),DataBase Management System(DBMS).
2.Type of DBMS :

1.层次性数据库(Hierarchical DataBase ,HDB)
2.关系型数据库(Relational DB,RDB)
3.面向对象数据库(Object Oriented DB,OODB)
4.XML数据库(XML DB,XMLDB)
5.键值存储系统(Key_Value Store ,KVS)
PS:主要总结的是RDBMS.常见的RDBMS有如下几个:
. Oracle 甲骨文公司
. SQL Server 微软公司
. DB2 IBM公司
. PostgreSQL 开源
. MySQL 同上

3.RDBMS 常见的系统结构:

C/S结构(Client/Server)客户端发出请求,服务器予以回应。

4.表的结构:

根据SQL语句返回的内容也必须是二维表的结构。其中行也称为记录,列也称为字段。关系型数据库以行为单位对数据进行读取。不同于EXCEL中的表格,一个单元格只能存放一个数据,同时也不存在合并单元格的操作。

5.SQL概要:

分为标准SQL和特定SQL。所谓特定来源于不同的RDBMS.

6.SQL 语句分类:

1.DDL(Data Definiton Language,数据定义语言):用来创建或者删除表和数据库包括三个指令:CREATE;DROP;ALTER.
2.DML(Data Manipulation Language,数据操纵语言):用于查询或者变更表中的记录。指令有:SELECT;INSERT;UPDATE;DELETE.
3.DCL(Data Control Language,数据控制语言):用于确认或者取消对数据库中数据的变更。指令:COMMIT;ROLLBACK;GRANT;REVOKE.
90%的语句属于DML.

7.语句书写的基本规则:

. 以分号结尾。
. 不区分关键字的大小写。
. 常数的书写方式是固定的。字符串和日期常数用单引号括起,数字可以直接书写。
. 单词需要用半角空格或者换行来分隔。

8.数据库的操作:

从文件中导入数据库指令:
\i C:/<location of file‘s name>.sql;
命名规则:可以使用半角英文字母,半角数字,下划线,但是只能以英文字母作为开头。
**数据类型:**1.integer,char,varchar,date.
约束设置:键值约束,如NOT NULL,PRIMARY KEY 等。
语句语法:对表和数据库的操作语句有三个。create,drop,alter.具体的可以参考文档。

9.select 语句:

select <column_name> from <table_name>
其中*可以表示全部列。使用AS设定列的别名,使用汉字当作别名时需要用双引号引起。

select 语句的理解:根据我目前的感觉,是一种循环查找语句。其中可以对查找加以限制和分组。循环的次数由表和限制条件决定。所以当查询常数的时候,会把常熟循环输入同等次数。

在查询的列前面加上distinct可以在结果中去除重读的行。也可以在多列前加上DISTINCT,也只能写一个。

where字句:用列名设置限制条件,记住是列名,身份对等。语句执行的顺序应该是如下的,先选择表,然后根据where的条件选择满足条件的记录集合,在此集合的基础上执行select字句。语句的书写顺序是固定的。

注释的书写方法:单行注释和多行注释。单行是用–;多行是采用/*.类似C++ 的用法。

10.算术运算符和比较运算符,逻辑运算符:

1.select字句中可以使用常熟或者表达式,表达式的定义可以参考C++,这个地方指的的是对列名进行加减运算。
2.包含NULL的计算结果肯定是NULL.
3.比较运算符用于where字句中对条件进行设置。注意不等号的书写即可.<>(这个是不等号) .其余的比较常见。
4.不要对NULL使用比较运算符。若要对NULL进行操作的话,可以使用特定的运算符,比如 IS NULL ;IS NOT NULL.
5.有AND,OR,NOT.很常见。
6.特有的三值逻辑:出来真/假,外加一个不确定,比如NULL是不确定的。所以逻辑运算中有了NULL时,要慎重。但是可以对列设置NOT NULL 约束。

11.聚合查询:

1.五个聚合函数:count,sum,max,min,avg.都很常见。count用于统计行数。sum/max/min/avg按照字面值理解即可。
行数中对NULL是否统计的说明:count(*)指令会包含NULL,但是对特定的列使用时不包括NULL行。
此外只有count函数可以使用*,其余的不能。使用此函数时可以在函数体内使用distinct(此限制是针对列名),写在外面执行的先后不同。

12.GROUP BY字句:

使用此字句可以进行分组,NULL也算一组。用于分组的列名可以称为聚合键或者分组列。主要语句组合时的执行顺序。比如select * from max where col=‘max‘ group by col; 顺序是from ,where ,group by ,select .

使用时常见的错误:1.在select字句中写了聚合键之外的列名,count(*)不算。2.在group by字句中使用了列的别名。3.在where字句中是用了聚合函数,上文已经说过,where字句的操作对象是列名,但是使用了聚合函数是一个集合。
group by 字句和 having 字句搭配使用。
order by 排序,默认asc,可以选择desc.可以指定多个排序键。order by字句是最后执行的,所以不要随便使用别名。

13.数据的插入删除:

1.insert 语句使用
2.insert ..select 实现表之间的拷贝。
3.delete from <table_name> ;
4搜索型DELETE:
DELETE FROM <TABLE_NAME> WHERE <CONDITION> ;
5.数据的更新:
update <table_name> set <column_name>=<expr>;
6.搜索型update类似delete。
7.多列更新语句。
8.事务定义:在同一个处理单元中执行的一系列更新处理集合。类似编程语言中的语句块。
语法格式:
begin transaction ;commit(rollback);
不同的RDBMS有点区别,具体可以查看文档。
事务的四个特性:ACID

14.视图:

语法:
CREATE VIEW <View_name> (列1,..列n) AS <SELECT 字句>;
相关理解:一种映射关系,视图是虚表,不存储实际数据,需要的数据时通过select字句实时获取,所以可以是动态的。同意可以把视图当作是一个临时中转站。当你要写很复杂的指令但是不好下手的时候,可以通过视图作为中转站,把上一次的查询结果保存在视图上,然后基于视图进行下一次查询。

子查询:一次性的视图,缺乏了作为中转的功能。其实也是语句的嵌套。当我们在from字句中是应select字句时,就是嵌套或者称为子查询。我们知道from要后跟表,我们不能写上一个列名,但是select字句的返回结果就是一个不具名的表。类似C++中的匿名变量。
标量子查询:(Scalar Subquery)就是返回单一值的子查询。结果只有一行一列。由于其返回的结果只是一行一列,那么不像普通的子查询返回的是一个表,只能用于特定的地方,标量子查询可以用在能够使用常数或者列名的地方。
关联子查询:具体略。

15.函数,谓词,case表达式:

1.函数分类:算术,字符串,日期,转换,聚合 函数。具体的使用可以参考文档。常用的可以牢记。
2.谓词分类:like,between,in,not in,is null,is not null ,exists具体的使用略。
3.case表达式:类似C++中的开关语句。
语法:
case when<expr> then<expr>...else <expr> end
更多的是条件选择的判断。

16.集合的运算:

1.UNION,去并集连接两个查询结果。无ALL选项会去重。
2.INTERSECT,取交集。无ALL去重。
3.EXCEPT,去补集。
4.表的联结:内外两种联结+交叉联结。具体查文档。

17.窗口函数:

简而言之,兼具分组和排序功能。例如使用RANK函数进行分组排序,对每个小组组内进行排序。

后续:博文内容为<<SQL基础教程[日]>>总结.使用的数据库是PostgreSQL,短小精悍,易于学习,但是推荐使用最新版本,书中的版本过老,可能会出现各种问题。书写的很基础,但是有书中那个使用的列名和日文相关,看起来可能显得比较怪异。总而言之,适合新手入门。书中的源码可以在图灵社区下载。

写在后面的废话:

先写一下最近学习看书的感悟,我怕我今晚不及时记录下来以后可能就忘记了。我读高三的时候收到一句话鼓舞:如果现在不做,那么以后永远都不会做。这句话一直让我保持着行动力,不喜欢拖沓。所以想到哪里就写到哪里了。最近在看<<数据结构与算法分析>>一书,算的上是神书了,写的比较好。这让我突然想起我第一次学习数据结构的时候,当时我感觉好难,根本无从下手,链表都理解的有困难。当时要让我看肯定是头大。当时学的很累,但还是硬着头皮学了一遍。然后就是很长一段时间不接触了。这学期开学了,开设了数据库课程,汇编语言。因为要求不高,所以学有余力,又买了一本数据结构的书。但是这次看这本书就不再显得那么吃力了,反而有一种呼之欲出的感觉。当时我就想到了在知乎上看见的理论。学习知识分为三部分。我会的,我感觉我会的,我不会的。看我会的书当然是心情愉快的。但是后两者就不显得那么愉快了。但是如何学习我不会的东西仍然保持愉快呢?我感觉需要多接触,不管第一次多么艰难,一定要硬着头皮看一遍,那么当你第二次接触的时候心情肯定会好很多。因为知识已经从你根本不会的转变为我感觉我会的,这样学起来说不定会轻松一点。

April 11, 2015 9:13 PM By Max ;

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。