子查询
DESC descend;
ASC ascend;
INSERT INTO emp VALUES(‘1219’,’DASD’,’STUDENT’,’7902’,’18-12月-16’,’0’,’12’,’20’);
UPDATE emp SET ename = ‘wakaka’ WHERE JOB = ‘STUDENT’;
[charlist] 字符列中的任何单一字符
[^charlist]或者[!charlist] 不在字符列中的任何单一字符
现在,我们希望从上面的 “Persons” 表中选取居住的城市以 “A” 或 “L” 或 “N” 开头的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE City LIKE ‘[ALN]%’
SELECT * FROM emp WHERE ENAME LIKE ‘%[!s]%’;
子查询:在一个查询里面继续嵌套其他的查询语句。
在一个查询语句之中有可能会同时嵌套多个子查询。
子查询的各个使用形式
WHERE字句:子查询一般会返回单行单列、单行多列、多行单列。
HAVING字句:子查询会返回单行单列,同时表示要使用统计函数
FROM字句:子查询返回多行多列数据(表结构);
在WHERE字句里面使用子查询
例:查询出低于公司哦、平均工资的雇员信息
SELECT AVG(sal)
FROM emp;//查询出来的结果为单行单列可以作为WHERE字句使用
SELECT *
FROM emp
WHERE sal<(
SELECT AVG(sal)
FROM emp
);
范例:查询出公司最早雇佣的雇员信息
SELECT MIN(hiredate)
FROM emp;//得到单行单列结果
SELECT *
FROM emp
WHERE hiredate = (
SELECT MIN(hiredate)
FROM emp
);
例:与SCOTT从事同一工作,并且工资相同的雇员信息
SELECT job,sal
FROM emp WHERE
ename = ‘SCOTT’;//此时返回的结果是单行多列,这时候就要求要比较的内容与列数相同,顺序也不能搞乱
SELECT *
FROM emp
WHERE(job,sal)=(
SELECT job,sal
FROM emp WHERE
ename = ‘SCOTT’)
AND ename<>’SCOTT’
;
如果说子查询返回的内容是多行单列。那么就表示一个操作的数据范围。
提供有三个操作符:IN、ANY、ALL。
1、IN操作:指的是与子查询返回额内容相同。
SELECT sal FROM emp WHERE job=’MANAGER’;
SELECT *
FROM emp
WHERE sal IN(
SELECT sal FROM emp WHERE job=’MANAGER’);
NOT IN 操作,如果子查询当中有Null,为空,那么返回的没有任何操作。
2、ANY操作,一共分为三种形式:
= ANY://功能和IN一样
SELECT *
FROM emp
WHERE sal =ANY(
SELECT sal FROM emp WHERE job=’MANAGER’);
< ANY:
SELECT *
FROM emp
WHERE sal