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

相关推荐
无言听风雨丶2 小时前
Redis 运维实战与排错
运维·数据库·redis
小天源4 小时前
智叟云集系统 · 架构与职责分层
服务器·前端·数据库
herinspace4 小时前
管家婆实用贴-SQL 2008如何修改成混合模式
服务器·数据库·sql·管家婆软件·财务软件·合肥管家婆软件
打螺丝的小李4 小时前
制造企业质量管理系统的三类产品形态:分别解决什么问题
数据库·制造
xixingzhe25 小时前
MySQL 锁表故障排查与处理
数据库·mysql
真上帝的左手5 小时前
30. 技术专题-‌应用框架组件-关系型数据库-MySQL-Mybatis
数据库·分布式·mysql·中间件·mybatis
为思念酝酿的痛5 小时前
MySQL表的连接
数据库·mysql
数字新视界5 小时前
机房动环监控系统在提升数据中心能效与安全中的应用探索
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
bksczm6 小时前
MySQL之存储引擎
数据库·mysql
大模型最新论文速读6 小时前
text-to-sql:从学术玩具到生产落地
数据库·sql