MySQL数据库高级操作-单表操作

数据库下载链接自行导入即可: MySQL-scott.sql.

1.数据字段加和,合并

# 字段名称 enme sal comm  年薪是(sal+comm)*12的别名 emp表名
select ename,(sal+comm)*12 年薪 from emp;
#concat合并字段 把 name和sql  合并  员工薪资是新字段名称的别名 emp表名
select CONCAT(ename,'的年薪是',sql) 员工薪资 from emp;
#更新数据库里边有%的
update emp set ename = 'JAM%ES' where empno =7900;

2.模糊查询

# 查询ename中最后一个字母为N的
select * from emp WHERE ename LIKE '%N';
# 查询ename中第一个字母为Mde
select * from emp WHERE ename LIKE 'M%';
# 查询ename中有M的值
select * from emp WHERE ename LIKE '%M%';
# 第三个字符是M的
SELECT * FROM emp WHERE ename LIKE '__M%';
#更新数据库里边有%的
update emp set ename = 'JAM%ES' where empno =7900;
# 特殊模糊查询
select * from emp WHERE ename LIKE '%\%%';
  • 结果
mysql> select * from emp WHERE ename LIKE '%N';

select * from emp WHERE ename LIKE 'M%';

select * from emp WHERE ename LIKE '%M%';
+-------+--------+----------+------+------------+------+------+--------+
| empno | ename  | job      | mgr  | hiredate   | sal  | comm | deptno |
+-------+--------+----------+------+------------+------+------+--------+
|  7499 | ALLEN  | SALESMAN | 7698 | 1981-02-20 | 1600 | 300  |     30 |
|  7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250 | 1400 |     30 |
+-------+--------+----------+------+------------+------+------+--------+
2 rows in set

+-------+--------+----------+------+------------+------+------+--------+
| empno | ename  | job      | mgr  | hiredate   | sal  | comm | deptno |
+-------+--------+----------+------+------------+------+------+--------+
|  7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250 | 1400 |     30 |
+-------+--------+----------+------+------------+------+------+--------+
1 row in set

+-------+--------+----------+------+------------+------+------+--------+
| empno | ename  | job      | mgr  | hiredate   | sal  | comm | deptno |
+-------+--------+----------+------+------------+------+------+--------+
|  7369 | SMITH  | CLERK    | 7902 | 1980-12-17 | 800  | NULL |     20 |
|  7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250 | 1400 |     30 |
|  7876 | ADAMS  | CLERK    | 7788 | 1987-07-13 | 1100 | NULL |     20 |
|  7900 | JAMES  | CLERK    | 7698 | 1981-12-03 | 950  | NULL |     30 |
+-------+--------+----------+------+------------+------+------+--------+
4 rows in set
mysql> SELECT * FROM emp WHERE ename LIKE '__M%'
    -> ;
+-------+-------+-------+------+------------+-----+------+--------+
| empno | ename | job   | mgr  | hiredate   | sal | comm | deptno |
+-------+-------+-------+------+------------+-----+------+--------+
|  7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950 | NULL |     30 |
+-------+-------+-------+------+------------+-----+------+--------+
1 row in set


mysql> update emp set ename = 'JAM%ES' where empno =7900;
Query OK, 1 row affected
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from emp;
+-------+--------+-----------+------+------------+------+------+--------+
| empno | ename  | job       | mgr  | hiredate   | sal  | comm | deptno |
+-------+--------+-----------+------+------------+------+------+--------+
|  7369 | SMITH  | CLERK     | 7902 | 1980-12-17 | 800  | NULL |     20 |
|  7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 | 1600 | 300  |     30 |
|  7521 | WARD   | SALESMAN  | 7698 | 1981-02-22 | 1250 | 500  |     30 |
|  7566 | JONES  | MANAGER   | 7839 | 1981-04-02 | 2975 | NULL |     20 |
|  7654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 | 1250 | 1400 |     30 |
|  7698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850 | NULL |     30 |
|  7782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450 | NULL |     10 |
|  7788 | SCOTT  | ANALYST   | 7566 | 1987-07-13 | 3000 | NULL |     20 |
|  7839 | KING   | PRESIDENT | NULL | 1981-11-17 | 5000 | NULL |     10 |
|  7844 | TURNER | SALESMAN  | 7698 | 1981-09-08 | 1500 | 0    |     30 |
|  7876 | ADAMS  | CLERK     | 7788 | 1987-07-13 | 1100 | NULL |     20 |
|  7900 | JAM%ES | CLERK     | 7698 | 1981-12-03 | 950  | NULL |     30 |
|  7902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000 | NULL |     20 |
+-------+--------+-----------+------+------------+------+------+--------+
13 rows in set

