牛客网Sql:

1.查询最晚入职的员工信息 

select * from employees

where hire_date =(select max(hire_date) from employees)  //日期最大值就是最晚的

select * from employees  where hire_date=(select max(hire_date)  from employees);

2.查找入职员工时间排名倒数第三的员工所有信息

LIMIT m,n : 表示从第m+1条开始,取n条数据;

LIMIT n : 表示从第0条开始,取n条数据,是limit(0,n)的缩写。

ORDER BY 语句默认按照升序进行排序。

SQL语言的默认排序方式是升序,ORDER BY 子句若未显式指定升序(ASC)或降序(DESC),那么就认按默认升序排序。
例如下列语句为默认按升序排序
select * from t1 order by col1;
它与下列语句等效
select * from t1 order by col1 asc;

升序:最小的数在前面。降序:最大的数在前(从大到小排序)

select * from employees order by hire_date desc limit 2,1;  //排名倒数就是入职最晚的,就是时间最大的,所以降序取第三个

多列降序排序

SELECT prod_id, prod_price, prod_name

FROM products

ORDER BY prod_price DESC, prod_name DESC;

  每个DESC只做作用前面一个字段  ORDER BY必须在FROM之后  LIMIT必须在ORDER BY之后

  1. 查找各个部门当前(to_date='9999-01-01')领导当前薪水详情以及其对应部门编号dept_no

SELECT s.*,  d.dept_no

FROM salaries s ,  dept_manager d

 

WHERE s.to_date='9999-01-01'

 

AND d.to_date='9999-01-01'

 

AND s.emp_no = d.emp_no;

  1. 查找所有已经分配部门的员工的last_name和first_name

-- 查找所有已经分配部门的员工的last_name和first_name

SELECT e.`first_name`,e.`last_name`,d.`dept_no`

FROM dept_emp d,employees e

WHERE e.`emp_no`=d.`emp_no`

  1. 查找所有员工的last_name和first_name以及对应部门编号dept_no,也包括展示没有分配具体部门的员工

SELECT e.last_name, e.first_name, d.dept_no

FROM employees e

LEFT JOIN dept_emp d

ON e.emp_no = d.emp_no

 

INNER JOIN 两边表同时有对应的数据,即任何一边缺失数据就不显示。
LEFT JOIN 会读取左边数据表的全部数据,即便右边表无对应数据。

LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行
RIGHT JOIN 会读取右边数据表的全部数据,即便左边表无对应数据。

注意on与where有什么区别,两个表连接时用on,在使用left  jion时,on和where条件的区别如下:

1、  on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left  join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

 

  1. 查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序

SELECT e.emp_no,s.salary

FROM salaries s,employees e

WHERE e.emp_no=s.emp_no

AND e.hire_date=s.from_date  这里查询时注意,日期要相同,因为薪资表中emp_no不唯一,同一员工在涨薪的可能

ORDER BY e.emp_no DESC;

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

WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句。

HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句。

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

SELECT a.*

FROM( SELECT emp_no,COUNT(*) AS t  FROM salaries  GROUP BY emp_no) AS a

WHERE t>15

最新文章

  1. [OC] 图片平铺
  2. js/jquery获取文本框的值与改变文本框的值
  3. 封装了get post方法
  4. c++函数重载---2
  5. C++ Priority Queues(优先队列) and C++ Queues(队列)
  6. Perl 三种时间time,localtime,gmttime
  7. IPv6 tutorial 3 New features: IPsec and LAN features
  8. linux笔记2.19
  9. nyoj 21三个水杯(BFS + 栈)
  10. Android锁定EditText内容和随机生成验证码
  11. Nginx代理TCP服务
  12. 结合GET(),POST()实现一个简单、完整的服务器
  13. Javac编译时出现包不存在的报错的解决方案
  14. Android Intent 传递数据注意事项
  15. Python基础:十、用户交互
  16. SwipeBackLayout 右滑退出Activity
  17. 解决ubuntu下IntelliJ IDEA无法锁定到启动器的问题
  18. django----用户认证(auth模块)
  19. npm http-server ubuntu
  20. 05-spark streaming & kafka

热门文章

  1. 思科ISE配置专题–ISE部署方式
  2. electron-vue + element-ui构建桌面应用
  3. idea中的springboot+gradle项目报错springboot configuration annotation processor not found in classpath
  4. Git - 06. git checkout
  5. 【Vue路由系统详述】
  6. blog主题——田野(1)
  7. pthon中的基本运算
  8. ACM进阶之路
  9. 控制反转(IOC)和依赖注入(DI)
  10. Jmeter_选项_函数助手_RandomString的用法