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句的比较条件列表
WHERE 句子的逻辑条件
例子:
-- 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 ;
/*
备注:字符串和日期的值用符号(‘)括起来。
*/
-- 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 ;