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