1,select * from a where not exists(select 1 from B where a.id = b.id and a.bb='cc')
像这种不存在一般是找id联合但是a.bb不等以cc的,但是为什么不能理解成我要找a.bb=c但是不存在id相等的呢?
因为我试验
select * from a where not exists(select 1 from B where a.id = b.id and a.mid = b.mid and a.bb='cc')
就会出现问题,所以始终没弄明白not exists针对条件是如何的不存在?2,varchar是可变长度我想问下它占据磁盘空间吗?按理说不占据以为varchar容易产生碎片,那我都申请255最大长度不行吗?为什么不能总申请最大呢?谢谢
像这种不存在一般是找id联合但是a.bb不等以cc的,但是为什么不能理解成我要找a.bb=c但是不存在id相等的呢?
因为我试验
select * from a where not exists(select 1 from B where a.id = b.id and a.mid = b.mid and a.bb='cc')
就会出现问题,所以始终没弄明白not exists针对条件是如何的不存在?2,varchar是可变长度我想问下它占据磁盘空间吗?按理说不占据以为varchar容易产生碎片,那我都申请255最大长度不行吗?为什么不能总申请最大呢?谢谢
像这种不存在一般是找id联合但是a.bb不等以cc的,但是为什么不能理解成我要找a.bb=c但是不存在id相等的呢?
因为我试验
select * from a where not exists(select 1 from B where a.id = b.id and a.mid = b.mid and a.bb='cc')
就会出现问题,所以始终没弄明白not exists针对条件是如何的不存在?
这句话的意思是子查询中的id,mid,a.bb='cc'的条件在A表中不存在2,varchar是可变长度我想问下它占据磁盘空间吗?按理说不占据以为varchar容易产生碎片,那我都申请255最大长度不行吗?为什么不能总申请最大呢?谢谢 占据磁盘空间的 所以如果知道长度的话 还是设置具体长度比较好
where a.bb<>'cc'
小F不知道和sql server是否一样呢原文是这样
四是即使使用Varchar数据类型,也不能够太过于慷慨。这是什么意思呢?如现在用户需要存储一个地址信息。根据评估,只要使用100个字符就可以了。但是有些数据库管理员会认为,反正Varchar数据类型是根据实际的需要来分配长度的。还不如给其大一点的呢。为此他们可能会为这个字段一次性分配200个字符的存储空间。这VARCHAR(100)与VARCHAR(200)真的相同吗?结果是否定的。虽然他们用来存储90个字符的数据,其存储空间相同。但是对于内存的消耗是不同的。对于VARCHAR数据类型来说,硬盘上的存储空间虽然都是根据实际字符长度来分配存储空间的,但是对于内存来说,则不是。其时使用固定大小的内存块来保存值。简单的说,就是使用字符类型中定义的长度,即200个字符空间。显然,这对于排序或者临时表(这些内容都需要通过内存来实现)作业会产生比较大的不利影响。所以如果某些字段会涉及到文件排序或者基于磁盘的临时表时,分配VARCHAR数据类型时仍然不能够太过于慷慨。还是要评估实际需要的长度,然后选择一个最长的字段来设置字符长度。如果为了考虑冗余,可以留10%左右的字符长度。千万不能认为其为根据实际长度来分配存储空间,而随意的分配长度,或者说干脆使用最大的字符长度
使用 EXISTS 和 NOT EXISTS 引入的子查询可用于两种集合原理的操作:交集与差集。两个集合的交集包含同时属于两个原集合的所有元素。差集包含只属于两个集合中的第一个集合的元素。city 列中 authors 和 publishers 的交集是作者和出版商共同居住的城市的集合。USE pubs
SELECT DISTINCT city
FROM authors
WHERE EXISTS
(SELECT *
FROM publishers
WHERE authors.city = publishers.city)下面是结果集:city
--------
Berkeley(1 row(s) affected)当然,该查询可以写成一个简单的联接。USE pubs
SELECT DISTINCT authors.city
FROM authors INNER JOIN publishers
ON authors.city = publishers.citycity 列中 authors 和 publishers 的差集是作者所居住的、但没有出版商居住的所有城市的集合,也就是除 Berkeley 以外的所有城市。USE pubs
SELECT DISTINCT city
FROM authors
WHERE NOT EXISTS
(SELECT *
FROM publishers
WHERE authors.city = publishers.city)该查询也可以写成:USE pubs
SELECT DISTINCT city
FROM authors
WHERE city NOT IN
(SELECT city
FROM publishers)
如果一页存储数据 数据行特别大 4.5kB 那么数据页剩余空间很能利用 产生碎片
Varchar 类型在 数据行存储的时候 在存储的时候会标示变长字段的列数和各列终止位置