1.SQL发展
- mysql:由瑞典 MySQL AB 公司开发,目前属于 oracle 旗下公司。其主表采用索引组织表,其主备复制属于物理复制,优点:体积小、速度快、总体拥有成本低,开放源码。
- SQL Server:Microsoft 公司推出的关系型数据库管理系统,只能在windows上进行运行。
- oracle:由甲骨文公司开发的,其主表支持堆表,也支持索引组织表,性能较好,但很多服务需要收费。
- pg:适用于更加严格的企业应用场景;mysql适用于数据可靠性要求较低的互联网场景。pg和其他数据库最大的区别是可以加载不同的插件,它包括了可以说是目前世界上最丰富的数据类型的支持;其次,目前PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。
SQL语言由4部分组成
- 数据定义语言DDL(Data Definition Language) 包括数据库、基本表、视图和索引等,扩展DDL还支持存储过程、函数、对象、触发器等的定义 DDL包括3类语言,即定义、修改和删除 create/drop/truncate/alter
- 数据操纵语言DML(Data Manipuplation Language)检索和更新:insert/delete/update/select
- 数据控制语言DCL(Data Control Language) 对象授权、用户维护、完整性规则定义和事务定义 grant/revoke/commit/rollback 4.其它 嵌入式SQL语言和动态SQL语言的定义 重新组织、备份与恢复
2.SQL查询
SELECT共有6个子句,其中SELECT和FROM是必须的,其它是可选项,必须严格按照如下顺序排列: SELECT [ALL | DISTINCT] <目标列表达式> [AS] [<别名>]
[, <目标列表达式> [AS] [<别名>] ... ]
FROM {<表名> | <视图名> | <查询表>} [AS] [<别名>]
[, {<表名> | <视图名> | <查询表>} [AS] [<别名>] ... ]
[ WHERE <条件表达式> ]
[ GROUP BY <列名1>] [, <列名2> ... ]
[ HAVING <条件表达式> ]
[ ORDER BY <列名表达式> [ASC | DESC]
[, <列名表达式> [ASC | DESC] ... ] ]
(1) <目标列表达式>可以是下面的可选格式: [ {<表名> | <别名>}.]* [ {<表名 >| <别名>}.]<列名> <函数> <聚合函数>
(2) FROM子句指定查询所涉及的表、视图或查询表,为操作方便,常给表取一个别名,称为元组变量
(3) WHERE子句给出查询条件,随后的<条件表达式>中可以使用下面的谓词运算符:
比较运算符:>,>=,<,<=,=,<>,!=;
逻辑运算符:AND,OR,NOT;
范围运算符:[NOT] BETWEEN...AND;
集合运算符:[NOT] IN;
空值运算符:IS [NOT] null;
字符匹配运算符:[NOT] LIKE;
存在量词运算符:[NOT] EXISTS。
在WHERE <条件表达式>中可以包含子查询,但不可以直接使用聚合函数,若要使用聚合函数,必须引出一个子查询。
SQL语句执行顺序
1.FROM 子句:执行顺序为从后往前、从右到左。数据量较少的表尽量放在后面。
2.WHERE子句:执行顺序为自下而上、从右到左。将能过滤掉最大数量记录的条件写在WHERE 子句的最右。
3.GROUP BY:执行顺序从左往右分组,最好在GROUP BY前使用WHERE将不需要的记录在GROUP BY之前过滤掉。
4.HAVING 子句:消耗资源。尽量避免使用,HAVING 会在检索出所有记录之后才对结果集进行过滤,需要排序等操作。
5.SELECT子句:少用*号,尽量取字段名称。ORACLE 在解析的过程中, 通过查询数据字典将*号依次转换成所有的列名, 消耗时间。
6.ORDER BY子句:执行顺序为从左到右排序,消耗资源。
1.比较运算 >、>=、<、<=、=、<>(或!=)
2.范围查询 BETWEEN...AND、NOT BETWEEN...AND IN、NOT IN
3.空值查询 IS null、IS NOT null 注意:IS不能用“=”替代
4.字符匹配查询 [NOT] LIKE <匹配字符串> [ESCAPE <换码字符>] 通配符%和_ %表示任意长度的字符串 如:‘ab%’ ‘zhang%ab’ _表示任意一个字符 如:‘ab_’ ‘a__b’
5、排序查询 Order By子句 当在查询表中数据时,记录比较多,有可能需要进行排序,此时可以使用 order by子句。 语法:ORDER BY <表达式1> [ASC | DESC] [, <表达式2> [ASC | DESC] ... ] 注意: 可以通过一个或多个字段排序。 排序规则: ASC:升序 ,DESC: 降序,默认是升序排序。
6、Distinct 去重 有的时候我们需要对重复的记录进行去重操作,比如,查询表中有哪些职位,此时,一种职位只需要显示一条记录就够。 位置:必须写在select关键字后
7、分组查询 Group By 子句 分组查询与分组函数(聚合函数):有的时候,我们可能需要查询表中的记录总数,或者查询表中每个部门的总工资,平均工资,总人数。这种情况需要对表中的数据进行分组统计。需要group by子句。