oracle 开发 第02章 查询

2016-01-05

目录

01.选择列 SELECT
02.选择行 WHERE
03.行标识符 rowid
04.行号 rownum
05.算术运算 +、-、*、/
06.日期运算 to_date('2015-10-01', 'YYYY-MM-DD')
07.列运算
08.列别名
09.连接操作符 |
10.空值 NULL
11.去重复列 DISTINCT
12.比较运算符 >、>=、=、<、<=、<>
13.LIKE运算符
14.IN运算符
15.BETWEEN运算符
16.逻辑运算符 AND、OR
17.ORDER BY 排序
18.内连接 INNER JOIN
19.表别名
20.笛卡尔积
21.等值连接
22.不等连接
23.左外连接 LEFT OUTER JOIN
24.右外连接 RIGHT OUTER JOIN
25.自连接
26.左外连接和自连接
27.内连接
28.内连接和不等连接
29.多表内连接

01.选择列 SELECT

select customer_id,first_name,last_name,dob,phone from customers;
select * from customers;

02.选择行 WHERE

select * from customers where customer_id =2;

03.行标识符 rowid

select rowid,customer_id from customers;

04.行号 rownum

select rownum,customer_id,first_name,last_name from customers;
select rownum,customer_id,first_name,last_name from customers where customer_id = 3;

05.算术运算 +、-、*、/

select 2*6 from dual;
select 10*12/3-1 from dual;
select 10*(12/3-1) from dual;

06.日期运算 to_date('2015-10-01', 'YYYY-MM-DD')

select to_date('2012/7/25','yyyy/mm/dd') + 1 from dual;
select * from dual;
select to_date('2012/8/2','yyyy/mm/dd') - 3 from dual;

07.列运算

select name,price + 2 from products;
select name,price*3 +1 from products;

08.列别名

select price*2 double_price from products;
select price*2 "double price" from products;
select 10*(12/3-1) as "computation" from dual;

09.连接操作符 |

select first_name||' '||last_name as "customers name" from customers;

10.空值 NULL

select * from customers;
select customer_id,first_name,last_name,dob from customers where dob is null;
select customer_id,first_name,last_name,phone from customers where phone is null;
select customer_id,first_name,last_name,nvl(phone,'unkown phone number') as phone_number from customers;
select customer_id,first_name,last_name,nvl(dob,to_date('2000/01/01')) as dob from customers;

11.去重复列 DISTINCT

select customer_id from purchases;
select distinct customer_id from purchases;

12.比较运算符 >、>=、=、<、<=、<>

select * from customers where customer_id <> 2;
select product_id,name from products where product_id < 8;
select rownum,product_id,name from products where rownum <= 3;
select * from customers where customer_id > any(2,3,4);
select * from customers where customer_id > all(2,3,4);

13.LIKE运算符

select * from customers where first_name like '_o%';            --下划线匹配一个字符,百分号匹配任意多个字符
select * from customers where first_name not like '_o%';
select name from promotions where name like '%\%%' escape '';  --是转义字符,告诉数据库如何区分要搜索的字符和通配符

14.IN运算符

select * from customers where customer_id in (2,3,5);
select * from customers where customer_id not in (2,3,5);
select * from customers where customer_id not in (2,3,5,null);    --列表中包含null值时,not in 不返回值

15.BETWEEN运算符

select * from customers where customer_id between 1 and 3;        --区间是闭区间
select * from customers where customer_id not between 1 and 3;    --not between检索2个开区间

16.逻辑运算符 AND、OR

select *
  from customers
 where dob > to_date('1970/01/01', 'yyyy/mm/dd')
   and customer_id > 3;

select *
  from customers
 where dob > to_date('1970/01/01', 'yyyy/mm/dd')
    or customer_id > 3;

select *
  from customers
 where dob > to_date('1970/01/01', 'yyyy/mm/dd')
    or customer_id < 2
   and phone like '%1211'; --比较优于and,and优先于or

select *
  from customers
 where dob > to_date('1970/01/01', 'yyyy/mm/dd')
    or (customer_id < 2 and phone like '%1211');

17.ORDER BY 排序

select * from customers order by last_name;            --默认升序
select * from customers order by first_name asc,last_name desc;
select customer_id,first_name,last_name from customers order by 1;    --根据列的位置序号排序

18.内连接 INNER JOIN

select name, product_type_id from products where product_id = 3;
select name from product_types where product_type_id = 2;

