1.       null

如果一个数据行的某个特定的列缺少数据值,那么这种值叫做null,或者说是包含空值,

空值是指一种无效的,未赋值,未知的或者不可用的值。

空值不同于零或者空格

Select ename , job , sal , comm. From emp;

任何包含空值的算术表达式运算后的结果都为空值null。

Select ename , sal , comm , 12 * sal  b from emp;

2.       where)

使用where 子句限定返回的数据行(过滤记录)

Select ename, job, deptno from emp where job=’CLERK’;

注意:字符串和日期类型数值都要用单引号引起来

      单引号中的数值区分大小写

      日期型数值是区分日期表达形式的

      默认的日期形式是DD-MON-YY(第三方数据的默认格式和oracle数据库的默认格式是不一样的,这个是oracle数据库的默认格式)

3.       比较操作符

数据库字段为空对应java代码_字符串

Select ename, sal, comm from emp where sal <= comm;

比较操作符两边的数值数据类型必须一致。

1.       逻辑运算符

与 AND

或 OR

非 NOT

优先级:非—〉与—〉或

 

1.       其他比较运算符

Between…and…    两个值之间

IN(list)            和多个值任何一个匹配

LIKE              字形匹配

IS NULL           是空值

使用like运算符:

使用like来执行字符串通配符查找

查找条件可以包含字符串和数字:

-%表示零或任意更多的字符

-_代表一个字符

例:select ename from emp where ename like ‘S%’;(表示ename是以大写’S’开头的)

    select ename from emp where ename like '_A%';(表示ename是以任意字符开头的第二个字符是大写’A’的值)

6.等价连接(等值连接)

数据库字段为空对应java代码_数据库字段为空对应java代码_02

SQL〉select emp.empno, emp.ename, emp.deptno, dept.deptno, dept.loc

  2  from emp, dept

  3  where emp.deptno = dept.deptno;

  执行过程:先从emp表中取出一个deptno然后和dept表中的deptno比较,如果比较结果相同,就将dept表中的对应的这行记录连接到emp表对应的行后面,然后再执行select操作。

 

注意:在用到多个表时使用表名作前缀来限定列;

    通过使用表前缀可以提高性能

通过表名.列名来select。

 6. 不等价连接(等值连接)

数据库字段为空对应java代码_字符串_03

SQL> select e.ename,e.sal,s.grade
  
  3  where e.sal between s.losal and s.hisal;
 
7.        组函数
Oracle常用组函数:
--AVG 平均值
--Count 统计
--Max 最大值
--Min 最小值
--Sum 合计
AVG和SUM用法:
SQL> select AVG(sal),SUM(sal)
  2  from emp
  3  where job like 'SALES%';
Max和Min的用法:
SQL> select min(hiredate),max(hiredate)
  2  from emp
  3  ;
COUNT的用法:
SQL> select count(*)/*这里可以用count(*),效率低,也可以用count(列名)*/
  2  from emp
  3  where deptno=30;
8.        Group By子句
SQL> select     列名,组函数(列名)
  2  from       表名
  3  [where     条件]
  4  [Group By  分组列]
  5  [Group By  分组列]
组函数忽略空值,可以使用NVL,NVL2,COALESCE函数处理空值
求每个部门的总工资:
SQL> select deptno, sum(sal)
  2  from emp
  3  group by deptno;
 
DEPTNO   SUM(SAL)
------ ----------
    30       9400
    20      10875
    10       8750
相同职位且经理相同的员工平均工资。
SQL> select job, mgr, avg(sal)
  2  from emp
  3  group by job,mgr
  4  order by job;
 
JOB         MGR   AVG(SAL)
--------- ----- ----------
ANALYST    7566       3000
CLERK      7698        950
CLERK      7782       1300
CLERK      7788       1100
CLERK      7902        800
MANAGER    7839 2758.33333
PRESIDENT             
SALESMAN   7698       1400
Group by子句注意问题:
--group by 子句后的列可以不在select语句中出现
--select字居中出现的非分组函数列必须在group by子句中出现
查询公司每个职位的平均工资,职位列不显示,同时结果按照平均工资排序
 
9.HAVING子句
    部门员工工资最高大于3000的部门(组函数筛选事例):
SQL> select deptno,max(sal)
  2  from emp
  3  group by deptno
  4  having max(sal)>=3000;
 
DEPTNO   MAX(SAL)
------ ----------
    20       3000
10       5000
错误的写法:
SQL> select deptno,max(sal)
  2  from emp
  3  where max(sal)>=3000
  4  group by deptno;
提示出错信息:where后不允许使用分组函数
Having不能直接使用,只能和group by一起使用,但是group by可以单独使用
 
 
10.总结select语句执行过程:
--通过from子句找到需要查询的表;
--通过where子句进行非分组函数筛选判断;
--通过group by子句完成分组操作;
--通过having子句完成组函数筛选判断;
--通过select子句选择现实的列或表达式及组函数;
--通过order by子句进行排序操作。
 
11.练习
1.查询部门平均工资在2000元以上的部门名称及平均工资:
SQL> select emp.deptno,dept.dname,avg(sal)
  2  from emp,dept
  3  where dept.deptno=emp.deptno
  4  group by emp.deptno,dept.dname
  5  having avg(sal)>=2000;
 
DEPTNO DNAME            AVG(SAL)
------ -------------- ----------
    10 ACCOUNTING     2916.66666
20 RESEARCH             2175
2.查询部门人数在4人以上的部门的部门名称及最低工资和最高工资:
SQL> select dept.dname,min(sal),max(sal)
  2  from emp,dept
  3  where emp.deptno = dept.deptno
  4  group by dept.dname
  5  having count(empno)>4;
 
DNAME            
-------------- ---------- ----------
RESEARCH              
SALES