--简单查询SELECT*FROM dept;--基本查询SELECT*FROM dept d;--表的别名SELECT ROWID,deptno,dname FROM dept;--查询指定列SELECT deptno*100FROM emp;--带有表达式的查询SELECT e.empno 员工编号,e.ename 员工名字 FROM emp e;--为列指定别名的查询SELECTDISTINCT job FROM emp e;--查询不重复记录SELECT emp.ename 员工名字,emp.sal+NVL(emp.comm,0) 员工总工资 FROM emp;--处理NULL值的NVL函数SELECT e.empno||e.ename 编号和名字 FROM emp e;--字符串拼接SELECT CONCAT(e.empno,e.ename)FROM emp e;--字符串拼接
--筛选查询SELECT*FROM emp e WHERE sal >2000;--条件查询SELECT*FROM emp e WHERE sal <2000;--比较查询【>,>=,<,<=,!,<>】SELECT*FROM emp e WHERE sal =ANY(800,1600);--特殊比较查询ANY,任意一个满足SELECT*FROM emp e WHERE sal <>ALL(800,1600);--特殊比较查询ALL,所有满足SELECT*FROM emp e WHERE ename LIKE'B%';--关键字筛选LIKE(通配符%和_)SELECT*FROM emp e WHERE ename LIKE'B\%'ESCAPE '\';--关键字筛选LIKE(转义通配符)SELECT*FROM emp e WHERE sal IN(800,1600);--关键字筛选INSELECT*FROM emp e WHERE sal NOTIN(800,1600);--关键字筛选NOT INSELECT*FROM emp e WHERE sal BETWEEN800AND1600;--关键字筛选Between andSELECT*FROM emp e WHERE sal NOTBETWEEN800AND1600;--关键字筛选not between andSELECT*FROM emp e WHERE comm ISNULL;--关键字筛选IS NUlLSELECT*FROM emp e WHERE comm ISNOTNULL;--关键字筛选IS NOT NULLSELECT*FROM emp e WHERE sal >1000AND sal <2000;--逻辑筛选andSELECT*FROM emp e WHERE sal <1000OR sal >2000;--逻辑筛选orSELECT*FROM emp e WHERENOT sal =5000;--逻辑筛选not
--分组查询SELECT deptno FROM emp e GROUPBY deptno;--最简单分组SELECT deptno,AVG(sal)FROM emp e GROUPBY deptno;--分组函数与统计函数混用SELECT deptno,job FROM emp e GROUPBY deptno,job;--多列分组SELECT deptno,AVG(sal)FROM emp e GROUPBY deptno HAVINGAVG(sal)>2000;--having对分组后数据筛选(与where的区别)SELECT deptno,job,AVG(sal)FROM emp e GROUPBY ROLLUP (deptno,job);--rollup生成横向小计和总计SELECT deptno,job,AVG(sal)FROM emp e GROUPBY CUBE(deptno,job);--cube生成横向/纵向小计和总计SELECT deptno,job,AVG(sal),GROUPING(deptno),GROUPING(job)FROM emp e GROUPBY CUBE(deptno,job);--grouping查看统计结果是否使用特定属性SELECT deptno,job,SUM(sal)FROM emp e GROUPBY ROLLUP((deptno,job));--复合列SELECT deptno,job,AVG(sal)FROM emp e GROUPBY GROUPING SETS(deptno,job);--grouping sets生成多种分组统计结果
--排序查询SELECT*FROM emp e ORDERBY e.sal;--最简单排序(默认升序)SELECT*FROM emp e ORDERBY e.sal ASC;--升序排序SELECT*FROM emp e ORDERBY e.sal DESC;--降序排序SELECT*FROM emp e ORDERBY e.sal,e.empno;--多列排序SELECT*FROM emp e ORDERBY e.sal DESC,e.empno ASC;--多列排序,分别制定排序顺序
--多表关联查询SELECT*FROM dept d INNERJOIN emp e ON d.deptno = e.deptno;--内连接【inner可以不写】SELECT*FROM dept d LEFTOUTERJOIN emp e ON d.deptno = e.deptno;--左外连接【Outer可以不写】SELECT*FROM dept d RIGHTOUTERJOIN emp e ON d.deptno = e.deptno;--右外连接【Outer可以不写】SELECT*FROM dept d FULLOUTERJOIN emp e ON d.deptno = e.deptno;--完全外连接【Outer可以不写】
【【【【【【【【【【外连接操作符:(+),有兴趣可以了解】】】】】】】】】】
SELECT*FROM dept d NATURALJOIN emp e;--自然连接SELECT*FROM dept d CROSSJOIN emp e;--交叉连接
--子查询SELECT*FROM emp e WHERE e.deptno =(SELECT deptno FROM dept WHERE dept.dname ='RESEARCH');--简单子查询SELECT*FROM emp e WHERE e.sal =(SELECTMAX(sal)FROM emp)--单行子查询(子查询只返回一个值)【只能使用单行比较运算符】SELECT*FROM emp e WHERE e.empno IN(SELECT empno FROM dept WHERE dept.dname ISNOTNULL);--多行子查询【只能使用多行比较运算符】
【子查询很强大,select、UPDATE、DELETE、insert等命令中允许使用表达式的地方都可以使用子查询】