# 特殊模糊查询
mysql> select * from emp WHERE ename LIKE '%\%%';
+-------+--------+-------+------+------------+-----+------+--------+
| empno | ename  | job   | mgr  | hiredate   | sal | comm | deptno |
+-------+--------+-------+------+------------+-----+------+--------+
|  7900 | JAM%ES | CLERK | 7698 | 1981-12-03 | 950 | NULL |     30 |
+-------+--------+-------+------+------------+-----+------+--------+
1 row in set

3.升序降序排序,分页

  • 默认是升序 asc 不强调都是升序
#升序:asc
#降序:desc
select * from emp order by sal desc;
# 分页输出
select * from emp limit 3; 
# 多页列排序
select * from emp order by deptno,sal desc;
# 查询emp表 sal>1000 降序 前五列查询
select * from emp where sal> 1000 order by sal desc limit 0,5;
  • 结果
mysql> select * from emp order by deptno,sal desc ;
+-------+--------+-----------+------+------------+------+------+--------+
| empno | ename  | job       | mgr  | hiredate   | sal  | comm | deptno |
+-------+--------+-----------+------+------------+------+------+--------+
|  7839 | KING   | PRESIDENT | NULL | 1981-11-17 | 5000 | NULL |     10 |
|  7782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450 | NULL |     10 |
|  7788 | SCOTT  | ANALYST   | 7566 | 1987-07-13 | 3000 | NULL |     20 |
|  7902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000 | NULL |     20 |
|  7566 | JONES  | MANAGER   | 7839 | 1981-04-02 | 2975 | NULL |     20 |
|  7876 | ADAMS  | CLERK     | 7788 | 1987-07-13 | 1100 | NULL |     20 |
|  7369 | SMITH  | CLERK     | 7902 | 1980-12-17 | 800  | NULL |     20 |
|  7698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850 | NULL |     30 |
|  7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 | 1600 | 300  |     30 |
|  7844 | TURNER | SALESMAN  | 7698 | 1981-09-08 | 1500 | 0    |     30 |
|  7521 | WARD   | SALESMAN  | 7698 | 1981-02-22 | 1250 | 500  |     30 |
|  7654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 | 1250 | 1400 |     30 |
|  7900 | JAM%ES | CLERK     | 7698 | 1981-12-03 | 950  | NULL |     30 |
+-------+--------+-----------+------+------------+------+------+--------+
13 rows in set


mysql> select * from emp where sal> 1000 order by sal desc limit 0,5;
+-------+-------+-----------+------+------------+------+------+--------+
| empno | ename | job       | mgr  | hiredate   | sal  | comm | deptno |
+-------+-------+-----------+------+------------+------+------+--------+
|  7839 | KING  | PRESIDENT | NULL | 1981-11-17 | 5000 | NULL |     10 |
|  7788 | SCOTT | ANALYST   | 7566 | 1987-07-13 | 3000 | NULL |     20 |
|  7902 | FORD  | ANALYST   | 7566 | 1981-12-03 | 3000 | NULL |     20 |
|  7566 | JONES | MANAGER   | 7839 | 1981-04-02 | 2975 | NULL |     20 |
|  7698 | BLAKE | MANAGER   | 7839 | 1981-05-01 | 2850 | NULL |     30 |
+-------+-------+-----------+------+------------+------+------+--------+
5 rows in set

4.单行函数

1. 函数 字符串,日期,数字

