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:/.sql; 命名规则: 可以使用半角英文字母,半角数字,下划线,但是只能以英文字母作为开头。 **数据类型:**1.integer,char,varchar,date. 约束设置: 键值约束,如NOT NULL,PRIMARY KEY 等。 语句语法: 对表和数据库的操作语句有三个。create,drop,alter.具体的可以参考文档。
9.select 语句:
select
from
其中*可以表示全部列。使用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
;
4搜索型DELETE:
DELETE FROM
WHERE
;
5.数据的更新:
update
set
=
;
6.搜索型update类似delete。
7.多列更新语句。
8.事务定义:在同一个处理单元中执行的一系列更新处理集合。类似编程 语言中的语句块。
语法格式:
begin transaction ;commit(rollback);
不同的RDBMS有点区别,具体可以查看文档。
事务的四个特性:ACID
14.视图:
语法: CREATE VIEW
(列1,..列n) AS
; 相关理解:一种映射关系,视图是虚表,不存储实际数据,需要的数据时通过select字句实时获取,所以可以是动态的。同意可以把视图当作是一个临时中转站。当你要写很复杂的指令但是不好下手的时候,可以通过视图作为中转站,把上一次的查询结果保存在视图上,然后基于视图进行下一次查询。 子查询:一次性的视图,缺乏了作为中转的功能。其实也是语句的嵌套。当我们在from字句中是应select字句时,就是嵌套或者称为子查询。我们知道from要后跟表,我们不能写上一个列名,但是select字句的返回结果就是一个不具名的表。类似C++中的匿名变量。 标量子查询:(Scalar Subquery)就是返回单一值的子查询。结果只有一行一列。由于其返回的结果只是一行一列,那么不像普通的子查询返回的是一个表,只能用于特定的地方,标量子查询可以用在能够使用常数或者列名的地方。 关联子查询:具体略。 15.函数,谓词,case表达式: 1.函数分类:算术,字符串,