0
点赞
收藏
分享

微信扫一扫

MySQL数据库高级查询

人间四月天i 2022-01-05 阅读 66

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.单行函数

  • 操作示例
#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
举报

相关推荐

0 条评论