#lower转换成小写
#length 长度
#lpad 加加字符
# ltrim 加空格
#replace 替换 
# substr(ename,2,3) ename 从第二个字母开始查询三个
#
select lower(ename),length(ename) froom emp;
#
select lower(ename),length(ename),lpad(ename,8,'#'),rpad(ename,8,'#'),ltrim('   123   '),rtrim('   123   ') from emp;
#
select lower(ename),length(ename),lpad(ename,8,'#'),rpad(ename,8,'#'),ltrim('   123   '),rtrim('   123   '),replace(ename,'S','@'),SUBSTR(ename,2,3) from emp;
#第二个字母为A的查询出来
select lower(ename),length(ename),lpad(ename,8,'#'),rpad(ename,8,'#'),ltrim('   123   '),rtrim('   123   '),replace(ename,'S','@'),SUBSTR(ename,2,3) from emp where SUBSTR(ename,2,1)='A';

  • 结果示例
mysql> select lower(ename),length(ename) froom emp;
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'emp' at line 1
mysql> select lower(ename),length(ename) from emp;
+--------------+---------------+
| lower(ename) | length(ename) |
+--------------+---------------+
| smith        |             5 |
| allen        |             5 |
| ward         |             4 |
| jones        |             5 |
| martin       |             6 |
| blake        |             5 |
| clark        |             5 |
| scott        |             5 |
| king         |             4 |
| turner       |             6 |
| adams        |             5 |
| jam%es       |             6 |
| ford         |             4 |
+--------------+---------------+
13 rows in set

mysql> select lower(ename),length(ename),lpad(ename,8,'#'),rpad(ename,8,'#'),ltrim('   123   '),rtrim('   123   ') from emp;
+--------------+---------------+-------------------+-------------------+--------------------+--------------------+
| lower(ename) | length(ename) | lpad(ename,8,'#') | rpad(ename,8,'#') | ltrim('   123   ') | rtrim('   123   ') |
+--------------+---------------+-------------------+-------------------+--------------------+--------------------+
| smith        |             5 | ###SMITH          | SMITH###          | 123                |    123             |
| allen        |             5 | ###ALLEN          | ALLEN###          | 123                |    123             |
| ward         |             4 | ####WARD          | WARD####          | 123                |    123             |
| jones        |             5 | ###JONES          | JONES###          | 123                |    123             |
| martin       |             6 | ##MARTIN          | MARTIN##          | 123                |    123             |
| blake        |             5 | ###BLAKE          | BLAKE###          | 123                |    123             |
| clark        |             5 | ###CLARK          | CLARK###          | 123                |    123             |
| scott        |             5 | ###SCOTT          | SCOTT###          | 123                |    123             |
| king         |             4 | ####KING          | KING####          | 123                |    123             |
| turner       |             6 | ##TURNER          | TURNER##          | 123                |    123             |
| adams        |             5 | ###ADAMS          | ADAMS###          | 123                |    123             |
| jam%es       |             6 | ##JAM%ES          | JAM%ES##          | 123                |    123             |
| ford         |             4 | ####FORD          | FORD####          | 123                |    123             |
+--------------+---------------+-------------------+-------------------+--------------------+--------------------+
13 rows in set

mysql> select lower(ename),length(ename),lpad(ename,8,'#'),rpad(ename,8,'#'),ltrim('   123   '),rtrim('   123   '),replace(ename,'S','@'),SUBSTR(ename,2,3) from emp;
+--------------+---------------+-------------------+-------------------+--------------------+--------------------+------------------------+-------------------+
| lower(ename) | length(ename) | lpad(ename,8,'#') | rpad(ename,8,'#') | ltrim('   123   ') | rtrim('   123   ') | replace(ename,'S','@') | SUBSTR(ename,2,3) |
+--------------+---------------+-------------------+-------------------+--------------------+--------------------+------------------------+-------------------+
| smith        |             5 | ###SMITH          | SMITH###          | 123                |    123             | @MITH                  | MIT               |
| allen        |             5 | ###ALLEN          | ALLEN###          | 123                |    123             | ALLEN                  | LLE               |
| ward         |             4 | ####WARD          | WARD####          | 123                |    123             | WARD                   | ARD               |
| jones        |             5 | ###JONES          | JONES###          | 123                |    123             | JONE@                  | ONE               |
| martin       |             6 | ##MARTIN          | MARTIN##          | 123                |    123             | MARTIN                 | ART               |
| blake        |             5 | ###BLAKE          | BLAKE###          | 123                |    123             | BLAKE                  | LAK               |
| clark        |             5 | ###CLARK          | CLARK###          | 123                |    123             | CLARK                  | LAR               |
| scott        |             5 | ###SCOTT          | SCOTT###          | 123                |    123             | @COTT                  | COT               |
| king         |             4 | ####KING          | KING####          | 123                |    123             | KING                   | ING               |
| turner       |             6 | ##TURNER          | TURNER##          | 123                |    123             | TURNER                 | URN               |
| adams        |             5 | ###ADAMS          | ADAMS###          | 123                |    123             | ADAM@                  | DAM               |
| jam%es       |             6 | ##JAM%ES          | JAM%ES##          | 123                |    123             | JAM%E@                 | AM%               |
| ford         |             4 | ####FORD          | FORD####          | 123                |    123             | FORD                   | ORD               |
+--------------+---------------+-------------------+-------------------+--------------------+--------------------+------------------------+-------------------+
13 rows in set

