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 表可以让解决方案标准化。

相关推荐
一只鹿鹿鹿4 小时前
政务外网整体设计方案(PPT)
大数据·数据库·web安全·系统安全·流程图·政务
2603_965148114 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
AI砖家4 小时前
安全进入 Agent Loop:2027 年 Coding Agent 的决胜点
数据库·安全·codex·vibecoding
wangqiaowq5 小时前
SQL server C盘空间占满的处理
数据库·sql
文人sec5 小时前
SQL基础入门笔记 | 从零基础到掌握核心查询语句
数据库·笔记·sql
数字新视界5 小时前
机房动环监控提升运维效率
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
SelectDB技术团队5 小时前
冷热分层从建到验:Storage Policy 创建、表级与分区级绑定、SHOW TABLETS 验证的完整命令
大数据·数据库·elasticsearch·搜索引擎·数据分析·apache doris·冷热分层
YangYang9YangYan7 小时前
2027供应链计划校招:数学与应用数学专业如何把预测模型讲成业务决策?
人工智能·sql·算法
lambo mercy7 小时前
Day3:结构化输出
java·数据库·oracle
派小心.7 小时前
小程序分享链路中来源参数的传递校验
大数据·前端·数据库·人工智能·小程序·数据分析