mysql练习

kevin Lv2

用于熟悉mysql的基本知识

导入数据库脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*
Navicat Premium Data Transfer

Source Server : ali
Source Server Type : MySQL
Source Server Version : 80026 (8.0.26)
Source Schema : kd

Date: 11/07/2023 20:44:05
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for dept
-- ----------------------------
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
`deptno` int NOT NULL,
`dname` varchar(20) NOT NULL,
`loc` varchar(20) DEFAULT NULL,
PRIMARY KEY (`deptno`),
UNIQUE KEY `dname` (`dname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Records of dept
-- ----------------------------
BEGIN;
INSERT INTO `dept` (`deptno`, `dname`, `loc`) VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO `dept` (`deptno`, `dname`, `loc`) VALUES (20, 'RESEARCH', 'shanghai');
INSERT INTO `dept` (`deptno`, `dname`, `loc`) VALUES (30, 'SALES', 'beijing');
INSERT INTO `dept` (`deptno`, `dname`, `loc`) VALUES (40, 'OPERATIONS', 'suzhou');
INSERT INTO `dept` (`deptno`, `dname`, `loc`) VALUES (50, 'ADMIN', 'suzhou');
COMMIT;

-- ----------------------------
-- Table structure for emp
-- ----------------------------
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
`empno` int NOT NULL,
`ename` varchar(10) DEFAULT NULL,
`job` varchar(9) DEFAULT NULL,
`mgr` int DEFAULT NULL,
`hiredate` date DEFAULT NULL,
`salary` float DEFAULT NULL,
`comm` float DEFAULT NULL,
`deptno` int DEFAULT NULL,
PRIMARY KEY (`empno`),
KEY `fk_emp_dept` (`deptno`),
CONSTRAINT `fk_emp_dept` FOREIGN KEY (`deptno`) REFERENCES `dept` (`deptno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Records of emp
-- ----------------------------
BEGIN;
INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `salary`, `comm`, `deptno`) VALUES (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, NULL, 20);
INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `salary`, `comm`, `deptno`) VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);
INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `salary`, `comm`, `deptno`) VALUES (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);
INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `salary`, `comm`, `deptno`) VALUES (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, NULL, 20);
INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `salary`, `comm`, `deptno`) VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '1981-05-01', 1250, 1400, 30);
INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `salary`, `comm`, `deptno`) VALUES (7698, 'BLAKE', 'MANAGER', 7839, '1981-06-09', 2850, NULL, 30);
INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `salary`, `comm`, `deptno`) VALUES (7782, 'CLARK', 'MANAGER', 7839, '1987-07-01', 2450, NULL, 10);
INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `salary`, `comm`, `deptno`) VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1981-11-17', 3000, NULL, 20);
INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `salary`, `comm`, `deptno`) VALUES (7839, 'KING', 'PRESIDENT', NULL, '1987-12-03', 5000, NULL, 10);
INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `salary`, `comm`, `deptno`) VALUES (7844, 'TURNER', 'SALESMAN', 7698, '1981-03-12', 1500, 0, 30);
INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `salary`, `comm`, `deptno`) VALUES (7876, 'ADAMS', 'CLERK', 7788, '1981-02-13', 1100, NULL, 20);
INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `salary`, `comm`, `deptno`) VALUES (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, NULL, 30);
INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `salary`, `comm`, `deptno`) VALUES (7902, 'FORD', 'ANALYST', 7566, '1981-09-08', 3000, NULL, 20);
INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `salary`, `comm`, `deptno`) VALUES (7934, 'MILLER', 'CLERK', 7782, '1981-06-02', 1300, NULL, 10);
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

题目

