select e.empno, e.ename, d.loc from emp e, dept d where e.deptno = d.deptno and substr(e.ename, 1, 1) = ‘S’; 等价于 select empno, ename, loc from emp join dept on emp.deptno = dept.deptno where substr(emp.ename, 1, 1) = ‘S’;
1)ASC 和 DESC ASC是升序排列 DESC是降序排列 NULL作为最大值存在,如果在降序排列中,NULL排列在第一个,然后依次往下降; 如果在升序排列中,NULL则在最后一个。 没写ASC或者DESC 则默认是升序排列 2)多列排序 当以多列作为排序标准时,首先第一列进行排序,如果第一列数据相同,则以第二列排序,依次类推。 注意:多列排序中,不管是正序还是倒叙,每个列需要单独设置排序方式。 SELECT ename,deptno,sal from emp order by deptno ASC,sal DESC;
在表中不能直接查询得到结果,而需要将现有的数据经过计算得到结果, 这种多行数据参与运算返回一行结果的计算方式就是聚合函数。 AVG和SUM等聚合函数的计算忽略表中的NULL值。 其他数据和NULL计算结果为NULL
select count(*) total_number from emp; select count(job) total_job from emp;
group by having having必须跟在group by的后面才能出现,having不能单独存在。
1.from 从后到前 从右到左。数据量较少的表尽量放在后面 | 2.where 从右到左 将能过滤最大记录的条件写在where子句的最右边 | 3.group by 从左往右分组 在group by之前用where将不需要分组的记录过滤掉。 | 4.having子句 消耗资源 尽量避免使用,having会在检索出所有记录之后才对结果集进行过滤,需要排序等操作 | 5.select 少用* 尽量取字段名,oracle在执行号时,会将转换成所有的列名,消耗时间 | 6.order by 执行顺序为从左到右 消耗资源
1)内连接 内连接返回所有满足条件的记录 2)外连接 1>左外连接 在两表中关联字段中,将左表中的该字段中对应的每一条数据的信息显示出来,可包含重复的 2>右外连接 在两表中关联字段中,将右表中的该字段中对应的每一条数据的信息显示出来,可包含重复的 3>全外连接 在两表中关联字段中,两表中对应的字段都要显示出数据,每个关联都要有数据。 4>自连接
