常用SQL語句例項(含過濾及刪除重複資料、匯入匯出資料等)
本文整理一些常用的SQL語句例項(如過濾重複資料、刪除重複資料、匯入匯出資料等),收藏備用,不斷更新中……。歡迎訪問作者網站獲取最新版:http://hi.wonsoft.cn
-------------------------------第一部份 高階技巧-------------------------------------------
一、過濾重複資料
1、完全重複的記錄
- /* 功能:指定欄位完全重複 */
- select distinct 欄位1,欄位2,欄位3 from 資料表
2、部分關鍵欄位重複的記錄
- /*資料結構:角色檔案(角色編碼,角色,角色分類編碼)
-
功 能:取出指定欄位(角色分類編碼)為關鍵字的無重複資料,重複的取第一條
- 說 明:重複記錄取最後一條,只需要把min改成max即可
- */
- select * from 角色檔案 t where 角色編碼 in (select min(角色編碼) from 角色檔案 t1 group by t1.角色分類編碼)
二、刪除重複記錄
資料庫的使用過程中由於程式方面的問題有時候會碰到重複資料,重複資料導致了資料庫部分設定不能正確設定,本例舉出刪除它的辦法。
方法1:
- declare @max integer,@id integer
- declare cur_rows cursor local for select 主欄位,count(*) from 表名 group by 主欄位 having count(*) > 1
- open cur_rows
- fetch cur_rows into @id,@max
- while @@fetch_status=0
- begin
- select @max = @max -1
- set rowcount @max
- delete from 表名 where 主欄位 = @id
- fetch cur_rows into @id,@max
- end
- close cur_rows
- set rowcount 0
方法2:
有兩個意義上的重複記錄,一是完全重複的記錄,也即所有欄位均重複的記錄,二是部分關鍵欄位重複的記錄,比如Name欄位重複,而其他欄位不一定重複或都重複可以忽略。
1、對於第一種重複,比較容易解決,使用
- select distinct * from tableName
就可以得到無重複記錄的結果集。
如果該表需要刪除重複的記錄(重複記錄保留1條),可以按以下方法刪除
- select distinct * into #Tmp from tableName
- drop table tableName
- select * into tableName from #Tmp
- drop table #Tmp
發生這種重複的原因是表設計不周產生的,增加唯一索引列即可解決。
2、這類重複問題通常要求保留重複記錄中的第一條記錄,操作方法如下
假設有重複的欄位為Name,Address,要求得到這兩個欄位唯一的結果集
- select identity(int,1,1) as autoID, * into #Tmp from tableName
- select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
- select * from #Tmp where autoID in(select autoID from #tmp2)
三、匯入匯出語句大全:
- SELECT * FROM OpenDataSource( ’Microsoft.Jet.OLEDB.4.0’,
- ’Data Source="c:/test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0’)...xactions
- /*動態檔名
- declare @fn varchar(20),@s varchar(1000)
- set @fn = ’c:/test.xls’
- set @s =’’’Microsoft.Jet.OLEDB.4.0’’,
- ’’Data Source="’[email protected]+’";User ID=Admin;Password=;Extended properties=Excel 5.0’’’
- set @s = ’SELECT * FROM OpenDataSource (’[email protected]+’)...sheet1$’
- exec(@s)
- */
- SELECT cast(cast(科目編號 as numeric(10,2)) as nvarchar(255))+’ ’ 轉換後的別名
- FROM OpenDataSource( ’Microsoft.Jet.OLEDB.4.0’,
- ’Data Source="c:/test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0’)...xactions
- /********************** EXCEL導到遠端SQL
- insert OPENDATASOURCE(
- ’SQLOLEDB’,
- ’Data Source=遠端ip;User ID=sa;Password=密碼’
- ).庫名.dbo.表名 (列名1,列名2)
- SELECT 列名1,列名2
- FROM OpenDataSource( ’Microsoft.Jet.OLEDB.4.0’,
- ’Data Source="c:/test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0’)...xactions
- /** 匯入文字檔案
- EXEC master..xp_cmdshell ’bcp dbname..tablename in c:/DT.txt -c -Sservername -Usa -Ppassword’
- /** 匯出文字檔案
- EXEC master..xp_cmdshell ’bcp dbname..tablename out c:/DT.txt -c -Sservername -Usa -Ppassword’
- 或
- EXEC master..xp_cmdshell ’bcp "Select * from dbname..tablename" queryout c:/DT.txt -c -Sservername -Usa -Ppassword’
- 匯出到TXT文字,用逗號分開
- exec master..xp_cmdshell ’bcp "庫名..表名" out "d:/tt.txt" -c -t ,-U sa -P password’
- BULK INSERT 庫名..表名
- FROM ’c:/test.txt’
- WITH (
- FIELDTERMINATOR = ’;’,
- ROWTERMINATOR = ’/n’
- )
- --/* dBase IV檔案
- select * from
- OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’
- ,’dBase IV;HDR=NO;IMEX=2;DATABASE=C:/’,’select * from [客戶資料4.dbf]’)
- --*/
- --/* dBase III檔案
- select * from
- OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’
- ,’dBase III;HDR=NO;IMEX=2;DATABASE=C:/’,’select * from [客戶資料3.dbf]’)
- --*/
- --/* FoxPro 資料庫
- select * from openrowset(’MSDASQL’,
- ’Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:/’,
- ’select * from [aa.DBF]’)
- --*/
- /**************匯入DBF檔案****************/
- select * from openrowset(’MSDASQL’,
- ’Driver=Microsoft Visual FoxPro Driver;
- SourceDB=e:/VFP98/data;
- SourceType=DBF’,
- ’select * from customer where country != "USA" order by country’)
- go
- /***************** 匯出到DBF ***************/
- 如果要匯出資料到已經生成結構(即現存的)FOXPRO表中,可以直接用下面的SQL語句
- insert into openrowset(’MSDASQL’,
- ’Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:/’,
- ’select * from [aa.DBF]’)
- select * from 表
- 說明:
- SourceDB=c:/ 指定foxpro表所在的資料夾
- aa.DBF 指定foxpro表的檔名.
- /*************匯出到Access********************/
- insert into openrowset(’Microsoft.Jet.OLEDB.4.0’,
- ’x:/A.mdb’;’admin’;’’,A表) select * from 資料庫名..B表
- /*************匯入Access********************/
- insert into B表 selet * from openrowset(’Microsoft.Jet.OLEDB.4.0’,
- ’x:/A.mdb’;’admin’;’’,A表)
- /*檔名為引數*/
- declare @fname varchar(20)
- set @fname = ’d:/test.mdb’
- exec(’SELECT a.* FROM opendatasource(’’Microsoft.Jet.OLEDB.4.0’’,
- ’’’[email protected]+’’’;’’admin’’;’’’’, topics) as a ’)
- SELECT *
- FROM OpenDataSource( ’Microsoft.Jet.OLEDB.4.0’,
- ’Data Source="f:/northwind.mdb";Jet OLEDB:Database Password=123;User ID=Admin;Password=;’) --產品
- /********************** 匯入 xml 檔案********************/
- DECLARE @idoc int
- DECLARE @doc varchar(1000)
- --sample XML document
- SET @doc =’
- <root>
- <Customer cid= "C1" name="Janine" city="Issaquah">
- <Order oid="O1" date="1/20/1996" amount="3.5" />
- <Order oid="O2" date="4/30/1997" amount="13.4">Customer was very satisfied
- </Order>
- </Customer>
- <Customer cid="C2" name="Ursula" city="Oelde" >
- <Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue
- white red">
- <Urgency>Important</Urgency>
- Happy Customer.
- </Order>
- <Order oid="O4" date="1/20/1996" amount="10000"/>
- </Customer>
- </root>
- ’
- -- Create an internal representation of the XML document.
- EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
- -- Execute a SELECT statement using OPENXML rowset provider.
- SELECT *
- FROM OPENXML (@idoc, ’/root/Customer/Order’, 1)
- WITH (oid char(5),
- amount float,
- comment ntext ’text()’)
- EXEC sp_xml_removedocument @idoc
- /**********************Excel導到Txt****************************************/
- '想用
- select * into opendatasource(...) from opendatasource(...)
- /*實現將一個Excel檔案內容匯入到一個文字檔案
- 假設Excel中有兩列,第一列為姓名,第二列為很行帳號(16位)
- 且銀行帳號匯出到文字檔案後分兩部分,前8位和後8位分開。 */
- /*鄒健:
- 如果要用你上面的語句插入的話,文字檔案必須存在,而且有一行:姓名,銀行賬號1,銀行賬號2 然後就可以用下面的語句進行插入
- 注意檔名和目錄根據你的實際情況進行修改. */
- insert into
- opendatasource(’MICROSOFT.JET.OLEDB.4.0’
- ,’Text;HDR=Yes;DATABASE=C:/’
- )...[aa#txt]
- --,aa#txt)
- --*/
- select 姓名,銀行賬號1=left(銀行賬號,8),銀行賬號2=right(銀行賬號,8)
- from
- opendatasource(’MICROSOFT.JET.OLEDB.4.0’
- ,’Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:/a.xls’
- --,Sheet1$)
- )...[Sheet1$]
- 如果你想直接插入並生成文字檔案,就要用bcp
- declare @sql varchar(8000),@tbname varchar(50)
- --首先將excel表內容匯入到一個全域性臨時表
- select @tbname=’[##temp’+cast(newid() as varchar(40))+’]’
- ,@sql=’select 姓名,銀行賬號1=left(銀行賬號,8),銀行賬號2=right(銀行賬號,8)
- into ’[email protected]+’ from
- opendatasource(’’MICROSOFT.JET.OLEDB.4.0’’
- ,’’Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:/a.xls’’
- )...[Sheet1$]’
- exec(@sql)
- --然後用bcp從全域性臨時表匯出到文字檔案
- set @sql=’bcp "’[email protected]+’" out "c:/aa.txt" /S"(local)" /P"" /c’
- exec master..xp_cmdshell @sql
- --刪除臨時表
- exec(’drop table ’[email protected])
- /********************導整個資料庫*********************************************/
- /*用bcp實現的儲存過程 */
- /*
- 實現資料匯入/匯出的儲存過程
- 根據不同的引數,可以實現匯入/匯出整個資料庫/單個表
- 呼叫示例:
- --匯出呼叫示例
- ----匯出單個表
- exec file2table ’zj’,’’,’’,’xzkh_sa..地區資料’,’c:/zj.txt’,1
- ----匯出整個資料庫
- exec file2table ’zj’,’’,’’,’xzkh_sa’,’C:/docman’,1
- --匯入呼叫示例
- ----匯入單個表
- exec file2table ’zj’,’’,’’,’xzkh_sa..地區資料’,’c:/zj.txt’,0
- ----匯入整個資料庫
- exec file2table ’zj’,’’,’’,’xzkh_sa’,’C:/docman’,0
- */
- if exists(select 1 from sysobjects where name=’File2Table’ and objectproperty(id,’IsProcedure’)=1)
- drop procedure File2Table
- go
- create procedure File2Table
- @servername varchar(200) --伺服器名
- ,@username varchar(200) --使用者名稱,如果用NT驗證方式,則為空’’
- ,@password varchar(200) --密碼
- ,@tbname varchar(500) --資料庫.dbo.表名,如果不指定:.dbo.表名,則匯出資料庫的所有使用者表
- ,@filename varchar(1000) --匯入/匯出路徑/檔名,如果@tbname引數指明是匯出整個資料庫,則這引數是檔案存放路徑,檔名自動用表名.txt
- ,@isout bit --1為匯出,0為匯入
- as
- declare @sql varchar(8000)
- if @tbname like ’%.%.%’ --如果指定了表名,則直接匯出單個表
- begin
- set @sql=’bcp ’[email protected]
- +case when @isout=1 then ’ out ’ else ’ in ’ end
- +’ "’[email protected]+’" /w’
- +’ /S ’[email protected]
- +case when isnull(@username,’’)=’’ then ’’ else ’ /U ’[email protected] end
- +’ /P ’+isnull(@password,’’)
- exec master..xp_cmdshell @sql
- end
- else
- begin --匯出整個資料庫,定義遊標,取出所有的使用者表
- declare @m_tbname varchar(250)
- if right(@filename,1)<>’/’ set @[email protected]+’/’
- set @m_tbname=’declare #tb cursor for select name from ’[email protected]+’..sysobjects where xtype=’’U’’’
- exec(@m_tbname)
- open #tb
- fetch next from #tb into @m_tbname
- while @@fetch_status=0
- begin
-
set @sql=’bcp ’[email protected]+’..’
相關推薦
常用SQL語句例項(含過濾及刪除重複資料、匯入匯出資料等)
本文整理一些常用的SQL語句例項(如過濾重複資料、刪除重複資料、匯入匯出資料等),收藏備用,不斷更新中……。歡迎訪問作者網站獲取最新版:http://hi.wonsoft.cn -------------------------------第一部份 高階技巧-------
Oracle系統表整理+常用SQL語句收集(轉載)
原文:https://www.cnblogs.com/jiangxinnju/p/5840420.html-- DBA/ALL/USER/V_$/GV_$/SESSION/INDEX開頭的絕大部分都是檢視 -- DBA_TABLES意為DBA擁有的或可以訪問的所有的關係表。 -- ALL_TABLES意
Qt5佈局管理例項(含程式碼及簡介)
一、例項效果 (a)“基本資訊頁面” (b)"
MyBatis常用sql語句編寫(基於MySQL資料庫)
建立一張表t_user用於作示例: CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID', `
testNG簡易教程(含安裝,註解,配置檔案,測試報告等)
一、eclipse安裝TestNG外掛 1.線上安裝 點選eclipse頂部選單欄Help-->Install New SoftWare,再點選Add按鈕,Name:testNG,Location:http://beust.com/eclipse,等幾分鐘後出現tes
python3繪圖示例4(基於matplotlib:箱線圖、散點圖等)
scatter 繪圖 utf-8 show pre otto 2個 figure plot #!/usr/bin/env python# -*- coding:utf-8 -*-from matplotlib.pyplot import *x=[1,2,3,4]y=[5,4
oracle11g 使用資料泵匯入/匯出資料(expdp/impdp)
目標:使用oracle資料泵,將A電腦上的資料庫databaseA匯出後,再匯入到B電腦上的資料庫databaseB中。 A電腦上的操作(expdp資料匯出): 執行cmd; 登入資料庫,輸入
50個常用sql語句(含資料)
Code: 50個常用SQL語句 Student(S#,Sname,Sage,Ssex) 學生表 S#學號,主鍵 Course(C#,Cname,T#) 課程表 C#課程號,主鍵 SC(S#,C#,score) 成績表 Teacher(T#,Tn
MySQL常用操作(2)MySQL用戶管理、常用sql語句、 MySQL數據庫備份恢復
MySQL用戶管理 MySQL用戶管理創建一個普通用戶並且授權1.grant all on *.* to 'user1' identified by 'passwd';grant all on *.* to 'user1' iden
mysql用戶管理、常用sql語句及數據庫的備份
mark ffffff sock 來源 rpm -ivh grant lease -i 安裝 一、mysql用戶管理 1、創建用戶(認用戶root,權限最高)grant all on . to ‘user1‘@‘localhost‘ identified by ‘passw
常用SQL語句(oracle)(1)
查詢表結構 - select COLUMN_NAME,DATA_TYPE,DATA_LENGTH from user_tab_cols where table_name='TEST'; - desc 表名; 新增列 ALTER TABLE tab
MySQL(MariaDB)常用SQL語句詳解
DDL(Data Definition Language)資料定義語言 這些語句定義了不同的資料段、 資料庫、表、列、索引等資料庫物件的定義。常用的語句關鍵字主要包括 create、drop、alter 等。 資料庫管理 --刪除資料庫 drop database if
Mysql使用者管理、常用SQL語句及Mysql的備份與恢復
12月6日任務 13.4 mysql使用者管理 13.5 常用sql語句 13.6 mysql資料庫備份恢復 MySQL使用者管理 建立使用者 指定具體ip # 這裡指定了具體的ip # *.*:第一個*表示任意的資料庫,第二
常用SQL命令彙總(一)-增刪改及單表查詢
一、資料庫及表的建立 資料庫操作: 1、顯示所有資料庫:Show databases; 2、建立資料庫:Create database 資料庫名; 3、刪除資料庫:Drop database 資料庫名; 表操作: CREATE TABLE 表名( 屬性名 資料表
SQL Server 數據庫備份還原常用SQL語句及註意
設置 由於 避免 base 上線 新的 clas 斷開 無效 1.備份數據庫 backup database db_name to disk=‘d:\db_name.bak‘ with format --通過使用with format可以做到覆蓋任何現有的備
【嘔心總結】python如何與mysql實現互動及常用sql語句
9 月初,我對 python 爬蟲 燃起興趣,但爬取到的資料多通道實時同步讀寫用檔案並不方便,於是開始用起mysql。這篇筆記,我將整理近一個月的實戰中最常用到的 mysql 語句,同時也將涉及到如何在python3中與 mysql 實現資料交換。 關於工具/庫,特別說明下: 1、我安裝了 mysql ,並直
1.4 資料庫和常用SQL語句(正文)——MySQL資料庫命令和SQL語句
前面我們已經講述了,登入時,我們使用mysql –u root –p命令進行,此時如果設定了密碼,則需要輸入密碼。 輸入密碼後即進入MySQL的操作介面,此時,命令列窗體左側顯示“mysql>”表示此時可接受mysql命令。 (1)列出全部資料庫命令 我們使用“show databases;”命令列
常用SQL語句
char password 所有 gen 登錄 刪除表 一個 mysqldump pda --1. 用戶 --登錄 mysql -u用戶名 -p[密碼] --修改密碼 mysqladmin -u用戶名 -p[密碼] pa
MySQL階段二——sql語句基礎(2)
mysql數據查詢操作 01.創建數據表 (02-05練習) (連接查詢練習使用) 02.單表查詢 03.分組統計 04.嵌套查詢 05.集合查詢 06.連接查詢 07.連接查詢與集合查詢的不同 數據查詢操作01.創建數據表 1)創建Student表 (2)創建Course表
MySQL階段二——sql語句基礎(3)
mysqlOutfile 註意: Insert詳解 delete和update相關 視圖 01.視圖創建 02.視圖相關定義 03.視圖創建詳解 04.刪除視圖 05.視圖查詢 06.更新視圖 07.視圖的執行過程 觸發器 01.定義觸發器 02.操作觸發器 03.註意 Outfile將