首页 > 技术文章 > SQL的编写顺序和执行顺序,以及空值处理,别名处理,转义字符处理

jasonboren 2019-05-22 21:47 原文

SQL即结构化查询语言。也就是用来从数据库中操作数据的。数据总的来说就是增删改查CRUD。

一,sql的分类,大致有四类:

  1)DDL : 数据定义语言 create alter drop truncate
  2)DML : 数据操纵语言 insert update delete
  3)DCL : 数据控制语言 安全 授权 grant revoke
  4)DQL : 数据查询语言 select 子句

二,查询语句的结构

  select [列名] [*] from 表名 [where 条件] [group by 分组条件] [having 过滤分组条件] [order by 排序 asc|desc]

三,sql的书写顺序

  SQL的书写顺序:select ...from ..where...group by having...order by ....

四,sql的执行顺序

  sql的执行顺序:from ...where... group by... having... select.... order by...

先是从那张表以什么条件查询出来,其次是以什么条件分组,最后将查询出来的数据进行排序输出。

五,sql中的聚合函数

  求和函数:sum()  求平均:avg()  最大值:max()  最小值:min()  统计:  count()

  聚合函数在使用的时候是不会将空值纳入计算的,也就是说聚合函数是会避开空值的。count()用于统计不为空的记录。

需要注意的是:

  1.在select子句中出现了聚合函数,就不要出现其他的普通列,除非是group by分组的列。

  2.where 后面不能加聚合函数,where 是对from的结果进行筛选,需要使用where子查询。

  3.使用统计count()时不要使用*号,最好使用主键或者常量。

六,关于sql中的模糊查询

  sql中支持通配符,模糊查询主要有%,_,利用这两个通配符来进行模糊查询。%表示匹配一个或多个甚至0个字符,_表示匹配一个字符。

  例如 select * from emp where name like 'j%';表示查询出姓名以j开头的所有员工信息。

 七,关于别名的问题

  使用as 关键字, 可以省略,别名中不能有特殊字符或者关键字, 如果有就加双引号。

八,关于在查询中遇到特殊字符

  在查询中遇到特殊字符需要使用转义字符 escape,

  例如 查询名字中包含%的员工信息,select * from emp where ename like '%\%%' escape '\';

九,关于排序时null值的处理

  排序为null的问题可以使用nulls first | last来指定null值得显示位置,是之前显示还是最后显示。
  select * from emp order by comm desc nulls last | first;

  当null参与运算时,任何与null进行运算都是null。例如select 1+null;结果为空。所以在数据库中药尽量避免空值。在设计时需要考虑好。

十,多表查询

多表查询主要有内连接,外连接。内连接 inner join on也就是两个表之间的交集,可以直接使用where代替。

外连接又分为左外连接和右外连接。

左外连接:left outer(可省略) join...on

  例如:select A.name,B.name from A left join B on A.id=B.id;左外连接的特点是,不管右表中有没有数据与左表中存在关联,它都将查询出左表的全部数据。靠近左边的就是左表。

右外连接:right outer join... on特点和左连接相反。

推荐阅读