牛客sql (2020/9/4)

1. 雇员表

雇员表EMP 结构如下
( 雇员编号 EMPNO , 姓名 ENAME , 工作岗位 JOB , 管理员编号 MGR,
受雇时间 HIREDATE , 工资 SAL , 奖金 COMM , 部门编号 DEPTNO );

显示受雇时间在2010年1月1日和2012年12月31日之间的雇员的姓名、工资、及受雇时间,并以受雇时间升序排列。

SELECT ENAME,SAL,HIREDATE FROM EMP WHERE HIREDATE BETWEEN '2010-01-01' AND '2012-12-31' ORDER BY HIREDATE;

以上代码是错误的,因为该时间范围是从 2010-01-01 的 0 时 到 2012-12-31 的 0 时, 即没有包括31号这一天。

例子
create table time (t datetime);
insert into time values(‘2018-12-31 11:23:56’);
insert into time values(‘2018-12-30 11:23:56’);

select * from time where t between ‘2018-01-01’ and ‘2018-12-31’;

#查询日期只能截止到2012-12-31 00:00:00 并没有当天的记录
#结果只有一条: 2018-12-30 11:23:56

select * from time where t between ‘2018-01-01’ and ‘2018-12-30’;
#结果:Empty set (0.00 sec)

select * from time where t between ‘2018-01-01’ and ‘2019-01-01’;
#能查到两条结果





2. 查出每个应用中总下载量最大的版本号和次数

有一个名为app的MySQL数据库表,其建表语句如下:

CREATE TABLE `app` (
`app_id` int(10) DEFAULT '0',//应用ID
`version_code` int(10) DEFAULT '0',//应用的版本号
`download_count` int(10) DEFAULT '0'//当前版本的下载量
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

当前表中数据记录如下,一条记录表示某个应用的某个版本的下载量记录:
在这里插入图片描述

首先汇总每个app每个版本的销量,需要group by app_id,version_code

select t.app_id, t.version_code, max(t.download_sum) 
from (select app_id, version_code, sum(download_count) download_sum from app
group by app_id, version_code order by download_sum desc) as t 
group by t.app_id;




3.修改表a字段b的缺省值

在这里插入图片描述

4. truncate/delete

论清理表数据的速度,truncate一般比delete更快 正确
truncate命令可以用来删除部分数据。 错
truncate只删除表的数据不删除表的结构 正确
delete能够回收高水位 错

1、处理效率:drop>truncate>delete
2、drop删除整个表;truncate删除全部记录,但不删除表;delete …where 删除部分记录
3、delete不影响所用extent,高水线保持原位置不动;truncate会将高水线复位。

——————————————————————————————

【https://www.nowcoder.com/questionTerminal/f3053b1c256e471b99a2a7da445a6d47】 来源:牛客网

因为oralce有一个HWM高水位,它是oracle的一个表使用空间最高水位线。当插入了数据以后,高水位线就会上涨,但是如果你采用delete语句删除数据的话,数据虽然被删除了,但是高水位线却没有降低,还是你刚才删除数据以前那么高的水位。除非使用truncate删除数据。那么,这条高水位线在日常的增删操作中只会上涨,不会下跌,所以数据库容量也只会上升,不会下降。而使用select语句查询数据时,数据库会扫描高水位线以下的数据块,因为高水位线没有变化,所以扫描的时间不会减少,所以才会出现使用delete删除数据以后,查询的速度还是和delete以前一样。
————————————————————————————————





5. having 子句

having子句既可包含聚合函数作用的字段也可包括普通的标量字段 正确

使用having的同时不能使用where子句 错误

having子句必须于group by 子句同时使用,不能单独使用 正确

使用having子句的作用是限定分组条件 错误

Having子句和where子句是等同的 错误

如果select语句中没有聚合函数的使用,就不能使用having子句 错误

group by的作用是限定分组条件,而having则是对group by中分出来的组进行条件筛选。 正确

用having就一定要和group by连用,且是先group by XXX 再having XXX 正确

聚合函数是 max min avg 等 正确

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值