SampleQuery.md

简单的查询语句

目录:

SQL

SQL(Structured Query Language),结构化查询语言。

结构化查询语言分类

SQL概念和规则

相关概念

书写规则

SQL所涉及的运算符和函数

名称 运算符 说明
比较运算 =、!=、>、<、>=、<=、<>、!>、!<、 等于、不等于、大于…
  BETWEEN AND、NOT BETWEEN AND 介于两者之间、介于两者之外
IN、NOT IN 在其中、不在其中
LIKE、NOT LIKE 匹配、不匹配
  IS NULL、IS NOT NULL 是空值、不是空值
逻辑运算 NOT、AND、OR 非、与、或
集函数 COUNT(*)、COUNT(列名)、SUM(列名)、AVG(列名)、MAX(列名)、MIN(列名) 统计元组个数、统计列值个数、列值汇总、求列值平均、求列值最大、求列值最小

运算符的优先级

优先级 运算分类 运算符举例
1 算术运算符 +,-,*,\
2 连接运算符 ||
3 比较运算符 =, <>, <, >, <=, >=
4 特殊比较运算符 BETWEEN AND,IN,LIKE,IS NULL
5 逻辑非 NOT
6 逻辑与 AND
7 逻辑或 OR

注:

基本SELECT语句

File->New->SQL Window,新建一个SQL窗口,在这里写语句。

SELECT [DISTINCT]{*|column|expression [alias],...}
FROM table
[WHERE condition(s)]

注:

简单的选择与投影查询

查询所有列

SELECT *
FROM emp

注:

查询指定列

SELECT ename
FROM emp

注:

使用算术运算符

运算符 描述
+
-
*
/

优先级

SELECT sal,sal+1000
FROM emp

注:

空值NULL

SELECT comm,comm+1000
FROM emp

注:

列别名

用来重新命名列的显示标题。

使用方法

以下情况要添加双引号

SELECT ename 员工名,job AS 工作,sal "薪水"
FROM emp

连接操作符

SELECT ename || job
FROM emp

原义字符串

SELECT ename || '的工作是' || job AS "Employee Details"
FROM emp

消除重复行

SELECT DISTINCT job
FROM emp

注:

显示表的结构

File->New->Command Window,新建一个Command窗口,可以在这个窗口显示表的结构,如:

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 
Connected as scott@ORCL

SQL> DESC emp
Name     Type         Nullable Default Comments 
-------- ------------ -------- ------- -------- 
EMPNO    NUMBER(4)                              
ENAME    VARCHAR2(10) Y                         
JOB      VARCHAR2(9)  Y                         
MGR      NUMBER(4)    Y                         
HIREDATE DATE         Y                         
SAL      NUMBER(7,2)  Y                         
COMM     NUMBER(7,2)  Y                         
DEPTNO   NUMBER(2)    Y                         

SQL> 

注:

比较数值型数据

SELECT deptno
FROM emp
WHERE deptno=30

比较字符型数据

SELECT job
FROM emp
WHERE job='SALESMAN'

注:

比较日期型数据

SELECT hiredate
FROM emp
WHERE hiredate>'01-1月-81'

注:

BETWEEN AND

用来判断要比较的值是否在某个范围内。

SELECT deptno
FROM emp
WHERE deptno BETWEEN 20 AND 30

IN

用来判断要比较的值是否和集合列表中的任何一个值相等。

SELECT deptno
FROM emp
WHERE deptno IN(20,30)

LIKE

SELECT ename
FROM emp
WHERE ename LIKE 'M%'

SELECT ename
FROM emp
WHERE ename LIKE '_M%'

SELECT ename
FROM emp
WHERE ename LIKE 'S\%%' ESCAPE '\'

IS NULL

使用IS NULL运算符来判断要比较的值是否为空值NULL。

SELECT comm
FROM emp
WHERE comm IS NULL

AND

要求两个条件都为真,结果才为真。

SELECT ename,job
FROM emp
WHERE ename LIKE 'S%' AND job='CLERK'

OR

只需要两个条件中的一个为真,结果就返回真。

SELECT ename,job
FROM emp
WHERE ename LIKE 'S%' OR job='CLERK'

NOT

可以和IN、BETWEEN AND、LIKE、IS NULL一起使用。

SELECT job
FROM emp
WHERE job NOT IN('CLERK')

ORDER BY子句

ORDER BY子句能对查询结果集进行排序,语法结构如下:

SELECT  [DISTINCT] { * | 列名|表达式[别名][,...]}
FROM表名 [WHERE  条件]
[ORDER BY  {列名|表达式|列别名|列序号} [ASC|DESC],…]

注:

排序规则

按列名升序排序

SELECT sal
FROM emp
ORDER BY sal

按列名降序排序

SELECT sal
FROM emp
ORDER BY sal DESC

按列别名排序

SELECT sal salary
FROM emp
ORDER BY salary

多列参与排序

SELECT sal,comm
FROM emp
ORDER BY sal,comm DESC

注:

按结果集列序号排序

SELECT sal,comm
FROM emp
ORDER BY 2

注: