SQL笔记

SQL是一个非过程化的语言,由于它一次处理一个记录,对数据提供自动导航。SQL容许用户在高层的数据结构上工做,而不对单个记录进行操做,可操做记录集,全部SQL语句接受集合做为输入,返回集合做为输出。SQL的集合特性容许一条SQL语句的结果做为另外一条SQL语句的输入。sql

  • DML(Data Manipulation Language)数据操做语言,用于检索或者修改数据
  • DDL(Data Definition Language)数据定义语言,用于定义数据的结构, 好比 建立、修改或者删除数据库对象。
  • DCL(Data Control Language)数据控制语言,用于定义数据库用户的权限

DML

  • SELECT
  • INSERT
  • UPDATA
  • DELETE

DDL

  • CREATE TABLE
  • ALTER TABLE
  • DROP TABLE
  • DROP INDEX

DCL

  • ALTER PASSWORD
  • GRANT
  • REVOKE
  • CREATE SYNONYM

SELECT语句

GROUP BY

集中全部的行在一块儿,它包含了指定列的数据及容许聚合函数来计算一个列或者多个列。数据库

SELECT MAX(salary), dept FROM employee GROUP BY dept

HAVING

容许你为每一组指定条件,换句话说,能够根据你指定的条件来选择行。若是使用它,应该处在GROUP BY子句以后。markdown

SELECT dept, avg(salary) FROM emplyee GROUP BY dept HAVING avg(salary) > 20000

ORDER BY

ASC = Ascending order —-这个是缺省的
DESC =Descending order
多列进行排序,列于列之间加上逗号。数据结构

组合条件和布尔运算符

  • AND/OR
  • IN/BETWEEN 相对应 NOT IN / NOT BETWEEN

JOIN子句

join容许你从两个表或者更多的表链接进行数据检索,而只须要用一个SELECT语句函数

SELECT customer_info.firstname, customer_info.lastname,purchase.itme FROM customer_info INNER JOIN purchase ON customer_info.customer_number = purchase.customer_number
  • INNER JOIN

生成同时匹配表A和表B的recordspa

  • FULL OUTER JOIN

生成表A和表B里的记录全集,包括两边都匹配的记录。若是有一边没有匹配的,缺失的这一边为nullcode

  • left outer join

生成表A的全部记录,包括在表B里匹配的记录。若是没有匹配的,右边将是null对象

有篇很好的文章用韦恩图讲解join语句http://blog.jobbole.com/40443/,如图
这里写图片描述blog

索引

索引容许DBMS更快地访问数据,当查询以列为索引的时候搜索行,这样查询会快不少。排序

DISTINCT和排除复制

对于一我的买多件物品的只显示一行便可

SELECT DISTINCT SELLERID,OWNERLASTNAME, OWNERFIRSTNAME FORM ANTIQUES,ANTIQUEOWNERS WHERE SELLERID = OWNERID ORDERBY OWNERLASTNAME,OWNERID

EXISTS 和 ALL

UNION 和 外部链接

显示多个查询的结果,组合他们的输出,使用UNION关键字。

SELECT buyerid FROM antiqueowners UNION SELECT ownerid FROM orders

使用UNION会进行自动复制排除,而且列数据类型匹配才能查询

SQL语句的执行顺序

FROM - WHERE - GROUP BY - HAVING - SELECT - DISTINCT - UNION - ORDER BY

SELECT A.x + A.y AS z FROM A WHERE z = 10 -- z 在此处不可用,由于SELECT是最后执行的语句!

SELECT语句规则:
- 你仅可以使用那些能经过表引用而得来的字段;
- 若是你有 GROUP BY 语句,你只可以使用 GROUP BY 语句后面的字段或者聚合函数;
- 当你的语句中没有 GROUP BY 的时候,可使用开窗函数代替聚合函数;
- 当你的语句中没有 GROUP BY 的时候,你不能同时使用聚合函数和其它函数;
- 有一些方法能够将普通函数封装在聚合函数中;

集合运算( set operation)

  • DISTINCT 在映射以后对数据进行去重
  • UNION将两个子查询拼接起来并去重
  • UNION ALL将两个子查询拼接起来但不去重
  • EXCEPT 将第二个子查询的结果中从第一个子查询中去掉
  • INTERSECT 保留两个子查询都有的结果并去重
相关文章
相关标签/搜索