mysql dual表的用途及案例


轉自https://blog.csdn.net/weixin_44145478/article/details/107079176

mysql文檔中對於dual表的解釋:

You are allowed to specify DUAL as a dummy table name in situations
where no tables are referenced: 你可以在沒有表的情況下指定一個虛擬的表名 mysql> SELECT 1 +
1 FROM DUAL;
-> 2 DUAL is purely for the convenience of people who require that all SELECT statements should have FROM and possibly other clauses. MySQL
may ignore the clauses. MySQL does not require FROM DUAL if no tables
are referenced.
DUAL是為了方便那些要求所有SELECT語句都應該具有FROM和其他子句的人。MySQL可能會忽略該條款。如果沒有引用表,MySQL不需要從DUAL。

1 select 7*9 from dual;     計算器
2 SELECT SYSDATE() from dual     獲取系統時間

案例
開發過程中,需要對數據進行excel展示或導出,並且需要各種類型的數據,這里提供一種通過dual表來實現
在這里插入圖片描述
創建表teacher,插入數據

1 CREATE TABLE `teacher` (
2   `id` bigint(20) NOT NULL AUTO_INCREMENT,
3   `name` varchar(10) DEFAULT NULL,
4   `age` int(11) DEFAULT NULL,
5   `score` int(10) DEFAULT NULL,
6   PRIMARY KEY (`id`),
7   KEY `index_three_key` (`name`,`age`,`score`)
8 ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COMMENT='老師';
1 INSERT INTO teacher(id,name,age,score) VALUES(1,'Alen',32,98),(2,'Aony',43,1),
2 (3,'Dansy',53,78),(4,'Fulanke',25,65),(5,'Tom',32,54)
 1 SELECT
 2     '員工匯總' AS id,
 3     '' AS NAME,
 4     '' AS age,
 5     '' AS score 
 6 FROM
 7 DUAL UNION ALL
 8 SELECT
 9     * 
10 FROM
11     teacher UNION ALL
12 SELECT
13     '平均值' AS id,
14     '' AS NAME,
15     '' AS age,
16     cast(
17     AVG( score ) AS DECIMAL ( 10, 3 )) AS score 
18 FROM
19     teacher UNION ALL
20 SELECT
21     '' AS id,
22     '' AS NAME,
23     '' AS age,
24     '' AS score 
25 FROM
26 DUAL UNION ALL
27 SELECT
28     '績效' AS id,
29     '' AS NAME,
30     '' AS age,
31     '' AS score 
32 FROM
33 DUAL UNION ALL
34 SELECT
35     'A(評分)' AS id,
36     'B(評分)' AS NAME,
37     'C(評分)' AS age,
38     'D(評分)' AS score 
39 FROM
40 DUAL UNION ALL
41 SELECT
42     ( SELECT COUNT( score ) FROM teacher WHERE score >= 90 ) AS id,
43     ( SELECT COUNT( score ) FROM teacher WHERE score >= 80 AND score < 90 ) AS NAME,
44     ( SELECT COUNT( score ) FROM teacher WHERE score >= 60 AND score < 80 ) AS age,
45     ( SELECT COUNT( score ) FROM teacher WHERE score < 60 ) AS score 
46 FROM
47 DUAL

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM