zoukankan      html  css  js  c++  java
  • exists 和 in

    本题可以用EXISTS和IN两种方法:
     

    使用含有关键字exists查找未分配具体部门的员工的所有信息。
    CREATE TABLE `employees` (
    `emp_no` int(11) NOT NULL,
    `birth_date` date NOT NULL,
    `first_name` varchar(14) NOT NULL,
    `last_name` varchar(16) NOT NULL,
    `gender` char(1) NOT NULL,
    `hire_date` date NOT NULL,
    PRIMARY KEY (`emp_no`));
    CREATE TABLE `dept_emp` (
    `emp_no` int(11) NOT NULL,
    `dept_no` char(4) NOT NULL,
    `from_date` date NOT NULL,
    `to_date` date NOT NULL,
    PRIMARY KEY (`emp_no`,`dept_no`));

    /* 1. EXISTS */
    SELECT *
    FROM employees
    WHERE NOT EXISTS (SELECT emp_no
                     FROM dept_emp
                     WHERE employees.emp_no = dept_emp.emp_no);

    /* 2. IN */
    SELECT *
    FROM employees
    WHERE emp_no NOT IN (SELECT emp_no
                        FROM dept_emp);

    /*
        1.什么时候用EXISTS,什么时候用IN?
            主表为employees,从表为dept_emp,在主表和从表都对关联的列emp_no建立索引的前提下:
                当主表比从表大时,IN查询的效率较高;
                当从表比主表大时,EXISTS查询的效率较高;
            原因如下:
                in是先执行子查询,得到一个结果集,将结果集代入外层谓词条件执行主查询,子查询只需要执行一次
                exists是先从主查询中取得一条数据,再代入到子查询中,执行一次子查询,判断子查询是否能返回结果,主查询有多少条数据,子查询就要执行多少次

  • 相关阅读:
    软考相关试题
    qt中的toUtf8, toLatin1, Local8bit, toUcs4(转)
    qt的中文乱码问题
    《左耳听风》-ARTS-打卡记录-第八周
    杂题
    图论
    基础数据结构
    整除
    同余
    常用数学
  • 原文地址:https://www.cnblogs.com/liuxiangyan/p/14374923.html
Copyright © 2011-2022 走看看