最近由于工作需要,把数据库的知识复习了一遍。以下是自己总结的一些个人认为比较重要的知识点(有些是个人不太熟的知识点就记下来当笔记吧),如有不足或错误,请大家及时指出。
SELECT [DISTINCT]{ |column|expression [alias],...} FROM table;
连接是在多个表之间通过 定的连接条件 连接是在多个表之间通过一定的连接条件,使表之间发生关联,进而能从多个表之间获取数据。
第一个表中的所有行和第二个表中的所有行都发生连接。
笛卡尔积的写法
SQL> SELECT emp.empno, emp.ename, emp.deptno,
2 dept.deptno, dept.loc
3 FROM emp, d t ep ;
SELECT table1.column, table2.column
FROM table1
[CROSS JOIN table2] |
[NATURAL JOIN table2] |
[JOIN table2 USING ( USING (column name column_name)] |
[JOIN table2
ON(table1.column_name = table2.column_name)] |
[LEFT|RIGHT|FULL OUTER JOIN [LEFT|RIGHT|FULL OUTER JOIN table2
ON (table1.column_name = table2.column_name)];
– 分组函数是对表中一组记录进行操作,每组只返回一个结果,即首先要对表记录进行分组,然后再进行操作汇总, 每组返回一个结果,分组时可能是整个表分为一组,也可能根据条件分成多组。
• MIN
• MAX
• SUM
• AVG
• COUNT
SELECT [column,] group_function(column)
FROM tab el
[WHERE condition]
[GROUP BY column]
[HAVING group_function(column)expression
[ORDER BY column| group_function(column)expression];
– 1.通过FROM子句中找到需要查询的表 子句中找到需要查询的表;
– 2.通过WHERE子句进行非分组函数筛选判断;
– 3.通过GROUP BY子句完成分组操作;
– 4.通过HAVING子句完成组函数筛选判断;
– 5.通过SELECT子句选择显示的列或表达式及组函数;
– 6.通过ORDER BY子句进行排序操作。
子查询语法:
SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);
• 括号内的查询叫做子查询,也叫内部查询,先于主查询执行。
• 子查询的结果被主查询(外部查询)使用
• expr operator包括比较运算符。
–单行运算符:>、=、>=、<、<>、<=
–多行运算符: IN、ANY、ALL
• 子查询可以嵌于以下SQL子句中:
–WHERE子句
–HAVING子句
–FROM子句
• 子查询使用指导
–子查询要用括号括起来
–将子查询放在比较运算符的右边
–对于单行子查询要使用单行运算符 (单行子查询是针对子查询的返回值只有一个)
–对于多行查询要使用多行运算符
– 是对数据库表中一个或多个列的值进行排序的一种数据库对象。
– 在数据库中,通过索引可以加速对表的查询速度;
索引缺点
• 占用空间;
• 降低DML的操作速度;
适合创建索引情况
• 表数据量很大
• 要查询的结果集在2%-4%左右
• 经常用来做WHERE条件中的列或者多表连接的列
• 查询列的数据范围分布很广
• 查询列中包含大量的NULL值,因为空值不包含在索引中
不适合创建索引情况
• 数据量很小的表
• 在查询中不常用来作为查询条件的列
• 频繁更新的表
• 索引列作为表达式的一部分被使用时,比如常查询的条件是SALARY*12 SALARY*12,此时在SALARY列上创建索引是没有效果的
• 查询条件中有单行函数时,用不上索引。
–子查询返回记录的条数 可以是一条或多条。
–和多行子查询进行比较时,需要使用多行操作符,多行操作符包括:
• IN
• ANY
• ALL
–IN操作符和以前介绍的功能一致,判断是否与子查询 的任意一个返回值相同。(单行子查询操作符不能接子查询中含有分组函数执行语句的情况)
ANY的使用
– ANY:表示和子查询的任意一行结果进行比较,有一个满足 条件即可。
• < ANY:表示小于子查询结果集中的任意 表示小于子查询结果集中的任意一个 ,即小于最 大值就可以。
• > ANY:表示大于子查询结果集 个 中的任意一 ,即大于最小值就可以。
• = ANY:表示等于子查询结果中的任意一个,即等于谁都 可以,相当于IN。
• ALL的使用
– ALL:表示和子查询的所有行结果进行比较,每一行必须都 满足条件。
• < ALL:表示小于子查询结果集中的所有行 表示小于子查询结果集中的所有行,即小于最小 值。
• > ALL:表示大于子查询结果集 行 中的所有 ,即大于最大 值。
• = ALL :表示等于子查询结果集中的所有行,即等于所有值,通常无意义。
SQL这块需要掌握以下这些知识点: