zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    HTML基础
    一次由任意文件漏洞开始的渗透测试过程
    谈一谈信息泄露这件事
    浅谈任意文件下载漏洞的利用
    [原创] 一次渗透测试过程--从外网进内网
    一次绕过360+诺顿的提权过程
    漏洞挖掘高级方法
    新型勒索软件Magniber正瞄准韩国、亚太地区开展攻击
    Microsoft Edge 浏览器远程代码执行漏洞POC及细节(CVE-2017-8641)
    Office远程代码执行漏洞CVE-2017-0199复现
  • 原文地址:https://www.cnblogs.com/cenliang/p/5102884.html
Copyright © 2011-2022 走看看