`

复杂查询语句的使用

阅读更多
############################复杂查询语句的使用#####################################
1.查询语句的使用
使用 select语句和子查询(subquery)可以从一个或多个表,视图,实体试图中返回数据.

1.1相关子查询
可以将子查询(as subquery)或in或exists当成where的一个条件的一部分,这样的查询称为子查询
  .where中可以包含一个select语句的子查询
  .where中可以包含in,exists语句
  .最多可以嵌套16层
  .层次过多会影响性能
  [例]简单子查询实例
  查询是否有的专家既以研究所的名义来申请基金项目,又以大学系为单位申请项目
  (按规定只能以一个单位来申请)
  SQL> create table univ_subject
  2    (
  3       name                 varchar2(12) not null,
  4       per_id                number     not null,
  5      dept_name       varchar2(20)            
  6    );
  SQL> insert into univ_subject  values('gaoqianjing',1001,'信息工程系');
  SQL> insert into univ_subject  values('wangbing',1002,'物理系');
  SQL> insert into univ_subject  values('liming',1003,'化学系');
  ===============
   SQL> create table  colle_subject
  2     (
  3              colle_name    varchar2(20),
  4              per_id              number
  5     );
  SQL> insert into colle_subject values('电子研究所',1001);
  SQL>  insert into colle_subject values('物理研究所',1005);
  ================
  SQL> select name,per_id,dept_name from univ_subject where per_id in
  2    (select per_id from colle_subject);

  NAME            PER_ID   DEPT_NAME
  ------------          ---------     --------------------
  gaoqianjing  1001      信息工程系

1.2外连接
[例]外连接实例
招生中所有学生的信息放在students表中,而部分有特长的学生在另一个表中stuent_skill中同样有该学生
的信息。现在要全部列出所有学生,如果某个学生在表student_skill中就有其特长信息,并显示特长信息,如果
某个学生没有特长就显示特长问空.
SQL>  create table students
  2    (
  3       st_id    varchar2(20),
  4       name  varchar2(10),
  5       age      number(2),
  6       tol_score   number(3)
  7    ) ;
SQL>   insert into students values('973231','wangbindu',22,501);
SQL>   insert into students values('973232','zhuzhijing',21,538);
SQL>  insert into students values('973233','gaojing',21,576);
===================

SQL>  create table student_skill
  2   (
  3      st_id  varchar2(20),
  4      skill    varchar2(20)
  5  );
SQL>  insert into student_skill values('973231','篮球');
SQL>  insert into student_skill(st_id) values('973232');
SQL>  insert into student_skill values('973233','足球');
===================

SQL>   select a.* , b.skill from students a,student_skill b where a.st_id=b.st_id(+)
order by a.st_id;

ST_ID                NAME             AGE TOL_SCORE SKILL
-------------------- ---------- --------- --------- ------------------  --
973231               wangbindu         22       501        篮球
973232               zhuzhijing           21       538
973233               gaojing                21       576        足球

1.3自我连接
自我连接是在同一个表或视图内进行条件连接.
[例]自我连接实例
查询每个雇员的名字和该雇员的经理的名字:
SQL> select e1.ename||'   work for   '||e2.ename "Employees and their Managers"
  2  from  scott.emp e1,scott.emp e2 where e1.mgr=e2.empno;

Employees and their Managers
-------------------------------------------------
SMITH      work for   FORD
ALLEN     work for   BLAKE
WARD      work for   BLAKE
JONES     work for   KING
MARTIN   work for   BLAKE
BLAKE     work for   KING
CLARK     work for   KING
SCOTT      work for   JONES
TURNER  work for   BLAKE
ADAMS     work for   SCOTT
JAMES      work for   BLAKE
FORD        work for   JONES
MILLER     work for   CLARK

1.4UNION , INTERSECT及 MINUS
UNION:            可以将两个以上的表的相类似的查询结果放在一起 (union all则表示返回所有的行)
具体语法:
select ...
union[all]
select...
==========

INTERSECT:  返回两个表中相同的信息
具体语法:
select ...
intersect
select...
==========

MINUS          :  返回一个表中出现的信息
具体语法:
select ...
minus
select...
[例1]UNION操作实例
SQL> select  st_id  from students
  2  union
  3  select  st_id  from student_skill;

ST_ID
--------------------
973231
973232
973233

[例2]INTERSECT操作实例
列出有特长的学生的学号
SQL> select st_id from students
  2  intersect
  3  select st_id from student_skill;
ST_ID
--------------------
973231
973233

[例3]MINUS操作实例
列出没有特长学生的学号
select st_id from students
minus
select st_id from student_skill;
ST_ID
--------------------
973232


2.创建复杂的视图
许多应用系统有统计等功能,建议最好把这些复杂语句写成视图.下面是几个常用的视图.
2.1分组视图
[例1]简单的分组视图
SQL> create or replace view dept_tot as
  2  select a.dname dept,sum(b.sal) total_sal from scott.dept a,scott.emp b
  3  where a.deptno=b.deptno group by a.dname;

查看已建立。
SQL> select * from dept_tot;

DEPT                           TOTAL_SAL
--------------                     ---------
ACCOUNTING          8750
RESEARCH              10875
SALES                        9400

[例2]带复杂函数视图
SQL> create or replace view itemtot as
  2  select persion,sum(amount) itemtot from ledger
  3  where actiondate between
  4  to_date('01-MAR-1901','dd-mon-yyyy') and
  5  to_date('31-MAR-1901','dd-mon-yyyy')
  6  and action in('bought','raid') group by persion;

2.2合计视图
[例]合计函数视图实例
SQL> create or replace view emp_no1  as
  2  select deptno,sum(sal) 工资和,sum(comm) 总和
  3  from scott.emp group by deptno;
SQL> select * from emp_no1;
DEPTNO    工资和      总和
--------- --------- ---------
       10      8750
       20     10875
       30      9400      2200

2.3组合视图
[例]带组合函数的视图
SQL> create or replace view byitem as
  2  select l.persion persion.item, amount, 100*amount/item bypersion,100*amount/total bytotal
  3  from ledgent l,itemtotal i,total where l.persion=i.persion where l.persion=i.persion
  4  and actiondate between
  5  to_date('01-MAR-1901','dd-mon-yyyy') and
  6  to_date('31-MAR-1901','dd-mon-yyyy')
  7   and action in('bought','raid') ;

3.家族树
语法:
select column from table_name start with column=value
connect by prior 父主键=子主键

3.1排除单一性和分枝
以ORACLE中的EMP表为例
[例]从顶到底列出各雇员的信息
SQL> select lpad(' ',4*(level-1))||ename name,empno,mgr from emp start with mgr is null
  2  connect by prior empno=mgr;

NAME                                 EMPNO       MGR
---------                                  ---------           ---------
KING                                   7839           
    JONES                           7566            7839
          SCOTT                     7788            7566
                ADAMS              7876            7788

3.2遍历至根
[例1]现在要从某个雇员开始向他的上级列出该雇员的层次结构
SQL> col ename for a30;
SQL> select lpad(' ',4*(level-1))||ename ename,mgr,empno from scott.emp
  2  start with mgr=7788 connect by prior mgr=empno;
ENAME                                MGR     EMPNO
------------------------------         ---------    ---------
ADAMS                               7788      7876
    SCOTT                           7566       7788
        JONES                       7839       7566
            KING                                        7839

[例2]列出所有雇员的层次结构
SQL> select lpad(' ',4*(level-1))||ename ename,empno,mgr from scott.emp
  2  start with mgr is not null
  3  connect by empno=prior mgr;

ENAME                              EMPNO       MGR
------------------------------       ---------           ---------
SMITH                               7369          7902
    FORD                            7902         7566
        JONES                       7566        7839
            KING                    7839
ALLEN                               7499        7698
    BLAKE                           7698        7839
        KING                        7839
WARD                                7521        7698
    BLAKE                           7698        7839
        KING                        7839
JONES                               7566        7839
    KING                            7839
MARTIN                              7654        7698
    BLAKE                           7698         7839
        KING                        7839
BLAKE                               7698        7839
    KING                            7839
CLARK                               7782         7839
    KING                            7839
SCOTT                               7788         7566
    JONES                           7566        7839



      
        

           
          

分享到:
评论

相关推荐

    sql2000 复杂查询语句使用

    sql复杂查询语句 介绍一些复杂的查询语句 是学习sql2000语句的好工具

    SQLServer中复杂sql语句查询

    在SQL Server中,处理复杂SQL语句查询是数据库管理员和开发者的必备技能。这涉及到多个方面的知识,包括但不限于多表联接、索引优化、触发器应用和存储过程的编写。下面将对这些主题进行详细阐述。 首先,**多表...

    QL复杂查询语句的使用

    在 SQL 中,复杂的查询语句是数据库管理中的重要工具,用于从大型数据集中获取精确且详细的信息。这里主要讨论两种类型的复杂查询:子查询和外连接。 1. 子查询(Subquery) 子查询是一种嵌套在其他 SQL 语句中的...

    oracle 复杂查询语句的使用

    在Oracle数据库中,复杂查询语句的使用是高级SQL编程的关键技能之一,它允许开发者从一个或多个表中检索特定的数据集,同时处理更复杂的逻辑和条件。以下是从给定的部分内容中提炼出的几个重要的知识点,这些知识将...

    Ibatis复杂查询语句.doc

    - SQL语句使用了JOIN操作连接`MEMBER_POST`和`AUTH_USER`表,通过`CREATED_BY`字段关联,以便获取用户创建的帖子。 4. **IN操作符**: - `IN`操作符被广泛使用,用于检查字段值是否存在于一个列表中。比如,`a....

    复杂SQL查询语句的使用

    本篇将深入探讨如何有效地使用复杂SQL查询语句,以提高数据处理效率。 1. **子查询** 子查询是在主查询中嵌套的查询,可以用来获取满足特定条件的数据。例如,你可以用子查询找到某个部门薪水最高的员工,然后在主...

    SQL查询语句使用

    ### SQL查询语句使用 #### 一、基本概念与结构 在进行数据库操作时,**SQL(Structured Query Language)**是一种极为重要的语言工具,用于管理关系型数据库管理系统中的数据。SQL不仅能够帮助我们检索数据,还能...

    SQL查询语句使用简要(很经典)

    在实际应用中,这些查询语句可以组合使用,以满足复杂的查询需求。例如,你可以在一个查询中包含多个JOIN操作,并使用嵌套的SELECT语句来获取更复杂的数据。 总结,SQL查询语句是数据库管理的基础,熟练掌握简单的...

    常见较为复杂的查询语句,绝对实用

    在数据库管理中,查询语句是获取数据的核心工具,尤其是一些复杂的查询,它们能够帮助我们从海量数据中提取出我们需要的信息。本篇文章将详细探讨标题中提到的“常见较为复杂的查询语句”,以及如何利用这些技巧提升...

    基于ALPHA语言的复杂查询SQL语句生成.pdf

    1. 数据库复杂查询的重要性与挑战:在数据库教学中,使用SQL语言表达复杂查询是重点和难点所在。对于初学者而言,理解并掌握如何构建复杂的SQL查询语句尤为不易,因为这涉及到数据库理论的深入知识和逻辑推理能力。 ...

    SQL查询语句生成器

    SQL查询语句生成器是一种工具,它帮助用户无需手动编写复杂的SQL命令,即可自动生成所需的查询语句。这种工具在数据库应用中极为重要,尤其对于那些不熟悉SQL语法或者希望提高工作效率的用户来说,它是宝贵的资源。...

    对ElasticsearchPHP进行查询语句封装可实现链式调用方便es查询

    封装查询语句意味着将这些复杂的查询结构转换为易于理解和使用的API。 2. **链式调用**:这是一种编程设计模式,使得多个方法可以连续调用,提高代码的可读性和灵活性。在Elasticsearch-PHP中,可以通过链式调用来...

    sql中的高级查询语句

    sql中的高级查询语句是指在数据库管理系统中,用于提高查询效率和灵活性的复杂查询技术。这些技术包括Compute生成多个结果集、使用UNION连接多个结果集、嵌套查询、逻辑表达式的应用、联接查询等。 Compute生成多...

    可视化sql查询语句生成器

    可视化SQL查询语句生成器是一种高效且用户友好的工具,专为那些不熟悉或不习惯编写SQL代码的用户设计。这种工具通常具有图形用户界面(GUI),允许用户通过直观的界面来构建复杂的查询,而无需直接输入SQL命令。在...

    数据库查询语句(SQL语句)大全

    2. 存储过程:预编译的SQL语句集合,可封装复杂的业务逻辑,提高效率并降低网络流量。 六、索引与优化 1. 索引:提高查询速度的特殊数据结构,如B树索引、哈希索引等。 2. 查询优化:涉及索引选择、查询计划和性能...

    总结简单PLSQL查询语句

    本文将总结一些基本但重要的PL/SQL查询语句,包括删除操作、使用`IN`关键字、逻辑语句以及排序等。 #### 删除操作 在PL/SQL中,删除数据可以通过`DELETE`语句来实现。这个语句用于从表中移除一个或多个行。需要...

    SQL SERVER 2000查询语句

    下面将详细介绍SQL Server 2000中的几种复杂查询语句及其应用场景。 1. **联合查询(UNION)**: 联合查询用于合并两个或多个SELECT语句的结果集。只有当所有SELECT语句选择相同数量的列,并且列的数据类型兼容时...

    oracle系列教程三+oracle复杂SQL语句.doc

    本文将深入探讨Oracle中的复杂SQL语句,包括查询优化、索引、函数的使用以及如何进行行列转换和去重操作。 首先,了解SQL语句的执行顺序至关重要。在一般的查询中,如`SELECT`、`FROM`、`WHERE`,执行顺序为:先...

    SQL数据库查询语句基础文本——可复制的查询语句

    创建视图可以帮助简化复杂查询: ```sql CREATE VIEW view_name AS SELECT * FROM table_name WHERE condition; ``` 这个基础文本涵盖了SQL查询的大部分基础知识,对于初学者来说是很好的学习材料。通过实例学习...

Global site tag (gtag.js) - Google Analytics