mysql> select lower(ename),length(ename),lpad(ename,8,'#'),rpad(ename,8,'#'),ltrim('   123   '),rtrim('   123   '),replace(ename,'S','@'),SUBSTR(ename,2,3) from emp where SUBSTR(ename,2,1)='A';
+--------------+---------------+-------------------+-------------------+--------------------+--------------------+------------------------+-------------------+
| lower(ename) | length(ename) | lpad(ename,8,'#') | rpad(ename,8,'#') | ltrim('   123   ') | rtrim('   123   ') | replace(ename,'S','@') | SUBSTR(ename,2,3) |
+--------------+---------------+-------------------+-------------------+--------------------+--------------------+------------------------+-------------------+
| ward         |             4 | ####WARD          | WARD####          | 123                |    123             | WARD                   | ARD               |
| martin       |             6 | ##MARTIN          | MARTIN##          | 123                |    123             | MARTIN                 | ART               |
| jam%es       |             6 | ##JAM%ES          | JAM%ES##          | 123                |    123             | JAM%E@                 | AM%               |
+--------------+---------------+-------------------+-------------------+--------------------+--------------------+------------------------+-------------------+
3 rows in set
mysql> 
  • floor向下取整
  • ceil 向上取整
  • power 平方
  • round 四舍五入
  • dual 虚拟表
mysql> select abs(-10),floor(3.2),floor(3.8),CEIL(3.2),CEIL(3.8), power(2,3) from dual;
+----------+------------+------------+-----------+-----------+------------+
| abs(-10) | floor(3.2) | floor(3.8) | CEIL(3.2) | CEIL(3.8) | power(2,3) |
+----------+------------+------------+-----------+-----------+------------+
|       10 |          3 |          3 |         4 |         4 |          8 |
+----------+------------+------------+-----------+-----------+------------+
1 row in set
  • 获取日期和时间
  • now()当前的时间
  • extract (unit from hiredata)from 表名; 拆封截,抽取数据
mysql> select hiredate,now() from emp;
+------------+---------------------+
| hiredate   | now()               |
+------------+---------------------+
| 1980-12-17 | 2022-01-05 12:22:00 |
| 1981-02-20 | 2022-01-05 12:22:00 |
| 1981-02-22 | 2022-01-05 12:22:00 |
| 1981-04-02 | 2022-01-05 12:22:00 |
| 1981-09-28 | 2022-01-05 12:22:00 |
| 1981-05-01 | 2022-01-05 12:22:00 |
| 1981-06-09 | 2022-01-05 12:22:00 |
| 1987-07-13 | 2022-01-05 12:22:00 |
| 1981-11-17 | 2022-01-05 12:22:00 |
| 1981-09-08 | 2022-01-05 12:22:00 |
| 1987-07-13 | 2022-01-05 12:22:00 |
| 1981-12-03 | 2022-01-05 12:22:00 |
| 1981-12-03 | 2022-01-05 12:22:00 |
+------------+---------------------+
13 rows in set

