SQL进阶系列之2自连接】的更多相关文章

写在前面 一般地,SQL的连接运算根据其特征的不同,有着不同的名称,比如内连接.外连接.交叉连接等,这些连接大多是以不同的表或视图为对象进行的,针对相同的表进行的连接成为自连接.理解自连接有助于我们理解SQL面向集合的语言特性. 可重排列.排列.组合 CREATE TABLE Products (name VARCHAR(16) PRIMARY KEY, price INTEGER NOT NULL); --可重排列·排列·组合 INSERT INTO Products VALUES('苹果',…
写在前面 关系模型的数据结构里,并没有顺序的概念,但SQL处理有序集合也有坚实的理论基础 生成连续编号 --生成连续编号 CREATE TABLE Digits (digit INTEGER PRIMARY KEY); INSERT INTO Digits VALUES (0); INSERT INTO Digits VALUES (1); INSERT INTO Digits VALUES (2); INSERT INTO Digits VALUES (3); INSERT INTO Digi…
写在前面 集合论是SQL语言的根基,因为这种特性,SQL也被称为面向集合语言 导入篇:集合运算的几个注意事项 注意事项1:SQL能操作具有重复行的集合(multiset.bag),可以通过可选项ALL来支持 SQL的集合运算符提供了允许重复和不允许重复两种用法,UNION和INTERSECT结果里不会出现重复的行,UNION ALL则会保留重复行:ALL的作用和SELECT子句中的DISTINCT相反.ALL有助于优化查询性能,这是因为使用ALL后不再进行排序 注意事项2:集合运算符存在优先级…
写在前面 使用SQL对同一行数据进行列间的比较很简单,只需要在WHERE子句里写上比较条件就可以了,对于不同行数据进行列间比较需要使用自关联子查询. 增长.减少.维持现状 需要用到行间比较的经典场景是时间序列分析 -- 建表语句 -- 增长.减少.维持现状 CREATE TABLE Sales (year INTEGER NOT NULL , sale INTEGER NOT NULL , PRIMARY KEY (year)); INSERT INTO Sales VALUES (1990,…
写在前面 SQL是面向集合的语言,与面向过程和面向对象语言都不一样 寻找缺失的编号 /* 寻找缺失的编号 */ CREATE TABLE SeqTbl (seq INTEGER PRIMARY KEY, name VARCHAR(16) NOT NULL); INSERT INTO SeqTbl VALUES(1, '迪克'); INSERT INTO SeqTbl VALUES(2, '安'); INSERT INTO SeqTbl VALUES(3, '莱露'); INSERT INTO S…
动态的生成sql语句,根据不同的条件构造不同的where字句,是拼接sql 字符串的好处.而Linq的推出,是为了弥补编程中的 Data != Object 的问题.我们又该如何实现用object的动态查询呢? 1,用object的查询是什么?我们可以简单的举这么一个例子.我们到公安局查找一个人.首先,我们会给出他的一些特征,比如,身高多少,年龄多少,性别,民族等.那么,我们把这个人的一些特征输入电脑.我们希望,电脑能给我们返回这个人的信息.而实际上,有相同特征的人太多了,常常返回一个集合.那让…
写在前面 KISS -- keep it sweet and simple 表的设计 注意命名的意义 英文字母 + 阿拉伯数字 + 下划线"_" 属性和列 编程的方针 写注释 注意缩进 空格 大小写 逗号 不适用通配符(*) ORDER BY 不适用列编号,而是列名 SQL编程方法 请说普通话 不适用以来各种数据库实现的函数和运算符 连接操作使用标准与法,增加代码可移植性 "左派"和"右派" 尽量使用左连接 从FROM子句开始写起…
写在前面 HAVING子句的处理对象是集合而不是记录 各队,全队点名 --各队,全体点名! CREATE TABLE Teams (member CHAR(12) NOT NULL PRIMARY KEY, team_id INTEGER NOT NULL, status CHAR(8) NOT NULL); INSERT INTO Teams VALUES('乔', 1, '待命'); INSERT INTO Teams VALUES('肯', 1, '出勤中'); INSERT INTO T…
写在前面 SQL的性能优化是数据库使用者必须面对的重要问题,本节侧重SQL写法上的优化,SQL的性能同时还受到具体数据库的功能特点影响,这些不在本节讨论范围之内 使用高效的查询 参数是子查询时,使用EXISTS代替IN -- 使用EXISTS替代IN的建表语句 CREATE TABLE Class_A (id char(1), name varchar(30), PRIMARY KEY(id)); CREATE TABLE Class_B (id char(1), name varchar(30…
写在前面 支撑SQL和关系数据库的基础理论:数学领域的集合论和逻辑学标准体系的谓词逻辑 理论篇 什么是谓词?谓词是返回值为真值(true false unknown)的函数 关系数据库里,每一个行数据可以看作是一个命题 实体的阶层 0阶实体(单行) -- 1阶谓词( = between and) 1阶实体(行集合/表) -- 2阶谓词 (exists) 2阶实体(表的集合) -- 3阶谓词 1970被毙掉,目前数据库均以二阶谓词为基准 全称量化与存在量化 全称量词:所有的\(x\)都满足条件\(…