【0. 简单查询】

  1. 查出在10部门的员工名字,工资

    1
    2
    3
    4
    5
    6
    7
    SELECT
    ename,
    salary
    FROM
    emp
    WHERE
    deptno = 10;
  2. 找出工资大于1200元的员工全名、工资、职称

    1
    2
    3
    4
    5
    6
    7
    8
    SELECT
    ename,
    salary,
    job
    FROM
    emp
    WHERE
    salary > 1200;
  3. 查出在10,30部门的员工名,薪水

    1
    2
    3
    4
    5
    6
    7
    SELECT
    ename,
    salary
    FROM
    emp
    WHERE
    deptno IN ( 10, 30 );
  4. 找出工资大于1500并且没有提成的员工

    1
    2
    3
    4
    5
    6
    7
    SELECT
    ename
    FROM
    emp
    WHERE
    salary > 1500
    AND comm IS NULL;
  5. 查出名字是以M打头的员工

    1
    2
    3
    4
    5
    6
    SELECT
    ename
    FROM
    emp
    WHERE
    SUBSTR( ename, 1, 1 ) = 'M';
  6. 查出姓名中第三个字母是e的员工

    1
    2
    3
    4
    5
    6
    SELECT
    ename
    FROM
    emp
    WHERE
    SUBSTR( ename, 3, 1 ) = 'e';
  7. 找出没有提成率的员工

    1
    2
    3
    4
    5
    6
    SELECT
    ename
    FROM
    emp
    WHERE
    comm IS NULL;
  8. 找出工资在950(含)至1200(含)元的员工姓名、职称

    1
    2
    3
    4
    5
    6
    7
    8
    SELECT
    ename,
    job
    FROM
    emp
    WHERE
    salary BETWEEN 950
    AND 1200;
  9. 找出2月份入职的员工名、入职时间、工资

    1
    2
    3
    4
    5
    6
    7
    8
    SELECT
    ename,
    hiredate,
    salary
    FROM
    emp
    WHERE
    MONTH(hiredate) = 2;
  10. 查询出所有员工的职位,不重复

    1
    2
    3
    4
    SELECT
    DISTINCT job
    FROM
    emp ;
  11. 查询出各个部门的员工数量

    1
    2
    3
    4
    5
    6
    7
    8
    SELECT
    COUNT( ename ) 员工数量,
    dept.dname 部门
    FROM
    emp
    LEFT JOIN dept ON dept.deptno = emp.deptno
    GROUP BY
    dept.deptno;
  12. 查询出各年份入职的员工情况(年份,员工人数)

    1
    2
    3
    4
    5
    6
    SELECT 
    YEAR( hiredate ) 年份,
    COUNT( empno )
    FROM
    emp
    GROUP BY 年份;
  13. 查询出每年每月入职的员工情况(年份月份,员工人数)

    1
    2
    3
    4
    5
    6
    SELECT 
    DATE_FORMAT(hiredate,'%Y年%m月')年份,
    COUNT( empno )
    FROM
    emp
    GROUP BY 年份;

【1. 字符函数】

  1. 获得’goodmorning’ 的字符长度

    1
    SELECT CHAR_LENGTH('goodmorning');
  2. 将Hello全部转换成小写字母

    1
    SELECT LOWER('Hello');
  3. 将Hello全部转换成大写字母

    1
    SELECT UPPER('Hello');
  4. 将hello首字母变为大写字母

    1
    SELECT INSERT('hello',1,1,UPPER(SUBSTR('hello',1,1)));
  5. 将’hello’ 与 ‘tom’ ,’good’拼接成一个单词

    1
    SELECT CONCAT('hello','tom','good');
  6. 获得’goodmorning’ 的第4 个字母

    1
    SELECT SUBSTR('goodmorning',4,1);
  7. 截取’goodmorning’ 的monring 单词

    1
    SELECT SUBSTR('goodmorning',POSITION('morning' IN 'goodmorning'),CHAR_LENGTH('morning'));
  8. 截取’Good morning !I’m Tom ‘ 中的’o’ 用’A’来替代

    1
    SELECT REPLACE('Good  morning !I\'m Tom','o','A')

【2. 日期函数】

  1. 获得当前日期

    1
    SELECT NOW()
  2. 获得某一个日期的年份,月份,日期

    1
    SELECT YEAR(NOW()),MONTH(NOW()), DAY(NOW());
  3. 获得某一个日期的星期

    1
    SELECT DAYOFWEEK(NOW())-1;
  4. 获得当前日期的时分秒

    1
    SELECT DATE_FORMAT(NOW(),'%H:%i:%s');
  5. 获得2天后的日期

    1
    SELECT DATE_ADD(NOW(),interval 2 day);
  6. 获得前2天的日期

    1
    SELECT DATE_SUB(NOW(),interval 2 day);
  7. 获得两个日期相差的年份,月份,天数

    1
    SELECT timestampdiff(YEAR,'2000-11-28',NOW()),timestampdiff(MONTH,'2000-11-28',NOW()),timestampdiff(DAY,'2000-11-28',NOW());

【3. 数值函数】

  1. 获得38934.4383的整数部分

    1
    SELECT truncate(38934.4383,0)
  2. 将38934.4387的保留2位小数,不需要四舍五入

    1
    SELECT truncate(38934.4383,2)
  3. 将38934.4387的保留2位小数,需要四舍五入

    1
    SELECT ROUND(38934.4383,2);
  4. 获得不小于38934.4383的最小正整数

    1
    SELECT ceiling(38934.4383);
  5. 获得不大于38934.4383的最大的正整数

    1
    SELECT floor(38934.4383);
  • 标题: mysql练习
  • 作者: kevin
  • 创建于: 2023-07-11 20:21:58
  • 更新于: 2023-07-14 18:42:13
  • 链接: https://lsmallice.github.io/posts/c1d94981.html
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
 评论
此页目录
mysql练习