1 -----------------------------简单查询------------------------------------------
2 /*
3 基本查询:
4 select *|{[distinct] column|expression [alias],...}
5 from table;
6 */
7
8 -------1,查询所有列
9 select * from emp;
10
11 -------2,查询特定列
12 select empno,ename,sal,job from emp;
13
14 /*
15 查询日期列:
16 日期类型是指数据类型为data 或者 timestamp的列。 日期列的默认显示格式为dd-mon-rr
17 */
18
19 alter session set nls_data_language='simplified chainese';
20 select ename,hierdate from emp;
21
22
23 create table emp
24 (
25 empno int primary key,
26 deptno int not null,
27 ename varchar2(20),
28 sal number,
29 comm number,
30 hierdate date,
31 job varchar2(20)
32 )
33
34 select sysdate from dual;
35
36 insert into emp
37 values(7719,1122,'aamith',800,200,to_date('1970-01-01','yyyy-mm-dd') ,'clerk');
38
39 alter table emp add check(sal between 800 and 5000);
40
41 insert into emp
42 values(7711,1111,'smith',800,500,to_date('1970-01-01','yyyy-mm-dd') ,'clerk');
43
44 insert into emp
45 values(7712,2222,'allen',1600,null,to_date('1973-02-02','yyyy-mm-dd'),'salensman');
46
47 insert into emp
48 values(7713,1111,'ward',1250,300,to_date('1984-08-23','yy-mm-dd'),'salensman');
49
50 insert into emp
51 values(7714,1111,'smith',800,null ,to_date('1970-01-01','yyyy-mm-dd') ,'clerk');
52
53 insert into emp
54 values(7715,2222,'alil',1600,300,to_date('1973-02-02','yyyy-mm-dd'),'salensman');
55
56 insert into emp
57 values(7715,2222,'alil',1600,300,to_date('1973-02-02','yyyy-mm-dd'),'salensman');
58
59 -------------如果把date类型改为char类型可以直接插入数据----
60
61 /*
62
63 -------------没有实现--------------------------------------------------
64
65
66 --以简体中文显示日期结果 alter session set nls_date_language='chinese';
67 --以美国英语显示日期结果 alter session set nls_date_language='american';
68 --以特定格式显示日期结果 alter session set nls_date_language='yyyy"年"mm"月"dd"日"';
69 --使用to_char函数定制日期显示格式 select ename,to_char(hiredate,'yyyy-mm-dd') from emp;
70 */
1 --1,包含重复行
2 select deptno,job from emp;
1 --2,排除重复行 __使用distinct 只对其后的一个字段有用。
2 select distinct deptno,job from emp;
1 --3,使用算术运算符(+,-,*,/)
2 select ename ,sal,sal*12 from emp;
3
4 --4,不处理null
5 select ename,sal,comm,sal+comm from emp;
6
7 --5,(1)使用nvl处理null____________vnl(string1,string2)如果string1为null,则nvl函数返回string2的值,否则返回string1的值,
8 ------------------------如果丙个参数都为null,则返回null;
9 select ename,sal,comm,sal+nvl(comm,0) from emp;
10
11 --(2)使用nvl2处理null____________NVL2(expr1,expr2,expr3)如果参数表达式expr1值为NULL,则NVL2()函数返回参数表达式expr3的值;
12 ---------------------------------如果参数表达式expr1值不为NULL,则NVL2()函数返回参数表达式expr2的值。
13 select ename,sal,comm,nvl2(comm,sal+comm,sal) from emp;
14
15 --6,(1)使用"||"操作符连接字符串
16 select ename ||''''||'s job is '||job from emp;
1718 --(2)使用函数concat连接字符串
19 select concat(concat(ename,'''s salary is '),sal) from emp;
20
21 ------------------------------------------------------------------------------------------
22 --7,(1)不使用列别名
23 select ename,sal*12 from emp;
24
25 ---(2)使用别名
26 select ename "name",sal*12 "annual salary" from emp;
27 /*
28 1.表名 别名
29 2.表名 as 别名
30 3.表名 "别名" __允许中间有空格
31 */
1 ------------------------------------------限制查询------------------------------------------
2
3 select <*,column [alias],...> from table [where condition];
4 /*
5 常规比较操作符包括=(等于)、<>(不等于)、!=(不等于)、 >=(大于等于)、 <=(小于等于)、 >(大于) <(小于)
6 <>和!=一样可以使用。
7
8 */
9
10 --1)在where子句中使用数字值
11 select ename,job,sal from emp where sal>900
12
13 select * from emp;
14
15 --2) 在where子句中使用字符值
16
17 select ename,job,sal from emp where job='clerk';
18
19 --3) 在where 子句中使用日期值
20 select ename,sal,hierdate from emp where hierdate>'01-1月-82';
21
22 /*
23 between ...and ,in ,is null
24 */
25
26 --1)在where子句中使用between...and操作符
27 select ename,sal,job,deptno from emp
28 where sal between 800 and 2500;
29
30 --2) 在where 子句中使用in操作符
31
32 select ename,sal,job from emp where job in('clerk','salensman');
33
34 --3) 在where子句中使用is null操作符
35
36 select ename from emp where comm is null;
37
38 --4) 在where子句中使用like操作符
39
40 ----(1)使用通配符%
41 select ename,sal from emp where ename like 's%';
42
43 ----(2)使用通配符_和%
44 select ename,sal from emp where ename like '_a%';
45
46 -----(3)处理字符值包含_或者%的模糊查询
47
48 select ename,sal from emp where ename like '%a_%' escape 'l';
49
50 ----------------------------------------------------------------------------
51 /*
52 逻辑操作符:and ,or ,not
53 and操作符用于指定同时满足两个条件
54 or 操作用于指定满足多个条件的任一条件即可
55 not 用于指定相反条件
56 从高到底的优先级顺序:not , and , or
57 */
58
59 ---1)在where子句中使用and 操作符
60 select ename,sal,job,deptno from emp
61 where deptno=1111 and job='clerk';
62
63 ---2)在where 子句中使用or 操作符
64 select ename,sal,job,deptno from emp
65 where sal>800 or job = 'salensman';
66
67 ---3)在where子句中使用not 操作符
68 select ename,sal,comm,deptno from emp
69 where comm is not null;
70
71 ---4)在where子句中混合使用逻辑操作符
72
73 select ename,sal,job from emp where (job='clerk' or job='salensman')
74 and sal between 1000 and 3000;
75
76 ------------------------排序数据--------------------------------------------------
77 /*
78 格式:
79 select <*,column,...> from table[where condition(s)]
80 [order by column [asc|desc]];
81 order by 子句用于指定排序列,
82 asc用于指定升序排列(默认升序),
83 desc用于指定降序排列
84 */
85
86 --1)单列升序排序
87 select ename,sal from emp order by sal asc;
88
89 --2) 单列降序
90 select ename,sal from emp order by sal desc;
91
92 --3) 使用列表名排序
93 select ename,sal*12 年收入 from emp order by 年收入 desc;
94
95 --4)使用非选择列表列排序
96 select ename from emp order by sal desc;
97
98 --5)多列排序
99 select ename,deptno,sal from emp
100 order by deptno asc,sal desc;