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

相关推荐
清晨0013 分钟前
国产化数据库替代方案:openGauss 详解与 MySQL 平滑迁移实战
数据库·mysql
λqaq711 分钟前
MongoDB数据库基础 :非关系型数据库入门与常用操作
数据库·学习·mongodb·nosql
词却19 分钟前
数据库基础:TCL事务与DDL视图
数据库
码农小麦19 分钟前
LangChain 1.3.18 + DeepSeek-v4-flash 工具调用踩坑实录
网络·数据库·langchain
FfHUCisI32 分钟前
Golang 切片扩容策略
开发语言·数据库·golang
en.en..33 分钟前
Ubuntu嵌入式开发 export环境变量
java·开发语言·数据库
攻城有术39 分钟前
专项攻克——重写 Redis 依赖包方法的 6 种实现方式
java·数据库·redis·bootstrap
IvorySQL1 小时前
基于 PostgreSQL 的非线性回归原理与 AI 数据库融合实践
数据库·人工智能·postgresql
赵渝强老师1 小时前
【赵渝强老师】高斯数据库(openGauss)的数据库对象
数据库·postgresql·opengauss·国产数据库·高斯数据库
DLYSB_1 小时前
交换机不会 HTTP 怎么办:用 SNMP Get / Trap 把指标和中断打到博灵声光 TTS
数据库·报警灯