0
点赞
收藏
分享

微信扫一扫

(P117)mysql数据库(九):limit,distinct,union,union all关键字


文章目录

  • ​​1.limit​​
  • ​​2.distinct​​
  • ​​3.union​​
  • ​​4.union all​​

1.limit

  • 限制查询的结果
    limit可用于分页查询

只显示前5条记录,limit相当于是top功能
mysql> select * from EMP order by sal limit 5;
+-------+--------+----------+------+---------------------+---------+---------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+--------+----------+------+---------------------+---------+---------+--------+
| 7369 | SMITH | CLERK | 7902 | 1980-12-17 00:00:00 | 800.00 | NULL | 20 |
| 7900 | JAMES | CLERK | 7698 | 1981-12-03 00:00:00 | 950.00 | NULL | 30 |
| 7876 | ADAMS | CLERK | 7788 | 1987-05-23 00:00:00 | 1100.00 | NULL | 20 |
| 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 00:00:00 | 1250.00 | 1400.00 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 00:00:00 | 1250.00 | 500.00 | 30 |
+-------+--------+----------+------+---------------------+---------+---------+--------+
5 rows in set (0.00 sec)


第一个字段表示offset,第二个字段表示查询的行数
若将查询的结果进行分页的话,一页是5行记录
显示前5条记录,就是0-4行,这是第一页的内容
mysql> select * from EMP order by sal limit 0,5;
+-------+--------+----------+------+---------------------+---------+---------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+--------+----------+------+---------------------+---------+---------+--------+
| 7369 | SMITH | CLERK | 7902 | 1980-12-17 00:00:00 | 800.00 | NULL | 20 |
| 7900 | JAMES | CLERK | 7698 | 1981-12-03 00:00:00 | 950.00 | NULL | 30 |
| 7876 | ADAMS | CLERK | 7788 | 1987-05-23 00:00:00 | 1100.00 | NULL | 20 |
| 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 00:00:00 | 1250.00 | 1400.00 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 00:00:00 | 1250.00 | 500.00 | 30 |
+-------+--------+----------+------+---------------------+---------+---------+--------+
5 rows in set (0.00 sec)

这是第二页的内容
mysql> select * from EMP order by sal limit 5,5;
+-------+--------+----------+------+---------------------+---------+--------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+--------+----------+------+---------------------+---------+--------+--------+
| 7934 | MILLER | CLERK | 7782 | 1982-01-23 00:00:00 | 1300.00 | NULL | 10 |
| 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 00:00:00 | 1500.00 | 0.00 | 30 |
| 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 00:00:00 | 1600.00 | 300.00 | 30 |
| 7782 | CLARK | MANAGER | 7839 | 1981-06-09 00:00:00 | 2450.00 | NULL | 10 |
| 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 00:00:00 | 2850.00 | NULL | 30 |
+-------+--------+----------+------+---------------------+---------+--------+--------+
5 rows in set (0.00 sec)

第三页的内容
若内容不足5行,比如只有4行,就显示4行
mysql> select * from EMP order by sal limit 10,5;
+-------+-------+-----------+------+---------------------+---------+------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+-------+-----------+------+---------------------+---------+------+--------+
| 7566 | JONES | MANAGER | 7839 | 1981-04-02 00:00:00 | 2975.00 | NULL | 20 |
| 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 00:00:00 | 3000.00 | NULL | 20 |
| 7902 | FORD | ANALYST | 7566 | 1981-12-03 00:00:00 | 3000.00 | NULL | 20 |
| 7839 | KING | PRESIDENT | NULL | 1981-11-17 00:00:00 | 5000.00 | NULL | 10 |
+-------+-------+-----------+------+---------------------+---------+------+--------+
4 rows in set (0.00 sec)


第四页的内容
mysql> select * from EMP order by sal limit 15,5;
Empty set (0.00 sec)

2.distinct

  • 去除重复记录

mysql> select  distinct job,deptno from EMP;
+-----------+--------+
| job | deptno |
+-----------+--------+
| CLERK | 20 |
| SALESMAN | 30 |
| MANAGER | 20 |
| MANAGER | 30 |
| MANAGER | 10 |
| ANALYST | 20 |
| PRESIDENT | 10 |
| CLERK | 30 |
| CLERK | 10 |
+-----------+--------+
9 rows in set (0.00 sec)

默认带all,不去除关键字的
mysql> select job,deptno from EMP;######等价于select all job,deptno from emp;
+-----------+--------+
| job | deptno |
+-----------+--------+
| CLERK | 20 |
| SALESMAN | 30 |
| SALESMAN | 30 |
| MANAGER | 20 |
| SALESMAN | 30 |
| MANAGER | 30 |
| MANAGER | 10 |
| ANALYST | 20 |
| PRESIDENT | 10 |
| SALESMAN | 30 |
| CLERK | 20 |
| CLERK | 30 |
| ANALYST | 20 |
| CLERK | 10 |
+-----------+--------+
14 rows in set (0.00 sec)


查询有员工的部门信息?
查询返回一个结果集,这就是一个集合,部门号在结果集里面,这是一个子查询
mysql> select distinct deptno from EMP;
+--------+
| deptno |
+--------+
| 20 |
| 30 |
| 10 |
+--------+
3 rows in set (0.00 sec)

mysql> select * from DEPT where deptno in (select distinct deptno from EMP);
+--------+------------+----------+
| deptno | dname | loc |
+--------+------------+----------+
| 10 | ACCOUNTING | NEW YORK |
| 20 | RESEARCH | DALLAS |
| 30 | SALES | CHICAGO |
+--------+------------+----------+
3 rows in set (0.00 sec)

3.union

  • union即联合查询,将多个查询联合在一起
  • UNION (无重复并集):当执行UNION 时,自动去掉结果集中的重复行,并以第一列的结果进行升序排序。

select empno,ename,job from emp where job='SALESMAN'
union
select empno,ename,job from emp where job='MANAGER';

也能实现,但不是排序的
select empno,ename,job from emp where job='MANAGER' or job='SALESMAN'

  • 测试:


4.union all

  • UNION ALL (有重复并集):不去掉重复行,并且不对结果集进行排序。

mysql> select job,sal from EMP where empno=7902 
mysql>union all
mysql>all select job,sal from EMP where empno=7788;
+---------+---------+
| job | sal |
+---------+---------+
| ANALYST | 3000.00 |
| ANALYST | 3000.00 |
+---------+---------+
2 rows in set (0.00 sec)

mysql> select job,sal from EMP where empno=7902
mysql>union
mysql>all select job,sal from EMP where empno=7788;
+---------+---------+
| job | sal |
+---------+---------+
| ANALYST | 3000.00 |
+---------+---------+
1 row in set (0.00 sec)


举报

相关推荐

0 条评论