mysql> select extract(day from hiredate) from emp;
+----------------------------+
| extract(day from hiredate) |
+----------------------------+
|                         17 |
|                         20 |
|                         22 |
|                          2 |
|                         28 |
|                          1 |
|                          9 |
|                         13 |
|                         17 |
|                          8 |
|                         13 |
|                          3 |
|                          3 |
+----------------------------+
13 rows in set
mysql> select extract(year from hiredate) from emp;
mysql> select extract(month from hiredate) from emp;
mysql> 
  • 获取时间的一些基础操作
  • CURRENT_DATE() 当前的时间年月日
  • CURRENT_TIME() 当前的时间时分秒
  • CURRENT_TIMESTAMP() 时间戳 年月日时分秒
    • select hiredate,CURRENT_DATE(),CURRENT_TIME(),CURRENT_TIMESTAMP() from emp;
mysql> select hiredate,CURRENT_DATE(),CURRENT_TIME(),CURRENT_TIMESTAMP() from emp;
+------------+----------------+----------------+---------------------+
| hiredate   | CURRENT_DATE() | CURRENT_TIME() | CURRENT_TIMESTAMP() |
+------------+----------------+----------------+---------------------+
| 1980-12-17 | 2022-01-05     | 12:33:23       | 2022-01-05 12:33:23 |
| 1981-02-20 | 2022-01-05     | 12:33:23       | 2022-01-05 12:33:23 |
| 1981-02-22 | 2022-01-05     | 12:33:23       | 2022-01-05 12:33:23 |
| 1981-04-02 | 2022-01-05     | 12:33:23       | 2022-01-05 12:33:23 |
| 1981-09-28 | 2022-01-05     | 12:33:23       | 2022-01-05 12:33:23 |
| 1981-05-01 | 2022-01-05     | 12:33:23       | 2022-01-05 12:33:23 |
| 1981-06-09 | 2022-01-05     | 12:33:23       | 2022-01-05 12:33:23 |
| 1987-07-13 | 2022-01-05     | 12:33:23       | 2022-01-05 12:33:23 |
| 1981-11-17 | 2022-01-05     | 12:33:23       | 2022-01-05 12:33:23 |
| 1981-09-08 | 2022-01-05     | 12:33:23       | 2022-01-05 12:33:23 |
| 1987-07-13 | 2022-01-05     | 12:33:23       | 2022-01-05 12:33:23 |
| 1981-12-03 | 2022-01-05     | 12:33:23       | 2022-01-05 12:33:23 |
| 1981-12-03 | 2022-01-05     | 12:33:23       | 2022-01-05 12:33:23 |
+------------+----------------+----------------+---------------------+
13 rows in set
  • 数据化格式化年月日的不同大小写显示示例
  • 时间加减 select hiredate,adddate(hiredate,9),adddate(hiredate,-9) from emp;
  • last_day :last_day(hiredate)-3 这个月的倒数第三天
mysql> select hiredate,date_format(hiredate,'%Y年%M月%D日') from emp;
+------------+--------------------------------------+
| hiredate   | date_format(hiredate,'%Y年%M月%D日') |
+------------+--------------------------------------+
| 1980-12-17 | 1980年December月17th日               |
| 1981-02-20 | 1981年February月20th日               |
| 1981-02-22 | 1981年February月22nd日               |
| 1981-04-02 | 1981年April月2nd日                   |
| 1981-09-28 | 1981年September月28th日              |
| 1981-05-01 | 1981年May月1st日                     |
| 1981-06-09 | 1981年June月9th日                    |
| 1987-07-13 | 1987年July月13th日                   |
| 1981-11-17 | 1981年November月17th日               |
| 1981-09-08 | 1981年September月8th日               |
| 1987-07-13 | 1987年July月13th日                   |
| 1981-12-03 | 1981年December月3rd日                |
| 1981-12-03 | 1981年December月3rd日                |
+------------+--------------------------------------+
13 rows in set

mysql> select hiredate,date_format(hiredate,'%Y年%m月%d日') from emp;
+------------+--------------------------------------+
| hiredate   | date_format(hiredate,'%Y年%m月%d日') |
+------------+--------------------------------------+
| 1980-12-17 | 19801217|
| 1981-02-20 | 19810220|
| 1981-02-22 | 19810222|
| 1981-04-02 | 19810402|
| 1981-09-28 | 19810928|
| 1981-05-01 | 19810501|
| 1981-06-09 | 19810609|
| 1987-07-13 | 19870713|
| 1981-11-17 | 19811117|
| 1981-09-08 | 19810908|
| 1987-07-13 | 19870713|
| 1981-12-03 | 19811203|
| 1981-12-03 | 19811203|
+------------+--------------------------------------+
13 rows in set

