oracle 开发学习笔记 20071011

原创 2007年10月10日 17:39:00
2007-10-11 oracle培训内容

/*
   备注:字符串和日期的值用符号(‘)括起来。
*/
-- where 句的条件为真的场合
SQL
> select * from t_department t where 1=1;

DEPT DEPTNAME                                 DEPTSITE                                                                                                                                                                                                   
---- ---------------------------------------- ----------------------------------------                                                                                                                                                                    
10   経理                                     東京                                                                                                                                                                                                        
20   研究開発                                 名古屋                                                                                                                                                                                                      
30   営業                                     大阪                                                                                                                                                                                                        
40   管理                                     東京                                                                                                                                                                                                        
-- where 句的条件为假的场合

SQL> select * from t_department t where 1=2;

レコードが選択されませんでした。

-- 查询入社日为1981年11月17号的记录
SQL
> select * from t_employee t
  
2  where t.startdate = to_date('1981-11-17','YYYY-MM-DD');

EMPNO    EMPNAME                                  POST                                     SENIOR   STARTDAT        PAY COMMISSION DEPT                                                                                                                  
-------- ---------------------------------------- ---------------------------------------- -------- -------- ---------- ---------- ----                                                                                                                  
7839     林                                       社長                                              81-11-17     900000            10                                                                                                                     




where句的比较条件列表
比较条件 说明 例子
= 相等 col = 100
!= <> ^=
不等 col != 100
>= 以上 col >= 100
<= 以下 col <= 100
> 大于 col > 100
< 小于 col < 100
BETWEEN
a  AND  b
a以上b以下的范围 col BETWEEN 100 AND
200
NOT BETWEEN
a  AND  b
a以上b以下的范围外 col NOT BETWEEN 100 AND
200
IN (list)
等于list内的任何值 col IN (10,20)
NOT IN (list)
不等于list内的任何值 col NOT IN (10,20)
IS NULL
含有NULL值 col IS NULL
IS NOT NULL
没有NULL值 col IS NOT NULL
LIKE 包含所选字符
col LIKE 'A%'
NOT LIKE
没有所选字符 col LIKE 'A%'

WHERE 句子的逻辑条件
逻辑条件 说明
NOT 否定
AND 逻辑与
OR 逻辑或
例子:

-- not

   SQL> select * from t_employee where not deptno = 10;

   -- and

SQL> select * from t_employee where deptno = 10 and post = '担当';

   -- or                                                                                      

SQL
> select * from t_employee where deptno = 10 or post = '担当';

   /*
       备注:逻辑条件的优先顺序
               1:()
               2:not
               3:and
               4:or
   */
SQL> select * from t_employee where deptno = 10
  
  or deptno = 20
  
  and post = '担当'
  
  or not post = '課長'
  
  and deptno = 30;

SQL
> select * from t_employee where (deptno = 10
  
  or deptno = 20 )
  
  and post = '担当'
  
  or not (post = '課長'
  
  and deptno = 30);

/**//*
  备注:BETWEEN AND
*/
-- **** 工资在180000以上300000以下的员工名单 ****
--
col BETWEEN a AND b
SELECT t.empname,t.pay FROM t_employee t
WHERE t.pay BETWEEN 180000 AND 300000;

-- col >= a AND col <= b
SELECT t.empname,t.pay FROM t_employee t
WHERE t.pay >= 180000 AND t.pay <= 300000;

-- **** 工资在180000以上300000以下以外的员工名单 ****
--
col NOT BETWEEN a AND b
SELECT t.empname,t.pay FROM t_employee t
WHERE t.pay NOT BETWEEN 180000 AND 300000;

-- col < a OR col > b
SELECT t.empname,t.pay FROM t_employee t
WHERE t.pay < 180000 OR t.pay > 300000;

/**//*
  备注:IN
*/
-- 担当为‘营业’、‘科长’、‘担当’的记录
--
col IN ('a','b','c')
SELECT t.empname,t.post  FROM t_employee t
WHERE t.post IN ('担当','営業','課長');

-- col = 'a' OR col ='b' OR col='c'
SELECT t.empname,t.post  FROM t_employee t
WHERE t.post = '担当' OR t.post = '営業' OR t.post =  '課長';

