1、SQL的简单查询

1、掌握SQL查询的基本语法

2、SQL进行查询的各种操作

SELECT [DISTINCT]*| 列[列名],列[列别名],...

FROM 表名称[别名];

执行顺序:1、FROM 2、SELECT

范例:查询emp表中的全部记录:SELECT * FROM emp ;

FROM子句确定数据来源,SELECT子句控制所需要的数据列范例:进行数据的投影--控制所需要显示的数


据列:查询每个雇员的编号姓名工资

SELECT empno,ename,sal*12 FROM emp ;

再简单查询之中也支持四则运算

范例:现在要求查询每个雇员的编号姓名基本年薪(月工资是sal,年薪*12)

SELECT empno ,ename ,sal*12 FROM emp ;

部分的列名称不好看,可以进行别名设置


SELECT empno,ename,sal*12 income FROM emp ;


SELECT empno 雇员编号,ename 姓名,sal*12 年薪 FROM emp ;

如果想开发正常,尽量别用汉语

还支持数据连接操作,使用 ”||”链接

SELECT empno || ename FROM emp ;(普通数字直接编写)

SELECT empno || 1 FROM emp ;(字符串使用单引号声明)

SELECT empno || 'hello' FROM emp; 

实现格式化的输出操作:SELECT '编号:' || empno || ',姓名:' || ename FROM emp ;

DISTINCT关键字,去除重复内容

查询所有雇员的职位信息:

SELECT job FROM emp ;

SELECT DISTINCT job FROM emp ;

SELECT DISTINCT ename,job FROM emp ;

总结:简单查询中的最大特征在于:控制数据列,但是他无法进行数据行的控制。


2、SQL的限定查询

1、SQL语句的执行顺序

2、限定符号的使用

如果想对所选的数据行进行控制,那么可以利用WHERE子句完成

SELECT [DISTINCT] * | 列[别名],列[别名]... 

FROM 表名称[别名]

[WHERE 限定条件(s)];

执行顺序

1、FROM 确定数据来源

2、WHERE 筛选数据行

3、SELECT 选出所需要的数据列,最后被执行

关系运算:>、<...

范围运算:BETWHERE...END;

空判断:IS NULL、IS NOT NULL;

IN判断:IN 、NOTIN 、 exists()(复杂查询);

模糊查询:LIKE、NOTLIKE.

以上限定符只能判断一次,如果出现若干个限定符、需要进行限定符链接,使用逻辑运算:AND(与)、 OR(或)、 NOT(非);

1、关系运算符

范例:查询工资低于1200的雇员

SELECT *

FROM emp 

WHERE sal<1200 ;

范例:查询工资3000的雇员

SELECT *

FROM emp 

WHERE sal=3000 ;

范例:查询Smith的雇员信息(在oracle数据库中,数据区分大小写)

SELECT *

FROM emp 

WHERE ename='SMITH' ;

对于不等于有2个符号:!=、<>;

范例:查询职位不是办事员的雇员(职位是job的字段、办事员的职位名称CLERK)

SELECT *

FROM emp 

WHERE job<>'CLERK' ;


SELECT *

FROM emp 

WHERE job!='CLERK' ;

2、逻辑运算

逻辑运算可以保证连接多个条件,主要使用AND/OR完成。

范例:要求查询出不是办事员但工资低于3000的雇员信息

SELECT *

FROM emp 

WHERE job<>'CLERK' AND sal<3000 ;

范例:查询不是办事员也不是销售的雇员信息

SELECT *

FROM emp 

WHERE job<>'CLERK' AND job<>'SALESMAN' ;

范例:查询出职位是办事员,或者工资低于1200的雇员

SELECT *

FROM emp 

WHERE job='CLERK' OR sal<1200 ;

除了AND与OR之外,还可以使用NOT进行求反。即:true变为false、false变为true

范例:观察NOT操作

SELECT *

FROM emp 

WHERE NOT sal>2000 ;

3、范围运算:BETWEEN...AND

BETWEEN...AND主要功能是进行范围插叙

SELECT *

FROM emp 

WHERE 字段|树枝 BETWEEN 最小值 AND 最大值 ;

范例:输出工资在1500~3000的所有雇员

SELECT *

FROM emp 

WHERE sal BETWEEN 1500 AND 3000 ;

使用BETWEEN...END是一个运算符,而是用关系与逻辑的组合属于两个运算符,自然效率会更高

在oracle中的所有运算符都不收数据类型的控制,在之前使用的是数字进行判断,那么除了数字之外也可以使用字符串或者日期进行判断。

范例:查询出所有在1981年的雇员信息


SELECT *

FROM emp

WHERE hiredate BETWEEN '01-1月-81' AND '31-12月-1981' ;

范例:无聊的字符串范围


SELECT * FROM emp WHERE ename BETWEEN 'ALLEN' AND 'CLARK' ;

4、空判断

null是从数据库定义上来讲属于一个未知的数据,任何一个数字和null进行计算结果还是为null

SELECT null + 1 FROM emp ;

null不能使用关系运算判断。关系可以判断的是数据,所以在SQL智能用IS NULL/IS NOT NULL来判断不为空

范例:查询所以领取佣金的雇员信息(comm字段表示佣金,如果领取,comm的内容不是null)

SELECT *

FROM emp

WHERE comm IS NOT NULL ;

5、IN操作符(谓词IN 核心)

IN指的是根据一个指定的范围进行数据查询

范例:查询出雇员编号是7369.7566.7788.9999的雇员信息

SELECT *

FROM emp

WHERE empno=7369 OR empno=7566 OR empno=7788 OR empno=9999 ;


SELECT *

FROM emp

WHERE empno IN (7369,7566,7788,9999) ;

NOT IN 在使用NOT IN时如果查找的数据范围内包含NULL值,那么不会有任何的查询结果返回,IN操作无此现在

SELECT *

FROM emp

WHERE empno NOT IN (7369,7566,7788,9999) ;


SELECT *

FROM emp

WHERE empno IN (7369,7566,7788,null) ;


SELECT *

FROM emp

WHERE empno NOT IN (7369,7566,7788,null) ;

5、模糊查询:LIKE(核心)

LIKE可以实现数据模糊插叙,如果使用LIKE则必须使用如下两个匹配符号:

“_”匹配任意的一位符号;

“ % ”匹配任意的符号(0位、1位、多位)

范例:查询所有雇员姓名中一字母A开头的雇员信息

SELECT *

FROM emp

WHERE ename LIKE 'A%' ;

范例:查询所有雇员姓名第二个字母是M的所以雇员信息

SELECT *

FROM emp

WHERE ename LIKE '_A%' ;

范例:查询雇员姓名任意位置上存在A的雇员信息

SELECT *

FROM emp

WHERE ename LIKE '%A%' ;

关于LIKE的两点说明

1、如果在使用LIKE进行限定查询的时候,如果没有设置任何关键字,那么表示查询全部;


SELECT * FROM emp WHERE ename LIKE '%%' ;

2、LIKE 可以在任意的数据类型上使用(原生支持)

SELECT * FROM emp 

WHERE ename LIKE '%A%' OR sal LIKE '%1%' OR hiredate LIKE '%81%' ;

虽然所有的数据类型都支持LIKE ,但是往往会在字符串上使用,所见到的大部分系统搜索功能都是此语句实现的。但是不包含搜索引擎的实现。