sql学习笔记

发布 2021-05-02 03:23:28 阅读 3703

与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。

交叉连接(crossjoin)没有where子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 连接操作中的on(join_condition)子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。

内连接详解:

内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。

等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

不等连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括》、>和<>。

自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。

外连接详解:

内连接时,返回查询结果集合中的仅是符合查询条件(where搜索条件或h**ing条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。

左外连接:selecta.*,b.*fromluntanleftjoinusertableasb

右外连接:selecta.*,b.*fromluntanrightjoinusertableasb

全外连接:selecta.*,b.*

fromcityasafullouterjoinuserasb

交叉连接详解:

交叉连接不带where子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。

selecttype,pub_name

fromtitlescrossjoinpublishers

orderbytype

外部连接分为左外部连接(leftouterjoin)和右外部连接(rightouterjoin)两种。以主表所在的方向区分外部连接,主表在左边,则称为左外部连接,主表在右边,则称为右外部连接。

假设有两个表a和b,它们的结构相同(一个id列), 但是数据不一定相同, 现要求查找,存在于表a中,而不存在于表b中的记录:

方法一: 用not exists

select from where not exists (select id from b where =

注:用not exists的,一定可以使用"in" 来完成,区别(oracle中):

对用in的sql, oracle试图将其转换成多个表的连接,如果转换不成功则先执行in里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询。由此可见用in的sql至少多了一个转换的过程。一般的sql都可以转换成功,但对于含有分组统计等方面的sql就不能转换了。

推荐方案:在业务密集的sql当中尽量不采用in操作符,用exists 方案代替。

方法二: 用out join

select from a left join b on = where is null;

如果是对oracle数据库, 可以使用其特别的left join 表示方式:

select from a ,b where = and is null;

注:这里, "所在位置的另一侧为连接的方向。 事实上, 所有not exists的查询也都是可以用outer join 来完成的, 其特点就是最后指定一个where 语句, 且该列的值为null.

另外, 一般来说,在用outer join的时候, 如果是用了索引列作为 join的关键字, 那么, outer join的性能应该是比not exists 高, 但是, 如果join的关键字不是索引列, 两者谁的性能高, 需要试验。

union和union all的区别。

union和union all关键字都是将两个结果集合并为一个,但是这两者从使用和效率上来说都有所不同。

union是先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集。

union all只是简单的将两个结果合并后就返回,但执行速度比union快。

常用数据库优化方法:

1. 静态化,静态化分为页面静态化和数据静态化。页面静态化就是固化页面数据,数据静态化是指将常用数据固化到xml或properties文件中。

2. 分表。避免一个表过大的问题,把字段抽取存在其他表中。

3. 分库。将系统按照模块相关的特征分布到不同的数据中,以提高系统整体负载能力。

4. 定时任务。定时执行相关性能消耗大的数据库任务。

数据库并发问题:

并发控制以事务为单位进行,事务是数据库的逻辑工作单位,它是用户定义的一组操作序列。

事务具有4种属性:原子性、一致性、隔离性和持久性。

原子性:事务的原子性保障事务包含的一组更新操作时原子不可分的,是一个整体。要么全做,要么全不做,不能部分完成。

当发生崩溃时,系统能根据这些操作记录当时该事务处于何种状态,以此确定是撤销该事务所作出的所有修改操作,还是将修改的操作重新执行。

一致性:一致性要求事务执行完成后,将数据库从一个一致装药转变到另一个一致状态。

隔离性:隔离性意味着一个事务的执行不能被其他事务干扰。就是一个事务在执行过程中,其他事务不能操作其正在操作的数据,一般是用加锁机制实现。

持久性:系统提供的持久性保证要求一旦事务提交,那么对数据库所做的修改将是持久的,无论发生何种机器和系统故障都不应该对其有任何影响。

SQL学习笔记

目录。1 数据库创建 1 2 创建表 1 3 表结构查询 2 4 在表中增加列 3 5 修改列的约束属性 3 6 使用insert into 语句添加数据 3 7 使用 select into 添加相关的数据到一个新表中 4 8 间接修改列为非空值的办法 4 9 更为完善的create table ...

SQL学习笔记

where子句。比较运算符 范围说明 between a and b,not between a and b.可选值列表 in not in 一般用于嵌套查询。模式匹配 like not like 是否空值 is null is not null 上述条件的逻辑组合 and or not 内容大小写...

SQL学习笔记

增加记录。在使用sql数据库的时候,我们也许会需要一次像数据库中添加多条记录,那么我们可以使用sql语句来实现,该语句具体如下 添加一条记录。insert into tablename col1,col2,col3 values 1,2,3 添加多条记录。insert into tablename ...