精华内容
下载资源
问答
  • sql 单行多行子查询

    2019-09-20 22:22:44
    单行多行子查询 单行多行子查询 --子查询(单行子查询,多行子查询) --查询比"CLARK"工资高的员工的信息? --[1]'CLARK'的工资是多少? SELECT SAL FROM EMP WHERE ENAME ='CLARK'; --2450 --[2...

    单行和多行子查询

    单行和多行子查询

    --子查询(单行子查询,多行子查询)
    --查询比"CLARK"工资高的员工的信息?
      --[1]'CLARK'的工资是多少?
      SELECT SAL FROM EMP WHERE ENAME ='CLARK';   --2450
      
      --[2]比2450高的员工信息
      SELECT * FROM EMP WHERE SAL >2450;  
      
    ----子查询:
    --将一个查询的结果作为另外一个查询的条件来使用 
     SELECT * FROM EMP WHERE SAL >(SELECT SAL FROM EMP WHERE ENAME ='CLARK');
          
        语法:
        SELECT 字段列名 FROM 表名
        WHERE 条件 比较符 (SELECT * FROM 表名);
                 
    -- 特点:
        --子查询在主查询前执行一次
        --主查询使用子查询的结果
            
    --【1】子查询可以作为另外的一个查询的条件来使用
        --查询工资高于平均工资的雇员的名字和工资
        --[1]平均工资
            SELECT AVG (SAL) FROM EMP;
            
            SELECT ENAME ,SAL 
            FROM EMP 
            WHERE SAL >( SELECT AVG (SAL) FROM EMP)
            ORDER BY SAL;
                          
    --查询和SCOTT同一部门且比他工资低的雇员的名字和工资
        --'SCOTT'在哪个部门?
        SELECT DEPTNO  FROM EMP WHERE ENAME ='SCOTT';   --20
        --'SCOTT'的工资?
        SELECT SAL FROM EMP WHERE ENAME ='SCOTT';   --3000
                          
        SELECT ENAME,SAL
        FROM EMP 
        WHERE DEPTNO = ( SELECT DEPTNO  FROM EMP WHERE ENAME ='SCOTT')
        AND SAL<(SELECT SAL FROM EMP WHERE ENAME ='SCOTT');   
                   
        --注意:子查询的字段不能多于一个,只能有一个
                  
        --【2】子查询可以作为insert语句的值来使用
        --今天新入职一个员工,与'SCOTT'同一个部门
        INSERT INTO EMP (EMPNO,ENAME,DEPTNO,HIREDATE)
        VALUES
        (1001,'码上成功',
        (SELECT DEPTNO  FROM EMP WHERE ENAME ='SCOTT'),SYSDATE);
                   
        SELECT * FROM emp;
                   
        --【3】子查询可以作为update的条件或修改的值来使用
        --将 ‘新员工’ 的工作修改为与‘SMITH’的工作相同
        --[1]smith的工作
        SELECT job FROM EMP WHERE ENAME = 'SMITH';
                   
        UPDATE EMP 
        SET JOB =( SELECT job FROM EMP WHERE ENAME = 'SMITH') 
        WHERE ENAME = '成功';
                   
        --将比FORD工资低的员工都加1000块钱
        --[1]'FORD'的工资是
        SELECT SAL FROM EMP WHERE  ENAME = 'FORD';
                   
        UPDATE EMP SET SAL =SAL+1000
        WHERE SAL<(SELECT SAL FROM EMP WHERE  ENAME = 'FORD');
        SELECT * FROM EMP;
                   
        --【4】子查询可以作为delete的条件使用
        --比FORD工资高的都删除
        DELETE EMP 
        WHERE SAL >(SELECT SAL FROM EMP WHERE  ENAME = 'FORD'); 
                   
                   
        --【5】子查询的结果可以作为一个表来使用
        SELECT EMPNO AS 经理编号,ENAME AS 经理姓名 FROM EMP; 
        --查询员工的编号,姓名,经理姓名
                    
        SELECT E.EMPNO 员工编号,E.ENAME 员工姓名 ,M.经理姓名
        FROM EMP E,( SELECT EMPNO AS 经理编号,ENAME AS 经理姓名 FROM EMP) M
        WHERE E.MGR = M.经理编号(+);     --92标准
                    
        SELECT E.EMPNO 员工编号,E.ENAME 员工姓名 ,M.经理姓名
        FROM EMP E LEFT JOIN 
        ( SELECT EMPNO AS 经理编号,ENAME AS 经理姓名 FROM EMP) M
        ON E.MGR = M.经理编号;      --99
    
    --多行子查询
    --子查询的结果返回是 多行数据
        --all:和子查询返回的所有值比较
        --any:和子查询返回的任意一个值比较
        --in :等于列表中的任何一个
    
    --查询工资低于任何一个“CLERK”岗位的工资的雇员信息。
        --查询CLERK这个职位的工资是多少?   1300  
        SELECT SAL FROM EMP WHERE JOB = 'CLERK';
             
        SELECT MAX(SAL) FROM EMP WHERE JOB = 'CLERK';
             
        SELECT * FROM EMP 
        WHERE SAL <(SELECT MAX(SAL) FROM EMP WHERE JOB = 'CLERK');
             
        SELECT * FROM emp;
        SELECT * FROM EMP 
        WHERE SAL < ANY (SELECT SAL FROM EMP WHERE JOB = 'CLERK');
           
    --查询工资比所有的'SALESMAN'职位都高的雇员的编号,名字和工资
        --[1]'SALESMAN'工资都是多少?
        SELECT SAL FROM EMP WHERE JOB = 'SALESMAN';
           
        SELECT EMPNO,ENAME,SAL 
        FROM EMP 
        WHERE SAL >ALL (SELECT SAL FROM EMP WHERE JOB = 'SALESMAN') ;
           
           
    --查询部门20中的职务同部门10的雇员一样的雇员信息.
        --[2]部门10是什么职务
        SELECT JOB FROM EMP WHERE DEPTNO = 10;
           
        SELECT * FROM EMP 
        WHERE JOB IN(SELECT JOB FROM EMP WHERE DEPTNO = 10)
        AND DEPTNO = 20;
           
    --查询在雇员中那些是经理人
    --查询经理人的编号
           
           
        --查询每个部门平均薪水的等级
           
           
    --小结:
    --[1]多表连接查询  --92标准
        --等值连接查询    -->两个表之间,存在主外键关系
        --非等值连接       -->两个表之间没有直接关系    >= ,<= .....
        --以上两个查询,参与查询的表是平级关系
            
        --左外连接,右外连接  --参与查询的两个表之间有主次之分
            
            
    --[2]多表连接查询--99标准
        --交叉连接  croos join -->笛卡尔积
        --自然连接   natural join
        -->相当于等值连接(前提是两个参与表中有同名列,要求同名列类型完全一致)
        --using连接   
        -->参与查询的两个表中多个同名列,使用using制定使用特定的列进行连接
        --inner join ....on...where  --等值连接
        --左外链接   left join 
        --右外连接   right join 
        --全连接  full join 
             
    --[3] 单行子查询
        --子查询的结果是单行单列    
        --使用>=,<=,=,<,>,<> 进行where后的条件判断
              
    --[4]多行子查询    
        --子查询的结果是多行单列的
        --使用 any :任意一个 ,  all(全部),  in(等值)
    

     

    转载于:https://www.cnblogs.com/SacredOdysseyHD/p/9063065.html

    展开全文
  • 单行多行子查询

    千次阅读 2007-12-16 20:30:00
    子查询可以返回的行数和列...多行子查询 示例数据库中的两个表与财务结果有关。fin_code 表是一个较小的表,保存财务数据及其含义的不同代码:若要列出 fin_data 表中的收入项,请键入以下语句:SELECT *FROM fin_data
    子查询可以返回的行数和列数具有约束。如果您使用 IN ANY ALL ,则子查询可以返回多个行,但只返回一个列。如果您使用其它运算符,则子查询必须返回单个值。
    示例数据库中的两个表与财务结果有关。 fin_code 表是一个较小的表,保存财务数据及其含义的不同代码:
    若要列出 fin_data 表中的收入项,请键入以下语句:
    SELECT *
    FROM fin_data
    WHERE fin_data.code IN
        (   SELECT fin_code.code
            FROM fin_code
            WHERE type = 'revenue' )
    year
    quarter
    code
    amount
    1999
    Q1
    r1
    1023
    1999
    Q2
    r1
    2033
    1999
    Q3
    r1
    2998
    1999
    Q4
    r1
    3014
    2000
    Q1
    r1
    3114
    本示例使用限定符清楚地标识每个引用中的 code 列所属的表。在这个特殊示例中,限定符可能已被省略。
    另外两个关键字( ANY ALL )可以用作运算符的限定符以允许它们处理多个行。
    以下查询与上面的成功查询相同:
    SELECT *
    FROM fin_data
    WHERE fin_data.code = ANY
       (   SELECT fin_code.code
           FROM fin_code
           WHERE type = 'revenue' )
    =ANY 条件与 IN 条件相同,但 ANY 还可以和不等式(如 < > )一起使用,从而更灵活地使用子查询。
    ALL 关键字与单词 ANY 相似。例如,以下查询列出非收入财务数据:
    SELECT *
    FROM fin_data
    WHERE fin_data.code <> ALL
       (   SELECT fin_code.code
           FROM fin_code
           WHERE type = 'revenue' )
    这与下面使用 NOT IN 的命令等同:
    SELECT *
    FROM fin_data
    WHERE fin_data.code NOT IN
       (   SELECT fin_code.code
           FROM fin_code
           WHERE type = 'revenue' )
    通常,子查询结果集限制为单个列。以下示例没有意义,这是因为 Adaptive Server Anywhere 不知道将 fin_code 中的哪个列与 fin_data.code 列比较。
    -- this query is incorrect
    SELECT *
    FROM fin_data
    WHERE fin_data.code IN
       (   SELECT fin_code.code, fin_code.type
           FROM fin_code
           WHERE type = 'revenue' )
    使用 IN 条件的子查询可以返回一组行,而使用比较运算符的子查询则只能返回一行。例如,由于子查询返回两行,所以以下命令导致一个错误:
    -- this query is incorrect
    SELECT *
    FROM fin_data
    WHERE fin_data.code =
       (   SELECT fin_code.code
           FROM fin_code
           WHERE type = 'revenue' )
     
    展开全文
  • #--单行子查询练习 #--1.显示工资比’Allan’(first_name)高的所有员工的姓名和工资 #--第一步 查询Allan的工资 SELECT e.salary FROM employees e WHERE e.first_name LIKE 'Allan' #--tb1 #--第二步 where子查询 ...

    MySQL数据库表:  employees库表测试试数据

    #--
    #--单行子查询练习
    #--1.显示工资比’Allan’(first_name)高的所有员工的姓名和工资
    #--第一步 查询Allan的工资
    SELECT e.salary FROM employees e WHERE e.first_name LIKE 'Allan' #--tb1
    #--第二步 where子查询 
    select salary from employees where salary > (tb1)
    #--第三步 查询比Allan的工资9000高的所有员工
    SELECT e2.first_name, e2.salary FROM employees e2 
    WHERE e2.salary>(SELECT e.salary FROM employees e WHERE e.first_name LIKE 'Allan' )
    
    #--子查询
    #--2.查询最低工资大于50号部门最低工资的部门id和其最低工资
    #--第一步 查询50号部门的最低工资
    (select min(salary) from employees where department_id = 50) #--tb1
    #--第二步 按部门分组,查询各部门最低工资> tb1
    select department_id,min(salary) from employees  group by department_id
    #--第三步 查询各部门最低工资> tb1
    select department_id,min(salary) from employees 
    group by department_id 
    having min(salary) > (select min(salary) from employees where department_id = 50);
    
    #--子查询--
    #--2.查询工资大于本部门平均工资的员工基本信息--不能在select中显示WHERE子查询的值
    #--第一步 查询适各部门平均工资
    SELECT AVG(	e.SALARY) FROM employees e GROUP BY e.DEPARTMENT_ID ;
    #--第二步 在上一步的基础上查询部门号60所在部门平均工资
    SELECT AVG(	e2.SALARY) FROM employees e2 WHERE e2.DEPARTMENT_ID=60;
    #--第三下 查询工资大于本部门平均工资的员工信息
    SELECT e1.EMPLOYEE_ID, e1.DEPARTMENT_ID, e1.SALARY FROM employees e1
    WHERE e1.SALARY > (select avg(e2.salary)
                   from employees e2
    								WHERE e2.DEPARTMENT_ID=e1.DEPARTMENT_ID
                   )
    
    #--3.查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资
    #--group by e1.department_id 有点多余
    select e1.employee_id, e1.last_name, e1.salary
     from employees e1
     where 0 < ( select avg(e2.salary) AS avgSalaryav
                   from employees e2
                   where e1.department_id = e2.department_id
                   group by e1.department_id) 
    
    
    #----4.显示与30号部门first_name为’Guy’员工工资相同的员工姓名和工资
    #--第一步 查询30号部门的 first_name为'Guy'的员工的工资 --tb1 2600
    SELECT e.salary FROM employees e WHERE e.DEPARTMENT_ID = 30 AND e.first_name LIKE 'Guy'
    #--第二步 查询工资=tb1.salary的员工姓名和工资
    SELECT e2.first_name,e2.salary FROM employees e2 WHERE e2.salary=tb1.salary
    #--第三步 整合
    SELECT e2.first_name, e2.salary FROM employees e2 
    WHERE e2.salary = (SELECT e.salary FROM employees e WHERE e.DEPARTMENT_ID = 30 AND e.first_name LIKE 'Guy')
    
    #----5.查询所有工资高于平均工资(平均工资包括所有员工)的销售人员('SA_REP')
    #--第一步 查询所有员工的平均工资 --tb1
    SELECT AVG(e.salary) FROM employees e
    #--第二步 查询岗位job_id 是'SA_REP' 且 工资高于tb1.salary
    SELECT * FROM employees e2 WHERE job_id='SA_REP' AND e2.salary>(tb1.salary)
    #--第三步 整合
    SELECT e2.* FROM employees e2 WHERE e2.job_id='SA_REP' AND e2.salary>(SELECT AVG(e.salary) FROM employees e )
    
    #--6.查询各个职位员工工资大于平均工资(平均工资包括所有员工)的人数和员工职位 
    #--第一步 查询所有员工的平均工资 --tb1
    SELECT AVG(e.salary) avgsalary FROM employees e
    #--第二步 查询各个职位job_id的员工工资>tb1.salary 
    SELECT * FROM employees as e2 WHERE e2.salary>e.avgsalary GROUP BY e2.job_id
    #--第三步 
    SELECT e2.job_id,COUNT(1) FROM employees as e2 WHERE e2.salary>(
    SELECT AVG(e.salary) avgsalary FROM employees e
    ) GROUP BY e2.job_id
    
    
    #--多行子查询 
    #--1.返回其它部门中比job_id为‘IT_PROG’部门任一工资低的员工的员工号、姓名、job_id 以及salary
    select last_name,salary,job_id from employees 
    where salary < any (select salary from employees where job_id='IT_PROG') 
    and job_id <> 'IT_PROG';
    
    

    2018-02-10

    展开全文
  • 单行多行子查询

    千次阅读 2006-06-02 23:55:00
    子查询可以返回的行数和列数...多行子查询 示例数据库中的两个表与财务结果有关。fin_code 表是一个较小的表,保存财务数据及其含义的不同代码:若要列出 fin_data 表中的收入项,请键入以下语句:SELECT *FROM fin_da


    子查询可以返回的行数和列数具有约束。如果您使用 INANY ALL,则子查询可以返回多个行,但只返回一个列。如果您使用其它运算符,则子查询必须返回单个值。

    多行子查询 

    示例数据库中的两个表与财务结果有关。fin_code 表是一个较小的表,保存财务数据及其含义的不同代码:

    若要列出 fin_data 表中的收入项,请键入以下语句:

    SELECT *

    FROM fin_data

    WHERE fin_data.code IN

        (   SELECT fin_code.code

            FROM fin_code

            WHERE type = 'revenue' )

    year

    quarter

    code

    amount

    1999

    Q1

    r1

    1023

    1999

    Q2

    r1

    2033

    1999

    Q3

    r1

    2998

    1999

    Q4

    r1

    3014

    2000

    Q1

    r1

    3114

    本示例使用限定符清楚地标识每个引用中的 code 列所属的表。在这个特殊示例中,限定符可能已被省略。

    另外两个关键字(ANY ALL)可以用作运算符的限定符以允许它们处理多个行。

    以下查询与上面的成功查询相同:

    SELECT *

    FROM fin_data

    WHERE fin_data.code = ANY

       (   SELECT fin_code.code

           FROM fin_code

           WHERE type = 'revenue' )

    =ANY 条件与 IN 条件相同,但 ANY 还可以和不等式(如 < >)一起使用,从而更灵活地使用子查询。

    ALL 关键字与单词 ANY 相似。例如,以下查询列出非收入财务数据:

    SELECT *

    FROM fin_data

    WHERE fin_data.code <> ALL

       (   SELECT fin_code.code

           FROM fin_code

           WHERE type = 'revenue' )

    这与下面使用 NOT IN 的命令等同:

    SELECT *

    FROM fin_data

    WHERE fin_data.code NOT IN

       (   SELECT fin_code.code

           FROM fin_code

           WHERE type = 'revenue' )

    使用子查询的常见错误 

    通常,子查询结果集限制为单个列。以下示例没有意义,这是因为 Adaptive Server Anywhere 不知道将 fin_code 中的哪个列与 fin_data.code 列比较。

    -- this query is incorrect

    SELECT *

    FROM fin_data

    WHERE fin_data.code IN

       (   SELECT fin_code.code, fin_code.type

           FROM fin_code

           WHERE type = 'revenue' )

    单行子查询 

    使用 IN 条件的子查询可以返回一组行,而使用比较运算符的子查询则只能返回一行。例如,由于子查询返回两行,所以以下命令导致一个错误:

    -- this query is incorrect

    SELECT *

    FROM fin_data

    WHERE fin_data.code =

       (   SELECT fin_code.code

           FROM fin_code

           WHERE type = 'revenue' )

    展开全文
  • 单行子查询中使用单行运算符,在多行子查询中用多行运算符。 单行运算符:子查询结果只有一个:< > = <= >= != 多行子查询:子查询结果是单列多行:in , any,all 多列子查询:子查询为多列,一定要...
  • 1.连接基本语法select columns_list from table_1 innner join table_2on join_condition;eg:select e.empno,e.ename,d.dname from emp e...单行子查询 返回一行数据的子查询语句eg:在emp表中,查询出既不是最高工资...
  • 2、根据返回值的记录多少分为单行子查询和多行子查询单行子查询用单行比较符=连接;多行子查询用多行比较符in连接; 3、子查询的内容可以放在FROM后面,也可以放在WHERE后面,也可以放在HAVING后面; 4、...
  • 1 子查询知识体系,单行子查询,多行子查询
  • --子查询(内查询)在主查询之前一次执行... 单行操作符对应单行子查询,多行操作符对应多行子查询单行子查询只返回一行,使用单行比较操作符。 SELECT select_list FROM table where expr operator (select ...
  • 返回一行数据的子查询的语句,使用单行比较操作符=,>,>=,<,<=,<>等 举例: 1显示与JAMES同部门的所有其他的员工姓名、工资、部门号 Select ename,sal,deptno From emp Where deptno = ...
  • 什么是子查询? 使用子查询解决问题:谁的工资比SCOTT高? 子查询的语法 子查询(内查询)在主查询之间一次执行完成。\color{red}{子查询(内查询)在主查询之间一次执行完成。}子查询(内查询)在主查询...
  • 零基础带你学习MySQL—多行子查询(二十二) 一、什么是子查询?...多行子查询返回多行数据的子查询 使用关键字 in 四、子查询当做临时表使用 查询ecshop中各个类别中价格最高的商品 结果如下: ...
  • 单行子查询返回多行

    千次阅读 2019-01-07 16:45:14
    今天在做项目的时候,将备份back表中的数据更新到正式表中的时候,报了单行子查询返回多行的错误,后来仔细查看了备份表的子查询发现确实有多个TCX_WXQJXX_ID 的记录,所以ROWNUM&lt;2 强制取了第一条,因为...
  • 1查询工资比scott高的员工信息 A第一步:查询出scott这个员工的工资 select sal from emp where ename = 'SCOTT'; B第二步:查询出工资比scott高的员工信息 select * fromemp ...子查询的本质:...
  • 根据查询结果的行数,将其分为单行子查询,多行子查询,多列子查询 一、单行子查询 select字段1,字段2......... from表名 where字段3>(<,=,<=,>=,!=,<>) ( select字段...
  • 我有2张表 表1有NATIVE_CODE 值, 另一张里面 表2 有REG_AREACODE和它对应。 这两张表都有相同的IDN(身份证号)...当时报了 单条查询返回多行 我网上查询很多资料 要不就是 什么 加ROWN=1 要不就是 删除相同的数据啊。
  • 多条子查询返回的结果可以是一条数据,因而单行子查询也是多行子查询的一种特殊情况,所以单行子查询的“=”比较符可以替换为多行子查询的“in”比较符。但不能将多行子查询的“in”比较符替换为单行子查询的“=”...
  • 第三节课:自连接及三表联合查询 查询员工姓名,职位,薪资,上级领导姓名 select e.ename,e.job,e.sal,m.ename from emp e,emp m where e.mgr=m.empno--sql92 sql99实现: select e....
  • oracle查询:多行子查询返回多个行 1.子查询 查询嵌套,一个查询作为另一个查询的条件、表。 多行子查询通常作为另一个查询的表使用;单行子查询可以作为另一个查询的条件使用。 SELECT decode( ( SELECT nvl( a....
  • update urlnum u set num=(SELECT COUNT(*) FROM js_chat_record WHERE REFER_PAGE LIKE '%'||(select t.url from urlnum t...但是无法返回多行。之前用mysql数据库使用的concat函数,但是orcale里不会用。请高手帮忙。
  • Oracle多行子查询

    2019-04-18 09:43:28
    使用多行操作符: 操作符 含义 IN ... 等于列表中的某任意一个 ... 和子查询返回的某一个值作比较 ...(1)IN操作符使用:从多行子查询返回不止一行的子查询称为多行子查询。使用多...
  • -- 错误的写法 insert into t_b_partner_vehicle(id, partner_id, vehicle_id)(seq_t_b_partner_vehicle.nextval,121, (selectid from t_b_car_info where org_id in...-- Error 单行子查询返回多行 -- 正确...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,751
精华内容 6,700
关键字:

单行返回多行子查询