SQL经典实例——概述

概述

1、平台和版本

  • DB2 11.5
  • Oracle Database 19c
  • PostgreSQL 12
  • SQL Server 2017
  • MySQL 8.0

2、使用的表

emp表:

sql 复制代码
CREATE TABLE `emp` (
	EMPNO INT(10) PRIMARY KEY,
	ENAME VARCHAR(20) NOT NULL,
	JOB VARCHAR(20) NOT NULL,
	MGR INT(10),
	HIREDATE VARCHAR(20) NOT NULL,
	SAL INT(10),
	COMM INT(10),
	DEPTNO INT(10)
);

INSERT INTO `emp` VALUES
(7369, 'SMITH', 'CLERK', 7902, '17-DEC-2005', 800, NULL, 20),
(7499, 'ALLEN', 'SALESMAN', 7698, '20-FEB-2006', 1600, 300, 30),
(7521, 'WARD', 'SALESMAN', 7698, '22-FEB-2006', 1250, 500, 30),
(7566, 'JONES', 'MANAGER', 7839, '02-APR-2006', 2975, NULL, 20),
(7654,  'MARTIN', 'SALESMAN', 7698, '28-SEP-2006', 1250, 1400, 30),
(7698, 'BLAKE', 'MANAGER', 7839, '01-MAY-2006', 2850, NULL, 30),
(7782, 'CLARK', 'MANAGER', 7839, '09-JUN-2006', 2450, NULL, 10),
(7788, 'SCOTT', 'ANALYST', 7566, '09-DEC-2007', 3000, NULL, 20),
(7839, 'KING', 'PRESIDENT', NULL, '17-NOV-2006', 5000, NULL, 10),
(7844, 'TURNER', 'SALESMAN', 7698, '08-SEP-2006', 1500, 0, 30),
(7876, 'ADAMS', 'CLERK', 7788, '12-JAN-2008', 1100, NULL, 20),
(7900, 'JAMES', 'CLERK', 7698, '03-DEC-2006',  950, NULL, 30),
(7902, 'FORD', 'ANALYST', 7566, '03-DEC-2006', 3000, NULL, 20),
(7934, 'MILLER', 'CLERK', 7782, '23-JAN-2007', 1300, NULL, 10);

dept表:

sql 复制代码
CREATE TABLE `dept`(
	DEPTNO INT(10) PRIMARY KEY,
	DNAME VARCHAR(20) NOT NULL,
	LOC VARCHAR(20) NOT NULL
);

INSERT INTO `dept` VALUES
(10, 'ACCOUNTING', 'NEW YORK'),
(20, 'RESEARCH', 'DALLAS'),
(40, 'OPERATIONS', 'BOSTON');

还使用了 4 张透视表(pivot table)​,即 T1、T10、T100 和 T500。由于这些表只用于简化转置工作,因此本书并未给它们指定意义深远的名称。在每张透视表的名称中,T 后面的数字指出了表中包含的行数。

sql 复制代码
CREATE TABLE `t1` (
	ID INT(10) PRIMARY KEY
);

CREATE TABLE `t10` (
	ID INT(10) PRIMARY KEY
);

CREATE TABLE `t100` (
	ID INT(10) PRIMARY KEY
);

CREATE TABLE `t500` (
	ID INT(10) PRIMARY KEY
);

DROP PROCEDURE IF EXISTS insert_id;

DELIMITER $$
CREATE PROCEDURE insert_id (
    IN max_id INT
)
BEGIN
	DECLARE v_current INT;
  SELECT 1 INTO v_current;
	WHILE v_current <= max_id DO
		INSERT INTO t500 (ID) VALUES (v_current);
		SET v_current = v_current + 1;
	END WHILE;
END 
$$
DELIMITER ;

CALL insert_id(500);

在你需要创建一系列行以简化查询编写工作时,透视表提供了极大的便利。

另外,有些厂商支持不完整的 SELECT 语句,例如,你可以编写不包含 FROM 子句的 SELECT 语句。在本书有些地方,为清晰起见,会使用只包含一行数据的支持表T1,而不使用不完整的查询。T1 表的用途与 Oracle 的DUAL 表类似,但 T1 表可以让解决方案标准化。

相关推荐
这个DBA有点耶2 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G2 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备2 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远2 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
漂着的圆木2 天前
Agent 功能参与度:Copilot 怎么算
sql·数据分析·agent·githubcopilot·度量
2601_962218612 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
张洛闻Eren2 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
于平安2 天前
MySQL-触发器
数据库·mysql
白远山3 天前
上海24小时自助健身房解决方案实战指南与经验分享
java·数据库·架构·需求分析
Omics Pro3 天前
斯坦福Nature+Science|广义虚拟细胞基础大模型
数据库·人工智能·算法·机器学习·自然语言处理