zoukankan      html  css  js  c++  java
  • 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_namefirst_name

    -- 查找所有已经分配部门的员工的last_namefirst_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_namefirst_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 会读取右边数据表的全部数据,即便左边表无对应数据。

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

    1、  on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
    2where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有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

     

     

     

     

    作者:MuRongKang
    本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    学习网页栅格系统的几篇好文
    [转载]iis6配置使用页面Gzip压缩提速
    img标签的src=""会引起的Page_Load多次执行
    基于sliverlight + wcf的web 文字版IM 示例
    Enterprise Library 4.1学习笔记8缓存应用程序块之FileDependency
    windows 2008上启用防火墙后sqlserver 2005经常出现连接超时的解决办法
    负载均衡环境下的web服务器处理
    Ado.Net连接池的速度测试
    [转载]网页栅格系统研究(1):960的秘密
    css基础:把所有背景图都集成在一张图片上,减少图片服务器请求次数
  • 原文地址:https://www.cnblogs.com/mukk/p/12255018.html
Copyright © 2011-2022 走看看