select products.name, product_types.name
  from products, product_types
 where products.product_type_id = product_types.product_type_id
   and products.product_id = 3; --查询product_id为3的产品的名称及类型

select products.name, product_types.name
  from products, product_types
 where products.product_type_id = product_types.product_type_id
 order by products.name; --查询所有产品的名称及类型

19.表别名

select p.name, pt.name
  from products p, product_types pt
 where p.product_type_id = pt.product_type_id
 order by p.name;

20.笛卡尔积

select pt.product_type_id,p.product_id from product_types pt,products p;

21.等值连接

select c.first_name, c.last_name, p.name as prodcut, pt.name as type
  from customers c, purchases pr, products p, product_types pt
 where c.customer_id = pr.customer_id
   and p.product_id = pr.product_id
   and p.product_type_id = pt.product_type_id
 order by p.name; --查询顾客购买信息

22.不等连接

select * from salary_grades;    --查询员工工资等级
select * from employees;        --查询员工工资
select e.first_name,e.last_name,e.title,e.salary,sg.salary_grade_id
from employees e,salary_grades sg
where e.salary between sg.low_salary and sg.high_salary
order by salary_grade_id;        --查询员工的工资和工资等级

23.左外连接 LEFT OUTER JOIN

select p.name, pt.name
  from products p, product_types pt
 where p.product_type_id = pt.product_type_id(+)
 order by p.name;

select p.name, pt.name
  from products p
  left outer join product_types pt
    on p.product_type_id = pt.product_type_id
 order by p.name; --SQL/92标准

select p.name, pt.name
  from products p
  left outer join product_types pt
 using (product_type_id)
 order by p.name; --SQL/92标准

24.右外连接 RIGHT OUTER JOIN

select p.name, pt.name
  from products p, product_types pt
 where p.product_type_id(+) = pt.product_type_id
 order by p.name;

select p.name, pt.name
  from products p
 right outer join product_types pt
    on p.product_type_id = pt.product_type_id
 order by p.name; --SQL/92标准

select p.name, pt.name
  from products p
 right outer join product_types pt
 using (product_type_id)
 order by p.name; --SQL/92标准

25.自连接

select * from employees;

select w.first_name || ' ' || w.last_name || 'works for ' || m.first_name || ' ' ||
       m.last_name
  from employees w, employees m
 where w.manager_id = m.employee_id
 order by w.first_name; --查询每个雇员及其管理者的名字

26.左外连接和自连接

select w.last_name || 'works for ' || nvl(m.last_name, 'the shareholders')
  from employees w, employees m
 where w.manager_id = m.employee_id(+)
 order by w.last_name; --查询每个雇员及其管理者名字,包括CEO

27.内连接

select p.name, pt.name
  from products p, product_types pt
 where p.product_type_id = pt.product_type_id
 order by p.name; --where子句,SQL/86标准

select p.name, pt.name
  from products p
 inner join product_types pt
    on p.product_type_id = pt.product_type_id
 order by p.name; --join子句,SQL/92标准

select p.name, pt.name
  from products p
 inner join product_types pt
 using (product_type_id)
 order by p.name; --using子句,等值连接,且连接列同名

select p.name, pt.name, product_type_id
  from products p
 inner join product_types pt
 using (product_type_id)
 order by p.name; --using子句引用列,不加表名或别名

28.内连接和不等连接

select e.first_name, e.last_name, e.title, e.salary, sg.salary_grade_id
  from employees e, salary_grades sg
 where e.salary between sg.low_salary and sg.high_salary
 order by salary_grade_id;

select e.first_name, e.last_name, e.title, e.salary, sg.salary_grade_id
  from employees e
 inner join salary_grades sg
    on e.salary between sg.low_salary and sg.high_salary
 order by salary_grade_id;

29.多表内连接

select c.first_name, c.last_name, p.name as prodcut, pt.name as type
  from customers c, purchases pr, products p, product_types pt
 where c.customer_id = pr.customer_id
   and p.product_id = pr.product_id
   and p.product_type_id = pt.product_type_id
 order by p.name; --where子句,SQL/86标准

select c.first_name, c.last_name, p.name as prodcut, pt.name as type
  from customers c
 inner join purchases pr
 using (customer_id)
 inner join products p
 using (product_id)
 inner join product_types pt
 using (product_type_id)
 order by p.name; --join子句,SQL/92标准

【参考资料】

[1] Jason Price.精通Oracle Database 12c SQL&PLSQL编程(第3版).[M].北京:清华大学出版社,2014

原文地址:https://www.cnblogs.com/cenliang/p/5102884.html