一般格式:

SELECT [ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]…
FROM <表名或视图名>[,<表名或视图名>]...
[WHERE <条件表达式>]
[GROUP BY <列名1> [HAVING <条件表达式>]]
[ORDER BY <列名>2 [ASC|DESC] ]

 

WHEREE的查询条件:

确定范围:BETWEEN AND,NOT BETWEEN AND;

确定集合:IN,NOT IN;

字符匹配:LIKE,NOT LIKE;

通配符:%和_

%    与包含一个或多个字符的字符串匹配
 
[ ]  与特定范围(例如,[a-f])或特定集(例如,[abcdef])中的任意单字符匹配。
 
[^]  与特定范围(例如,[^a-f])或特定集(例如,[^abcdef])之外的任意单字符匹配。
 

例子:

• WHERE FirstName LIKE '_im' 可以找到所有三个字母的、以 im 结尾的名字(例如,Jim、Tim)。
 
• WHERE LastName LIKE '%stein' 可以找到姓以 stein 结尾的所有员工。
 
• WHERE LastName LIKE '%stein%' 可以找到姓中任意位置包括 stein 的所有员工。
 
• WHERE FirstName LIKE '[JT]im' 可以找到三个字母的、以 im 结尾并以 J 或 T 开始的名字(即仅有 Jim 和 Tim)
 
• WHERE LastName LIKE 'm[^c]%' 可以找到以 m 开始的、后面的(第二个)字母不为 c 的所有姓。

查姓欧阳且全名为3个汉字的学生的姓名: select name from student where name like '欧阳_ _':汉字占两个字符的位置 

空值:IS NULLL,IS NOT NULL;

多重条件:AND,OR

集函数:

COUNT([DISTINCT|ALL] *) 
COUNT([DISTINCT|ALL] <列名>) 
SUM([DISTINCT|ALL] <列名>)
AVG([DISTINCT|ALL]<列名>)
MAX([DISTINCT|ALL]|<列名>)
MIN([DISTINCT|ALL]<列名>)

 

嵌套查询

一个SELECT_FROM_WHERE 语句称为一个查询块,将一个查询块嵌套在另一个查询块的WHEREE子句或HAVING 短语的条件中的查询称为嵌套查询或子查询

 

带any嵌套查询
select emp.empno,emp.ename,emp.sal from scott.emp where sal>any(select sal from scott.emp where job='manager');
等价于
select sal from scott.emp where job='manager' 结果为 sal:2975 2850 2450
select emp.empno,emp.ename,emp.sal from scott.emp where sal>2975 or sal>2850 or sal>2450

带some嵌套查询
select emp.empno,emp.ename,emp.sal from scott.emp where sal=some(select sal from scott.emp where job='manager');
等价于
select sal from scott.emp where job='manager' 结果为 sal:2975 2850 2450
select emp.empno,emp.ename,emp.sal from scott.emp where sal=2975 or sal=2850 or sal=2450
注:any与some是等价的

带all嵌套查询
select emp.empno,emp.ename,emp.sal from scott.emp where sal>all(select sal from scott.emp where job='manager');
等价于
select sal from scott.emp where job='manager' 结果为 sal:2975 2850 2450
select emp.empno,emp.ename,emp.sal from scott.emp where sal>2975 and sal>2850 and sal>2450

  1. ALL与ANY的关系就是,AND 与 OR 的关系。
  2. ANY与SOME等价,据说搞这两个不同的词出来是为了迁就英语语法。例如,在用= ANY 的地方在(英语)语法上就应该是= SOME。
  3. IN 与 = ANY 等价,均表示,变量在(子查询)列表之中,即 a IN (table B) 表示 a = ANY B.b
  4. NOT IN 与 <> ALL 等价,而不等于<> ANY,前两者均表示,变量不在(子查询)列表之中,即 a NOT IN (table B) 表示 a <> ALL B.b。而如果a <> ANY B.b,则只要任意一个b<>a就true了。
  5. IN 与 EXISTS 的性能区别主要来自,IN 会编列子查询的每行记录,然后再返回,而EXISTS 则只要遇到第一个满足条件的记录就马上返回。
  6. NOT IN 与 NOT EXISTS 并不能完全等价,只有当子查询中,select 关键字后的字段有not null约束或者有这种暗示时才用NOT IN。