mysql> select hiredate,date_format(hiredate,'%y年%m月%d日') from emp;
+------------+--------------------------------------+
| hiredate   | date_format(hiredate,'%y年%m月%d日') |
+------------+--------------------------------------+
| 1980-12-17 | 801217|
| 1981-02-20 | 810220|
| 1981-02-22 | 810222|
| 1981-04-02 | 810402|
| 1981-09-28 | 810928|
| 1981-05-01 | 810501|
| 1981-06-09 | 810609|
| 1987-07-13 | 870713|
| 1981-11-17 | 811117|
| 1981-09-08 | 810908|
| 1987-07-13 | 870713|
| 1981-12-03 | 811203|
| 1981-12-03 | 811203|
+------------+--------------------------------------+
13 rows in set

mysql> select hiredate,date_format(now(),'%y年%m月%d日 %H时%i分%s秒') from emp;
+------------+------------------------------------------------+
| hiredate   | date_format(now(),'%y年%m月%d日 %H时%i分%s秒') |
+------------+------------------------------------------------+
| 1980-12-17 | 220105141141|
| 1981-02-20 | 220105141141|
| 1981-02-22 | 220105141141|
| 1981-04-02 | 220105141141|
| 1981-09-28 | 220105141141|
| 1981-05-01 | 220105141141|
| 1981-06-09 | 220105141141|
| 1987-07-13 | 220105141141|
| 1981-11-17 | 220105141141|
| 1981-09-08 | 220105141141|
| 1987-07-13 | 220105141141|
| 1981-12-03 | 220105141141|
| 1981-12-03 | 220105141141|
+------------+------------------------------------------------+ 

# 日期的加减操作
mysql> select hiredate,adddate(hiredate,9),adddate(hiredate,-9) from emp;
+------------+---------------------+----------------------+
| hiredate   | adddate(hiredate,9) | adddate(hiredate,-9) |
+------------+---------------------+----------------------+
| 1980-12-17 | 1980-12-26          | 1980-12-08           |
| 1981-02-20 | 1981-03-01          | 1981-02-11           |
| 1981-02-22 | 1981-03-03          | 1981-02-13           |
| 1981-04-02 | 1981-04-11          | 1981-03-24           |
| 1981-09-28 | 1981-10-07          | 1981-09-19           |
| 1981-05-01 | 1981-05-10          | 1981-04-22           |
| 1981-06-09 | 1981-06-18          | 1981-05-31           |
| 1987-07-13 | 1987-07-22          | 1987-07-04           |
| 1981-11-17 | 1981-11-26          | 1981-11-08           |
| 1981-09-08 | 1981-09-17          | 1981-08-30           |
| 1987-07-13 | 1987-07-22          | 1987-07-04           |
| 1981-12-03 | 1981-12-12          | 1981-11-24           |
| 1981-12-03 | 1981-12-12          | 1981-11-24           |
+------------+---------------------+----------------------+
13 rows in set

# 格式化时分秒
mysql> select date_format(last_day(hiredate)-3,'%y年%m月%d日 %H时%i分%s秒'),date_format(now()-3,'%y年%m月%d日 %H时%i分%s秒') ,now()-3 from emp;
+---------------------------------------------------------------+--------------------------------------------------+----------------+
| date_format(last_day(hiredate)-3,'%y年%m月%d日 %H时%i分%s秒') | date_format(now()-3,'%y年%m月%d日 %H时%i分%s秒') | now()-3        |
+---------------------------------------------------------------+--------------------------------------------------+----------------+
| 801228000000| 220105143655| 20220105143655 |
| 810225000000| 220105143655| 20220105143655 |
| 810225000000| 220105143655| 20220105143655 |
| 810427000000| 220105143655| 20220105143655 |
| 810927000000| 220105143655| 20220105143655 |
| 810528000000| 220105143655| 20220105143655 |
| 810627000000| 220105143655| 20220105143655 |
| 870728000000| 220105143655| 20220105143655 |
| 811127000000| 220105143655| 20220105143655 |
| 810927000000| 220105143655| 20220105143655 |
| 870728000000| 220105143655| 20220105143655 |
| 811228000000| 220105143655| 20220105143655 |
| 811228000000| 220105143655| 20220105143655 |
+---------------------------------------------------------------+--------------------------------------------------+----------------+
13 rows in set

