首页 > 试题广场 >

如何获取emp_v和employees有相同的数据no

[编程题]如何获取emp_v和employees有相同的数据no
  • 热度指数:20089 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
存在如下的视图:
create view emp_v as select * from employees where emp_no >10005;
如何获取emp_v和employees有相同的数据?
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`));
(你能不用 select * from employees where emp_no >10005完成吗,挑战一下自己对视图的理解吧)
输出格式:
emp_no birth_date first_name last_name gender hire_date
10006 1953-04-20 Anneke Preusig F 1989-06-02
10007 1957-05-23 Tzvetan Zielinski F 1989-02-10
10008 1958-02-19 Saniya Kalloufi M 1994-09-15
10009 1952-04-19 Sumant Peac F 1985-02-18
10010 1963-06-01 Duangkaew Piveteau F 1989-08-24
10011 1953-11-07 Mary Sluis F 1990-01-22
由于视图 emp_v 的记录是从 employees 中导出的,所以要判断两者中相等的数据,只需要判断emp_no相等即可。
方法一:用 WHERE 选取二者 emp_no 相等的记录
SELECT em.* FROM employees AS em, emp_v AS ev WHERE em.emp_no = ev.emp_no
方法二:用 INTERSECT 关键字求 employees 和 emp_v 的交集
SELECT * FROM employees INTERSECT SELECT * FROM emp_v
方法三:仔细一想,emp_v的全部记录均由 employees 导出,因此可以投机取巧,直接输出 emp_v 所有记录
SELECT * FROM emp_v
【错误方法:】用以下方法直接输出 *,会得到两张表中符合条件的重复记录,因此不合题意,必须在 * 前加表名作限定
SELECT * FROM employees, emp_v WHERE employees.emp_no = emp_v.emp_no

编辑于 2017-07-24 17:18:40 回复(20)
更多回答
原谅我一开始就没读懂题目什么意思。。。
发表于 2019-02-02 22:34:52 回复(21)
select * from emp_v intersect select * from employees
intersect:求交集
发表于 2017-08-31 10:40:23 回复(0)
select * from  emp_v 
发表于 2017-07-22 11:04:17 回复(0)
因为mysql不支持intersect,但可以换成交集join
select em.* from emp_v  em join employees  e on e.emp_no=em.emp_no;
发表于 2019-07-18 15:01:48 回复(0)
自己没有理解透彻,查看别人的解读。


由于视图 emp_v 的记录是从 employees 中导出的,所以要判断两者中相等的数据,只需要判断emp_no相等即可。
方法一:用 WHERE 选取二者 emp_no 相等的记录
SELECT em.* FROM employees AS em, emp_v AS ev WHERE em.emp_no = ev.emp_no

方法二:用 INTERSECT 关键字求 employees 和 emp_v 的交集
SELECT * FROM employees INTERSECT SELECT * FROM emp_v

方法三:仔细一想,emp_v的全部记录均由 employees 导出,直接输出 emp_v 所有记录
SELECT * FROM emp_v

编辑于 2018-11-06 14:21:17 回复(0)
-- 视图就是特殊表
select * from emp_v;
发表于 2020-07-20 11:16:08 回复(0)
select * from employees
where emp_no in (select emp_no from emp_v)
发表于 2019-12-04 11:16:54 回复(0)
select * from emp_v;
解题思路:视图和表的区别在于“是否保存了实际的数据” ,在编写select语句时,不需要特别在意表和视图有什么不同,可以直接使用视图作为表进行查询 。
发表于 2019-12-01 09:52:03 回复(0)
select *
from employees natural join emp_v 
注意:使用自然连接,可以去掉重复的同名属性
发表于 2019-11-14 11:07:24 回复(0)
select * from emp_v where exists(select * from employees);
发表于 2018-11-06 11:51:38 回复(0)
select * from emp_v;
居然通过
发表于 2020-08-10 16:24:50 回复(0)
select * from emp_v这是啥题???
发表于 2020-08-01 18:39:36 回复(0)
视图和表。

      1、视图是已经编译好的sql语句。而表不是   

      2、视图没有实际的物理记录。而表有。
      3、表是内容,视图是窗口
      4、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时四对它进行修改,但视图只能有创建的语句来修改
      5、表是内模式,试图是外模式
      6、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
      7、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。 

      8、视图的建立和删除只影响视图本身,不影响对应的基本表。

      9、不能对视图进行update或者insert操作。


select * from employees where emp_no in (select emp_no from emp_v)


发表于 2020-07-07 10:00:42 回复(0)
看来各位数据库基础掌握都不错,正确率这么高,刚开始那道题,内心很复杂,一方面确实没懂题干意思,其次,看到正确率这么高,不用想那么复杂,一顿操作猛如虎,正确了,差点不敢相信.
SELECT *
FROM emp_v;

发表于 2020-06-19 10:23:48 回复(0)
我有点不理解这道题的意义,视图不就是从数据表中的生成的吗?
视图的所有的数据都是来自数据表中的。所以视图永远都是被包含于 数据表的吧。
直接就 查询视图不就完事了?
select * from emp_v; 

发表于 2020-06-07 11:39:06 回复(0)
SELECT * FROM emp_v
视图emp_v是表employees的子集,
两者的交集等于emp_v


编辑于 2020-06-05 15:46:21 回复(0)
链接:https://www.nowcoder.com/questionTerminal/2435cc7b43c94d3b88ffbcfadc0241de?f=discussion
来源:牛客网
由于视图 emp_v 的记录是从 employees 中导出的,所以要判断两者中相等的数据,只需要判断emp_no相等即可。
方法一:用 WHERE 选取二者 emp_no 相等的记录
1
SELECT em.* FROM employees AS em, emp_v AS ev WHERE em.emp_no = ev.emp_no

【错误方法:】用以下方法直接输出 *,会得到两张表中符合条件的重复记录,因此不合题意,必须在 * 前加表名作限定
1
SELECT * FROM employees, emp_v WHERE employees.emp_no = emp_v.emp_no
发表于 2020-06-02 20:55:00 回复(0)
第一次的写法是:
SELECT * FROM employees, emp_v WHERE employees.emp_no = emp_v.emp_no
是错误的,会得到两张表中符合条件的重复记录,因此不合题意,必须在 * 前加表名作限定
正确的是: 
select emp_v.*  或者 select e.* 都可以
1
select emp_v.* from emp_v, employees e where emp_v.emp_no = e.emp_no
发表于 2020-06-01 09:56:52 回复(0)
u1s1,就这题我都错了
发表于 2020-05-13 11:07:58 回复(0)

问题信息

难度:
48条回答 13138浏览

热门推荐

通过挑战的用户