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

相关推荐
布朗克1681 小时前
40 Redis与微服务入门
java·数据库·redis·微服务
我是大猴子2 小时前
Stream流式编程
数据库·sql
Bert.Cai2 小时前
Oracle ASCII函数详解
数据库·oracle
跨境猫小妹2 小时前
多国海关字段持续细化后跨境卖家如何搭建商品信息映射表
大数据·数据库·人工智能·跨境电商·跨境·营销策略
峥无2 小时前
MySQL 最全数据类型详解(数值/字符串/日期/枚举集合)
数据库·mysql
IT策士2 小时前
Redis 从入门到精通:Redis Sentinel 哨兵
数据库·redis·sentinel
云器科技2 小时前
螳螂科技:从组装到统一,如何用云器 Lakehouse 完美替代“MC+DW+ADB”三件套?
数据库·数据仓库·人工智能
Amnesia0_02 小时前
MySQL的访问和数据流动
数据库·mysql