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是先从主查询中取得一条数据,再代入到子查询中,执行一次子查询,判断子查询是否能返回结果,主查询有多少条数据,子查询就要执行多少次

posted @ 2021-02-04 20:48  小千北同学超爱写代码  阅读(95)  评论(1编辑  收藏  举报