/**//*
  备注:NOT IN
*/
-- 担当为‘营业’、‘科长’、‘担当’以外的记录
--
col NOT IN ('a','b','c')
SELECT t.empname,t.post  FROM t_employee t
WHERE t.post NOT IN ('担当','営業','課長');

-- col != 'a' AND col !='b' AND col!='c'
SELECT t.empname,t.post  FROM t_employee t
WHERE t.post != '担当' AND t.post != '営業' AND t.post !=  '課長';

/**//*
  备注:LIKE
*/
-- **** 以‘长’字结尾的记录 ****
SELECT DISTINCT t.post FROM t_employee t
WHERE t.post LIKE '%長'

-- **** 第二个字为‘长’字的记录 ****
SELECT DISTINCT t.post FROM t_employee t
WHERE t.post LIKE '_長%'

-- **** 第二个字为‘长’字并且由两个字组成的记录 ****
SELECT DISTINCT t.post FROM t_employee t
WHERE t.post LIKE '_長'

/**//*
  备注:ESCAPE关键字经常用于使某些特殊字符,如通配符:'%','_'转义为它们原
        来的字符的意义,被定义的转义字符通常使用'',但是也可以使用其他的符号。
*/
-- **** 查询包含字符(_)的文字的场合 ****
INSERT INTO t_department VALUES('60','HEAD_OFFICE','東京');
INSERT INTO t_department VALUES('70','HEADAOFFICE','東京');

SELECT * FROM t_department t
WHERE t.deptname LIKE 'HEAD_%';

SELECT * FROM t_department t
WHERE t.deptname LIKE 'HEAD_%' ESCAPE '';

/**//*
  备注:NOT LIKE
*/

-- **** 第一个字符不是‘課’字的记录
-- col NOT LIKE 'a%'

SELECT DISTINCT t.post FROM t_employee t
WHERE t.post NOT LIKE '課%';

/**//*
  备注:排序
*/

-- **** 查询担当列为‘担当’的记录并且以部门NO升序排序
-- ASC

SELECT t.deptno,t.empname,t.pay,t.post
FROM t_employee t
WHERE t.post = '担当'
ORDER BY t.deptno;

-- DESC
SELECT t.deptno,t.empname,t.pay,t.post
FROM t_employee t
WHERE t.post = '担当'
ORDER BY t.deptno DESC;

/**//*
  备注:多个列组合排序
*/

-- **** 查找部署番号为20的记录,并且以但当列为降序、工资列为升序表示

SELECT t.deptno,t.empname,t.pay,t.post
FROM t_employee t
WHERE t.deptno = '20'
ORDER BY t.post DESC,t.pay;

-- **** 查找部署番号为20的记录,并且以但当列为降序、工资列为降序表示
SELECT t.deptno,t.empname,t.pay,t.post
FROM t_employee t
WHERE t.deptno = '20'
ORDER BY t.post DESC,t.pay DESC;

/**//*
  备注:排序其他部分
*/

-- **** 明确表示为升序的场合

SELECT t.deptno,t.empname,t.pay,t.post
FROM t_employee t
WHERE t.deptno = '20'
ORDER BY t.post DESC,t.pay ASC;

-- **** 检索列中不包含排序字段的场合
SELECT t.deptno,t.empname,t.pay,t.post,t.startdate
FROM t_employee t
WHERE t.deptno = '20'
ORDER BY t.startdate;

SELECT t.deptno,t.empname,t.pay,t.post
FROM t_employee t
WHERE t.deptno = '20'
ORDER BY t.startdate;

-- **** 指定列号排序 (t.deptno,t.pay)
SELECT t.deptno,t.empname,t.pay,t.post
FROM t_employee t
WHERE t.post IN ('担当','課長')
ORDER BY 1,3 ;

-- **** 给 工资*12 取个别名叫 Ypay 然后根据年收入升序排序
SELECT t.deptno,t.empname,t.pay * 12 Ypay
FROM t_employee t
WHERE t.post IN ('担当','課長')
ORDER BY Ypay ;
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:oracle 开发学习笔记 20071011
举报原因:
原因补充:

(最多只允许输入30个字)