當前位置:首頁 » 編程語言 » sql中的不存在用什麼關鍵字
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql中的不存在用什麼關鍵字

發布時間: 2022-04-02 02:26:50

1. sql 判斷是否存在,不存在執行下一條語句

if not eixsts (select * from gds where id='123' )
select * from gds2 where id=123

2. 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 執行子句二;

3. 求一個sql篩選表中不存在的記錄

假設表A 列名Userid 值有 1,2,3,4,5
表B 列名Userid 值有 1,2,4,5,6,7

select Userid from B where not exists(select * from a where a.userid=b.userid)

4. SQL語句:怎樣顯示表裡不存在的數據

你做一個臨時表,把這些號碼先插到臨時表裡面,然後在寫sql,比如臨時表為BBB,插入欄位為ID:
select b.ID from BBB b where 1=1 and not exists(select 1 from AAA a where a.ID=b.ID)

5. SQL查詢不存在的值

select A表.欄位1,A表.欄位2
from A表 left join B表
on A表.欄位1 = B表.欄位1
where B表.欄位1 is null

6. mysql中的sql語句存在關鍵字怎麼辦

  1. 用逗引將關鍵字的欄位引起來,insert into tb_test `use` values ('test');逗引就是數字鍵旁邊的那個,在英文輸入法下按下建議:資料庫表的設計避過關鍵字。

  2. 如果sql語句中存在關鍵字,可以用反勾號(Esc下面的那個鍵)做轉義;

  3. ` 是 MySQL 的轉義符,避免和 mysql 的本身的關鍵字沖突,只要你不在列名、表名中使用 mysql 的保留字或中文,就不需要轉義。

  4. 所有的資料庫都有類似的設置,不過mysql用的是`而已。通常用來說明其中的內容是資料庫名、表名、欄位名,不是關鍵字。例如:select from from table;

  5. 第一個from是欄位名,最後的table表名,但是同時也是mysql關鍵字,這樣執行的時候就會報錯,所以應該使用。

7. sql語句,查詢一條不存在的記錄

select rownum FROM DUAL CONNECT BY ROWNUM <= 600
minus
select id from m
;

8. 關於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或右連接返回差集會有比較好的表現。

後兩種方法在邏輯上不太好理解,還要處理因連接導致的記錄行變多問題,語句編寫相對麻煩。

9. sql中 關於取表中不存在的值的寫法

真服了你,還用日文,這個看了有點不爽。本來不想回答,想想還是算了:
Create table 另一張表名稱 Select * From 表2 where 年月日 not in (select 年月日 from HolidayMaster)
---------------------------------------------
看了你的提示,感覺你的提問方式不是很好理解。
HolidayMaster是存放休息日,那麼工作日不就是除休息日以外的日子嘛!那麼你想建一張新表,存放工作日(workday),這張新表的欄位有幾個?分別是什麼等都沒說明白。網路知道這個平台,問題表達的越清楚,就越可能得到最想要的答案。我就寫一個最簡單的,你不理解,我也沒辦法了:
第一步:生成一個一年365天的臨時表
1.按照HolidayMaster結構生成一張空表
select * into AllDay from HolidayMaster where 1<>1
2.向空表插入一年的數據
declare @i int
set @i=1
while @i<365
begin
insert into AllDay (yyyymmdd) values(DateAdd(day,@i,getdate()))
set @i=@i+1
end
3.完成你想要的答案:
Select Right(convert(char(10),yyyymmdd,121),5) as mmdd into NewTable from AllDay Where Right(convert(char(10),yyyymmdd,121),5) not in
(Select Right(convert(char(10),yyyymmdd,121),5) From HolidayMaster)

說明:Right(convert(char(10),yyyymmdd,121),5) as mmdd 是取年月日中的右五位,即月日,作為列名mmdd。所以NewTable只有一列(mmdd),表示工作日。

實現功能總結:
例如:HolidayMaster有兩條記錄 2010-04-05 和 2010-04-06(這里年無關緊要,因為通過說明會去除)
那麼NewTable就是一年365天中去除這兩天的所有天。

10. 如何用SQL語句查詢後,返回不存在的值,並用一個字元代替

假如張三這個人不存在,在sqlserver里就這么執行
select case when 工資 is null then 0 end from 表 where 員工姓名='張三'
上邊這個有問題,剛才改了一下,上邊這個問題是,如果不存在這個員工,那麼選定行就是0,所以還是得不出結果
試驗下邊這個
select sum(a.工資) from
(select 0 as 工資 union all
select 工資 from 表 where 員工姓名='張三') a;