zoukankan      html  css  js  c++  java
  • 【sql】牛客网练习题 (共 61 题)

    【1】查找最晚入职员工的所有信息

    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`));
    题解:
    1 select * from employees order by hire_date desc limit 1;
     
     【2】查找入职员工时间排名倒数第三的员工所有信息 (表同问题1)题解:limit m, n 表示从第 m 条数据(0-based)开始取 n 条数据。(或者也可以理解成 limit m, n  表示从第 m + 1 条数据开始, 取 n 条数据)
    1 select * from employees order by hire_date desc limit 2, 1;
     
     【3】查找当前薪水详情以及部门编号dept_no查找各个部门当前(to_date='9999-01-01')领导当前薪水详情以及其对应部门编号dept_no 。
    CREATE TABLE `dept_manager` (
    `dept_no` char(4) NOT NULL,
    `emp_no` int(11) NOT NULL,
    `from_date` date NOT NULL,
    `to_date` date NOT NULL,
    PRIMARY KEY (`emp_no`,`dept_no`));
    
    CREATE TABLE `salaries` (
    `emp_no` int(11) NOT NULL,
    `salary` int(11) NOT NULL,
    `from_date` date NOT NULL,
    `to_date` date NOT NULL,
    PRIMARY KEY (`emp_no`,`from_date`));
    题解:两张表 join 一下,然后选择 salaries 表作为主表join dept表。 (注意写法)。
    select s.* , d.dept_no from salaries as s join dept_manager as d on s.emp_no=d.emp_no 
    where s.to_date = '9999-01-01' and d.to_date = '9999-01-01'
     
    【4】查找所有已经分配部门的员工的last_name和first_name
    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`));
    
    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 emp.last_name, emp.first_name, dept.dept_no from employees as emp join dept_emp as dept on emp.emp_no = dept.emp_no;
     
     
     【5】查找所有员工的last_name和first_name以及对应部门编号dept_no查找所有员工的last_name和first_name以及对应部门编号dept_no,也包括展示没有分配具体部门的员工。创建表语句同第4题。题解:因为没有分配具体部门的员工也需要展示,所以,需要 left join。INNER JOIN 两边表同时有对应的数据,即任何一边缺失数据就不显示。LEFT JOIN 会读取左边数据表的全部数据,即便右边表无对应数据。RIGHT JOIN 会读取右边数据表的全部数据,即便左边表无对应数据。 注意on与where有什么区别,两个表连接时用on,在使用left  jion时,on和where条件的区别如下:1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。 2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left  join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
     
    select emp.last_name, emp.first_name, dept.dept_no from employees as emp left join dept_emp as dept on emp.emp_no = dept.emp_no;
     

    【6】查找所有员工入职时候的薪水情况

    【7】查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数t

    【8】找出所有员工当前具体的薪水salary情况

    【9】获取所有部门当前manager的当前薪水情况

    【10】获取所有非manager的员工emp_no

    【11】获取所有员工当前的manager

    【12】获取所有部门中当前员工薪水最高的相关信息

    【13】从titles表获取按照title进行分组

    【14】从titles表获取按照title进行分组,注意对于重复的emp_no进行忽略。

    【15】查找employees表所有emp_no为奇数

    【16】统计出当前各个title类型对应的员工当前薪水对应的平均工资

    【17】获取当前薪水第二多的员工的emp_no以及其对应的薪水salary

    【18】查找当前薪水排名第二多的员工编号emp_no

    【19】查找所有员工的last_name和first_name以及对应的dept_name

    20】查找员工编号emp_now为10001其自入职以来的薪水salary涨幅值growth

    【21】查找所有员工自入职以来的薪水涨幅情况

    【22】统计各个部门对应员工涨幅的次数总和

    【23】对所有员工的当前薪水按照salary进行按照1-N的排名

    【24】获取所有非manager员工当前的薪水情况

    【25】获取员工其当前的薪水比其manager当前薪水还高的相关信息

    【26】汇总各个部门当前员工的title类型的分配数目

    【27】给出每个员工每年薪水涨幅超过5000的员工编号emp_no

    【28】查找描述信息中包括robot的电影对应的分类名称以及电影数目

    【29】使用join查询方式找出没有分类的电影id以及名称

    【30】使用子查询的方式找出属于Action分类的所有电影对应的title,description

    【31】获取select

    【32】将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分

    【33】创建一个actor表,包含如下列信息

    【34】批量插入数据

    【35】批量插入数据,如果数据已经存在,请忽略,不使用replace操作

    【36】创建一个actor_name表,将actor表中的所有first_name以及last_name导入改表

    【37】对first_name创建唯一索引uniq_idx_firstname,对last_name创建普通索引idx_lastname

    【38】针对actor表创建视图actor_name_view

    【39】针对上面的salaries表emp_no字段创建索引idx_emp_no,查询emp_no为10005,

    【40】在last_update后面新增加一列名字为create_date

    【41】构造一个触发器audit_log,在向employees表中插入一条数据的时候,触发插入相关的数据到audit中

    【42】删除emp_no重复的记录,只保留最小的id对应的记录。

    【43】将所有to_date为9999-01-01的全部更新为NULL,且

    【44】将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005,其他数据保持不变,使用replace实现。

    【45】将titles_test表名修改为titles_2017

    【46】在audit表上创建外键约束,其emp_no对应employees_test表的主键id

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

    【48】将所有获取奖金的员工当前的薪水增加10%

    【49】针对库中的所有表生成select

    【50】将employees表中的所有员工的last_name和first_name通过(')连接起来。

    【51】查找字符串'10,A,B'

    【52】获取Employees中的first_name,查询按照first_name最后两个字母,按照升序进行排列

    【53】按照dept_no进行汇总,属于同一个部门的emp_no按照逗号进行连接,结果给出dept_no以及连接出的结果employees

    【54】查找排除当前最大、最小salary之后的员工的平均工资avg_salary

    【55】分页查询employees表,每5行一页,返回第2页的数据

    【56】获取所有员工的emp_no

    【57】使用含有关键字exists查找未分配具体部门的员工的所有信息。

    【58】获取employees中的行数据,且这些行也存在于emp_v中

    【59】获取有奖金的员工相关信息。

    【60】统计salary的累计和running_total

    【61】对于employees表中,给出奇数行的first_name   
  • 相关阅读:
    【ST】lab01——Junit and Eclemma
    【SPM】hw1——个人房间装修
    【ST】hw2——find the error in the follow case
    【ST】Describe an error from my past projects
    ST homework4 --- 图覆盖
    ST lab1——Junit和覆盖测试的初探
    ST work12——failure,fault,error
    ST work1——印象最深的一个bug DJI 激活时报 SDK_ACTIVE_SDK_VERSION_ERROR
    C# note 06——delegate 和 event
    C# note 05——异常处理
  • 原文地址:https://www.cnblogs.com/zhangwanying/p/9901456.html
Copyright © 2011-2022 走看看