mysql> 

2.其他函数

  • 1.ifnull专门处理空值
#不使用ifnull的话遇到null加和也是null
select sal+comm from emp;
#使用ifnull如果遇见null转换成任意的进行加和
select sal+comm from emp;
  • 结果
mysql> select sal+comm from emp;
+----------+
| sal+comm |
+----------+
| NULL     |
| 1900     |
| 1750     |
| NULL     |
| 2650     |
| NULL     |
| NULL     |
| NULL     |
| NULL     |
| 1500     |
| NULL     |
| NULL     |
| NULL     |
+----------+
13 rows in set

mysql> select sal+IFNULL (comm,0) from emp;
+---------------------+
| sal+IFNULL (comm,0) |
+---------------------+
| 800                 |
| 1900                |
| 1750                |
| 2975                |
| 2650                |
| 2850                |
| 2450                |
| 3000                |
| 5000                |
| 1500                |
| 1100                |
| 950                 |
| 3000                |
+---------------------+
13 rows in set
mysql> 
  • 2.MD5 非可逆加密
  • dual 续表试验 select MD5('hello') from dual
mysql> select MD5('hello') from dual;
+----------------------------------+
| MD5('hello')                     |
+----------------------------------+
| 5d41402abc4b2a76b9719d911017c592 |
+----------------------------------+
1 row in set

3.转换函数

  • 日期到字符串穿 data_format()
    • 转换格式整齐的 年月日,时分秒
    • select extract(month from '10月2021年11日');
  • 字符串到日期str_to_data(),
    • 转换格式不整齐的
    • select str_to_date('10月2022年11日','%m月%Y年%d日');
  • 数字到字符串
    • select concat(123,'456','aaa');
    • select lpad(123,10,'#');
mysql> select extract(month from '10月2021年11日'),adddate('2021-10-11',-9);
+--------------------------------------+--------------------------+
| extract(month from '10月2021年11日') | adddate('2021-10-11',-9) |
+--------------------------------------+--------------------------+
| NULL                                 | 2021-10-02               |
+--------------------------------------+--------------------------+
1 row in set

# 数字到字符串
mysql> select str_to_date('10月2022年11日','%m月%Y年%d日');
+----------------------------------------------+
| str_to_date('10月2022年11日','%m月%Y年%d日') |
+----------------------------------------------+
| 2022-10-11                                   |
+----------------------------------------------+
1 row in set

mysql> select lpad(123,10,'#');
+------------------+
| lpad(123,10,'#') |
+------------------+
| #######123       |
+------------------+
1 row in set

mysql> select concat(123,'456','aaa');
+-------------------------+
| concat(123,'456','aaa') |
+-------------------------+
| 123456aaa               |
+-------------------------+
1 row in set

5.多行函数

1.多行函数介绍使用

  • max()
  • min()
  • count()
  • avg()
  • sum()
mysql> select max(sal),min(sal),count(sal),count(job),avg(sal),sum(sal) from emp;
+----------+----------+------------+------------+-------------+----------+
| max(sal) | min(sal) | count(sal) | count(job) | avg(sal)    | sum(sal) |
+----------+----------+------------+------------+-------------+----------+
| 5000     | 800      |         13 |         13 | 2132.692308 | 27725.00 |
+----------+----------+------------+------------+-------------+----------+
1 row in set

2.数据分组

  • 按照工作分组查出每组中最高的薪资
mysql> select job,max(sal) from emp group by job;
+-----------+----------+
| job       | max(sal) |
+-----------+----------+
| CLERK     | 1100     |
| SALESMAN  | 1600     |
| MANAGER   | 2975     |
| ANALYST   | 3000     |
| PRESIDENT | 5000     |
+-----------+----------+
  • 按照部门分组,对薪资小于3000的员工计算平均值并且按照部门编号的降序查询
