牛客网sql(通过率排行6-10)

本文介绍了如何使用SQL更新特定日期,避免重复薪资展示,并按部门汇总员工信息。涉及操作包括将'9999-01-01'的to_date设为NULL,from_date设为'2001-01-01',利用DISTINCT和GROUP BY去重,以及使用GROUP_CONCAT连接部门员工。
摘要由CSDN通过智能技术生成

1.(SQL43)将所有to_date为9999-01-01的全部更新为NULL,且 from_date更新为2001-01-01

  • 表更新语句结构:UPDATE 表名 SET 字段 =WHERE 过滤条件
UPDATE titles_test
SET to_date = NULL, from_date = '2001-01-01'
WHERE to_date = '9999-01-01';

2.(SQL8)请你找出所有员工具体的薪水salary情况,对于相同的薪水只显示一次,并按照逆序显示:

  • 常规解法,使用DISTINCT和ORDER BY:
SELECT DISTINCT salary
FROM salaries
WHERE to_date='9999-01-01'
ORDER BY salary DESC
  • 也可以使用GROUP BY:按照salary进行分组
SELECT salary
FROM salaries
WHERE to_date='9999-01-01'
GROUP BY salary
ORDER BY salary DESC
  • 对于distinct与group by的使用:
    1.当对系统的性能高并且数据量大时使用group by
    2.当对系统的性能不高时或者使用数据量少时两者借口
    3.尽量使用group by

3.(SQL53)按照dept_no进行汇总,属于同一个部门的emp_no按照逗号进行连接,结果给出dept_no以及连接出的结果employees

  • 聚合函数group_concat(X,Y)
  • 其中X是要连接的字段,Y是连接时用的符号,可省略,默认为逗号
select dept_no, group_concat(emp_no)
as employees
from dept_emp
group by dept_no;

4.(SQL37)对first_name创建唯一索引uniq_idx_firstname,对last_name创建普通索引idx_lastname

1. sqlite创建单列索引语法为:

CREATE INDEX index_name
ON table_name (column_name);
  • 创建唯一索引语法为:
CREATE UNIQUE INDEX index_name
on table_name (column_name);
  • 所以使用sqlite的答案为:
CREATE UNIQUE INDEX uniq_idx_firstname on actor (first_name);
CREATE INDEX idx_lastname ON actor (last_name);

2. mysql中:

  • 添加主键
ALTER TABLE tbl_name ADD PRIMARY KEY (col_list);
// 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。
  • 添加唯一索引
ALTER TABLE tbl_name ADD UNIQUE index_name (col_list);
// 这条语句创建索引的值必须是唯一的。
  • 添加普通索引
ALTER TABLE tbl_name ADD INDEX index_name (col_list);
// 添加普通索引,索引值可出现多次。
  • 添加全文索引
ALTER TABLE tbl_name ADD FULLTEXT index_name (col_list);
// 该语句指定了索引为 FULLTEXT ,用于全文索引。
  • 所以使用MySQL的答案为:
alter table actor add unique uniq_idx_firstname(first_name);
alter table actor add index idx_lastname(last_name);

5.(SQL15)将employees表中的所有员工的last_name和first_name通过(’)连接起来。(sqlite不支持concat,请用||实现,mysql支持concat)

  • cancat()函数的用法
select concat(last_name,"'",first_name) as name
from employees
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值