A. mysql通过sql语句判断某个字段是否存在
本文为大家详细介绍下通过mysql查询某个字段所在表是哪一个,具体的sql语句如下,感兴趣的朋友可以参考下,希望对大家有所帮助
复制代码
代码如下:
select
table_schema,table_name
from
information_schema.`columns`
where
column_name
=
'col1'
col1为子段名。
B. 关于sql查询b表中存在,a表中不存在的数据
这实际上是求非交集(差集)问题,sql语句求差集相对于求交集的办法要少得多。
求差集方法中,使用not in关键字进行筛选在逻辑上最容易理解,很多人都会想到利用到它,数据量不大时还行,但是它有个重大缺陷,那就是在碰到大数据表的情况下其运行效率极低,有没有可被利用的索引效率都一样极差。我曾在利用大数据表的测试中,发现not in 语句常常要花费数小时才能返回结果,最夸张的例子耗时竟然超过一天!在返回结果前数据查询会处在"假死"状态,让人感觉是返回了空集似的,其实不是那样的,只是数据库引擎尚未完成运算而已。
在有可被利用的索引情况下,我们可以利用非存在not exists子句来筛选出两表之间的差集,其运行效率是非常高的。以题主的语句为例可改写如下:
原来使用not in筛选差集,大数据表效率极差:
SELECT ipdz FROM ipdz_b WHERE ipdz not in(select ipdz_d from zj_b);
而使用not exists筛选差集,大数据表有索引可利用时返回结果酒快多了:
select b.ipdz from ipdz_b b where not exists(
select 1 from zj_b a where a.ipdz_d=b.ipdz);
请留意不要踩not exists的坑!尽管它在有可被利用的索引时运行效率极高,但是如果没可利用的索引它会跟not in一样在遇到大数据表时, 运行运行效率也很糟!
在没有索引可被利用的情况下,建议利用左(右)联接出现的null值来求出差集,但是需要留意并小心处理因两表连接所导致的记录行变多问题。
下面是以题主的表结构为例的sql语句写法,其返回结果集的速度还是很不错的:
left join 筛选差集:
select b.ipdz from ipdz_b b left join zj_b a on
a.ipdz_d=b.ipdz where a.ipdz_d is null;
这里假设a表的ipdz_d是唯一的,如果非唯一需调整如下
select b.ipdz from ipdz_b b left join (
select distinct ipzd_d from zj_b) a on
a.ipdz_d=b.ipdz where a.ipdz_d is null;
总结:
小数据量not in随便用,此方法逻辑简单,语句易于编写;
大数据量在有可利用的索引情况下,建议首选 not exists(因为效率最高);
大数据量时,有没有可被利用的索引not in都要避免使用。而not exists 在没索引可利用时也应避免使用,此时建议使用左left join或右连接返回差集会有比较好的表现。
后两种方法在逻辑上不太好理解,还要处理因连接导致的记录行变多问题,语句编写相对麻烦。
C. SQL语句问题 如何查询出此表是否存在,如表名:tableName
SQL学习之查询技巧 查询表是否存在的两种方法
方法一 判断系统对象是否存在
DECLARE
@DbTableFileName VARCHAR(100)
SET @DbTableFileName = 'tx'
IF objectproperty(object_id(@DbTableFileName),'IsUserTable') IS NOT NULL
PRINT 'EXISTS '
ELSE
PRINT 'NOT EXISTS '
IF object_id(@DbTableFileName) IS NOT NULL
PRINT 'EXISTS '
ELSE
PRINT 'NOT EXISTS '
IF EXISTS (SELECT Object_id(@DbTableFileName))
PRINT 'EXISTS '
ELSE
PRINT 'NOT EXISTS '
方法二 通过查询系统表
DECLARE
@DbTableFileName VARCHAR(100)
SET @DbTableFileName = 'tx'
IF EXISTS (SELECT 1
FROM sysobjects
WHERE name = @DbTableFileName
AND TYPE = 'u')
PRINT 'EXISTS '
ELSE
PRINT 'NOT EXISTS '
方法一更安全,
D. 如何使用sql语句判断一个数据库是否已经存在
1.数据库
if exists(select 1 from master..dbo.sysdatabases where name='example')
print 'DataBase existed'
else
print 'Database not existed'
2.表
IF Exists(Select 1 From sysObjects Where Name ='表名' And Type In ('S','U'))
Print 'Exists Table'
Else
Print 'Not Exists Table'
E. sql里判断表存在不存在的语句
使用exists判断。
以Oracle为示例:
exists(select 1 from all_tables u where 条件一:限制用户名 and 条件二:限制表名)
查询系统字典表all_tables,判断表是否存在,存在则结果为真;不存在则结果为假
通过结合if语句使用:
if exists(select 1 from all_tables u where 条件一:限制用户名 and 条件二:限制表名) then 执行子句一
else 执行子句二;
F. 用SQL语句查询表中是否存在某条数据,若有返回1,若无返回0。不用存储过程怎么实现
CASE WHEN 你的条件 THEN '1' ELSE '0' END case 和 when 一般用来将行转化为列 将列转换为行 还有一种方法是 rownumber
G. sql语句,怎样判断一个字段中是否存在某一个值
可以参考下面的描述:
INSTR(C1,C2,I,J)
在一个字符串中搜索指定的字符,返回发现指定的字符的位置;
C1 被搜索的字符串
C2 希望搜索的字符串
I 搜索的开始位置,默认为1
J 出现的位置,默认为1
SQL> select instr(’oracle traning’,’ra’,1,2) instring from al;
INSTRING
---------
9
(7)sql语句查询是否存在扩展阅读:
基本语句
MAX(字段名) 取得一个表格栏最大的值
MIN(字段名) 取得一个表格栏最小的值
SUM(字段名) 把数据栏的值相加
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
H. SQL语句中判断记录是否存在该怎么写
IFEXISTS(SELECT1FROM[表名]WHERE条件)
BEGIN
--处理代码
END
I. sql语句 判断表是否存在
用户表在当前数据库的系统表中,可使用以下语句进行查找:
select Name,ID from sysobjects where xtype='U'
若是将xtype='U'换成xtype='V'就可以查出来所有视图
xtype参数大概有以下种类:
C = CHECK 约束
D = 默认值或 DEFAULT 约束
F = FOREIGN KEY 约束
FN = 标量函数
IF = 内嵌表悄锋函数
K = PRIMARY KEY 或 UNIQUE 约束
L = 日志
P = 存储过程
R = 规则
RF = 复制筛选歼运颂存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
V = 视氏郑图
X = 扩展存储过程
J. SQL 语句判断记录是否存在
方法1:
判断表中是否存在记录的SQL语句
判断表中是否存在记录,我们惯常使用的语句是:
select COUNT(*) from tableName where conditions
方法2:
如果只是判断记录是否存在,而不需要获取实际表中的记录数还有一种推荐做法:
if exists (select * from tableName where conditions) select '1' else select '0'
通过返回值去判断是否存在。
据推荐,第二种方法效率高些,但使用profiler工具分析
通过where条件过滤出100多条数据时。第一种方法的rtion明显比第二种方法的低很多
也就是说,第一种效率高些。