程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL語句裡集合操作

SQL語句裡集合操作

編輯:關於SqlServer

  學數學的時候都知道有交集和差集的概念。

  用SQL語句來表示交集和差集的時候會遇到很多小困難,比如條件有重復,編號有空等等。

  我最近在幫同事處理一些歌曲列表是否有版權的時候就遇到過這些困難,現在把它們記錄一下:

  copyright_songs表是有版權的歌曲清單 local_songs表是在用的歌曲清單

  生成歌曲名和歌手名都相同的交集用如下SQL:

select distinct t2.id,t1.name,t1.singer,t1.id as local_id,t1.company,
t2.company as copyright_company,t2.type
into same_1
from copyright_songs t2,local_songs t1
where (t1.name=t2.name and t1.singer=t2.singer)

  如果歌曲名稱裡面帶有括號,如:星語心願(節奏版)需要去掉歌曲裡面括號後再比較.

select * into local_songs_old from local_songs
update local_songs set name=left(name,charindex('(',name)-1)
where charindex('(',name)>0
drop table same_1
select distinct t2.id,t1.name,t1.singer,t1.id as local_id,t1.company,
t2.company as copyright_company,t2.type
into same_1
from copyright_songs t2,local_songs t1
where (t1.name=t2.name and t1.singer=t2.singer)


  顯示歌曲名和歌手名都相同歌曲清單(交集)

  select * from same_1

  顯示歌曲名和歌手名都相同歌曲清單,用原來帶括號的歌曲名

select distinct t1.id,t2.name,t1.singer,t1.local_id,t1.company,t1.num,t1.type
from same_1 t1,local_songs_old t2
where t1.t1_id=t2.id

  找到沒有版權對應的歌曲列表

  顯示編號是否有為空的記錄

  select * from local_songs where id is null

  select * from same_1 where local_id is null

  去掉編號為空的記錄

  delete from local_songs where id is null

  delete from same_1 where local_id is null

  生成本地歌曲表裡面沒有版權的歌曲清單(差集)

  select * into no_local_songs from local_songs

  where id not in (select local_id from same_1)

  顯示本地歌曲表裡面沒有版權的歌曲清單

  select * from no_local_songs

  沒有版權的歌曲就要屏蔽起來,不能再使用原來免費的互聯網音樂來贏利了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved