zoukankan      html  css  js  c++  java
  • MySQL 单表查询

    首先建一张员工表(emp)

    CREATE TABLE `emp` (
      `empno` int(11) NOT NULL COMMENT '员工编号',
      `ename` varchar(20) COLLATE utf8mb4_bin NOT NULL COMMENT '员工姓名',
      `job` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '工作',
      `mgp` int(11) DEFAULT NULL COMMENT '上级编号',
      `hiredate` datetime DEFAULT NULL COMMENT '受雇日期',
      `sal` decimal(10,2) DEFAULT NULL COMMENT '薪金',
      `comm` decimal(10,2) DEFAULT NULL COMMENT '佣金',
      `deptno` int(11) DEFAULT NULL COMMENT '部门编号',
      PRIMARY KEY (`empno`) USING BTREE,
      KEY `emp_dno_fk` (`deptno`) USING BTREE,
      CONSTRAINT `emp_dno_fk` FOREIGN KEY (`deptno`) REFERENCES `dept` (`deptno`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC

    然后下面是我在今年初在高博应诺参加Java开发冬令营的时候的MySQL练习题,现在回顾一下

    -- 1、选择部门30中的雇员。
    select * from emp where deptno=30;
    -- 2、列出所有办事员的姓名、编号和部门。“CLERK”
    select ename,empno,deptno from emp where job='CLERK';
    -- 3、找出佣金高于薪金的雇员
    select * from emp where comm>sal;
    -- 4、找出佣金高于薪金的60%的雇员
    select * from emp where comm>sal*0.6;
    -- 5、找出部门10中所有经理和部门20中所有办事员的详细资料
    select * from emp where deptno=10 and job='MANAGER' or deptno=20 and job='CLERK';
    -- 6、找出部门10中所有经理、部门20中所有办事员以及既不是经理又不是办事员,但其薪金大于或等于2000的所有雇员的详细资料
    select * from emp where deptno=10 and job='MANAGER' or deptno=20 and job='CLERK' or job<>'CLERK' and job<>'MANAGER' and sal>=2000;
    -- 7、找出收取佣金的雇员的不同工作(排重)
    select DISTINCT(job) from emp where comm is not null;
    -- 8、找出不收取佣金或收取的佣金低于100的雇员
    select * from emp where comm is null or comm<100;
    -- 9、找出各月最后一天受雇的所有雇员
    select * from emp where hiredate=LAST_DAY(hiredate);
    -- 10、找出早于30年之前受雇的雇员
    select * from emp where DATEDIFF(DATE_ADD(hiredate,INTERVAL 30 YEAR),CURRENT_DATE()) < 0;
    -- 11、显示只有首字母大写的所有雇员的姓名
    select CONCAT(UPPER(SUBSTR(ename,1,1)),LOWER(SUBSTR(ename,2))) from emp;
    -- 12、显示正好为4个字符的雇员的姓名
    select ename from emp where CHAR_LENGTH(ename)=4;
    -- 13、显示不带有"R"的雇员姓名
    select ename from emp where ename not like '%R%';
    -- 14、显示所有雇员的姓名的前三个字符
    select LEFT(ename,3) from emp;
    -- 15、显示所有雇员的姓名,用"a"替换所有的"A"
    select REPLACE(ename,'A','a') from emp;
    -- 16、显示所有雇员的姓名以及满30年服务年限的日期
    select ename,DATE_ADD(hiredate,INTERVAL 30 YEAR) from emp;
    -- 17、显示雇员的详细资料,按姓名升序排序
    select* from emp ORDER BY ename;
    -- 18、显示雇员姓名,根据其服务年限,将最老的雇员排在最前面。
    select ename,hiredate from emp ORDER BY hiredate,ename DESC;
    -- 19、显示所有雇员的姓名、工作和薪金,按工作内的工作的降序顺序排序,而工作按薪金排序
    select ename,job,sal from emp ORDER BY job DESC,sal;
    -- 20、显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇日所在月排序,并将最前年份的排在最前面
    select ename,YEAR(hiredate),MONTH(hiredate) from emp ORDER BY 3,2,1 DESC;
    -- 21、显示在一个月为30天的情况下所有雇员的日薪金,忽略余数
    select  ename,TRUNCATE(sal/30,0) from emp;
    -- 22、找出在(任何年份的)2月受聘的所有雇员
    select * from emp where MONTH(hiredate)=2;
    -- 23、对于每个雇员,显示其加入公司的天数
    select ename,DATEDIFF(CURRENT_DATE(),hiredate) from emp;
    -- 24、显示姓名字段的任何位置包含"A"的所有雇员的姓名
    select ename from emp where ename like '%A%';
    -- 25、以年、月和日显示所有雇员的服务年限
    select ename,TIMESTAMPDIFF(YEAR,hiredate,CURRENT_DATE()) 服务年数,TIMESTAMPDIFF(MONTH,hiredate,CURRENT_DATE()) 服务月数,TIMESTAMPDIFF(DAY,hiredate,CURRENT_DATE()) 服务天数 from emp;
  • 相关阅读:
    centos添加图形桌面
    centos 复制并重命名文件
    山东省第八届ACM程序设计大赛总结
    RMQ
    图的深度优先搜索
    ACM知识点清单
    优先队列(priority_queue)
    Contest Print Server
    k8s之证书签发(二)
    k8s环境之bind 9 (一)
  • 原文地址:https://www.cnblogs.com/andrew3/p/12727234.html
Copyright © 2011-2022 走看看