mysql> select deptno,avg(sal) from emp where sal<3000 group by deptno order by deptno desc;
+--------+-------------+
| deptno | avg(sal)    |
+--------+-------------+
|     30 | 1566.666667 |
|     20 | 1625        |
|     10 | 2450        |
+--------+-------------+
3 rows in set
  • 按照部门分组,对薪资小于3000员工,计算平均薪高于1800的部门(注:对分组后的计算平均值不能使用where 需要使用having
  • having对分组过后的数据进行过滤可以使多行函数等
  • where称之为行级过滤,处理的是表中每一行数据的过滤
  • having称之为组级过滤。处理的是分组之后的每一组数据
mysql> select deptno,avg(sal) from emp where sal<3000 group by deptno having avg(sal)>1800;
+--------+----------+
| deptno | avg(sal) |
+--------+----------+
|     10 | 2450     |
+--------+----------+
1 row in set
  • 查询那个部门每个月的的津贴总数超过1000
mysql> select deptno,sum(comm) from emp where comm is not null group by deptno having sum(comm)>1000;
+--------+-----------+
| deptno | sum(comm) |
+--------+-----------+
|     30 | 2200.00   |
+--------+-----------+
1 row in set
  • 根据部门分组,查询出部门编号为 20和30的平均薪资,优先使用行级过滤
    • where称之为行级过滤,处理的是表中每一行数据的过滤
    • having称之为组级过滤。处理的是分组之后的每一组数据
mysql> select deptno,avg(sal) from emp where deptno in (20,30) group by deptno;
+--------+-------------+
| deptno | avg(sal)    |
+--------+-------------+
|     20 | 2175        |
|     30 | 1566.666667 |
+--------+-------------+
2 rows in set

mysql> select deptno,avg(sal) from emp group by deptno having deptno in (20,30);
+--------+-------------+
| deptno | avg(sal)    |
+--------+-------------+
|     20 | 2175        |
|     30 | 1566.666667 |
+--------+-------------+
2 rows in set

mysql> 
  • 查询每个部门中名字中有A的平均薪资
mysql> select deptno,avg(sal) from emp where ename like '%A%' group by deptno;
+--------+----------+
| deptno | avg(sal) |
+--------+----------+
|     10 | 2450     |
|     20 | 1100     |
|     30 | 1580     |
+--------+----------+
3 rows in set
  • 查询10,20部门中,并且在十一月份入职的员工,每个部门中平均薪资高于1500的工作是什么,并按照部门,工作平均薪资进行排序。
mysql> select deptno,avg(sal) from emp where deptno in (10,20) and extract(month from hiredate) = 11 group by deptno,job having avg(sal)>1500;
+--------+----------+
| deptno | avg(sal) |
+--------+----------+
|     10 | 5000     |
+--------+----------+
1 row in set

mysql> 
  • 总结
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
哈尔滨工业大学(哈工大)数据库实验使用高级语言如Python、Java等来操作MySQL数据库高级语言是一种与人类语言相似的编程语言,它具有更高级的抽象和封装能力,使得我们使用它们可以更方便地操作数据库。 在数据库实验中,我们会使用高级语言来编写程序,通过与MySQL数据库进行交互来实现各种功能。比如,我们可以使用高级语言连接到MySQL数据库,并执行SQL语句来创建、查询、更新和删除数据表中的数据。通过编写程序,我们可以更灵活地操作数据库,实现各种复杂的功能。 使用高级语言操作MySQL数据库具有以下优点: 1. 便捷性:高级语言提供了简洁的语法和丰富的库函数,使得我们可以更快速地编写数据库相关的代码。 2. 可扩展性:高级语言具有良好的扩展性,我们可以通过编写自定义的函数、类和模块来实现更复杂的数据库操作。 3. 跨平台性:高级语言在不同操作系统和平台上都有良好的兼容性,我们无需为不同的操作系统编写不同的代码。 4. 可读性:高级语言具有更接近人类语言的语法,代码可读性更高,我们可以更容易地理解和维护自己编写的代码。 总的来说,哈工大数据库实验使用高级语言操作MySQL数据库,可以提高我们的工作效率和代码质量,使得我们能更好地掌握数据库相关的知识和技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大白菜程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值