1. 程式人生 > >SQL資料庫基本操作對應Shell指令碼檔案處理

SQL資料庫基本操作對應Shell指令碼檔案處理

一、前言

日常工作中,一些資料統計的源資料是檔案,因為檔案資料統計不像資料庫操作那樣方便,如果匯入資料庫再進行操作,可能比較麻煩;因此,這裡將SQL資料庫基本操作與Shell對檔案資料操作進行對應,方便用Shell的語法進行檔案處理。這裡分別用Oracle SQL與shell工具操作同一資料進行操作演示,演示資料較少,日常操作資料一般為千萬級以上,檔案數也較多。因此需要結合多程序併發處理,由於前期對shell,多程序併發已說明(詳見帖子: http://eip.teamshub.com/t/3356518),此處不再解釋。因shell操作涉及記憶體,因此在控制併發處理檔案或其他操作時需要考慮記憶體的使用,如果超過限制,可split分割檔案後進行處理。

二、對應關係簡述

1.Where+欄位比較條件(AND/OR)

ORACLE:

select 'yuanwm',to_char(id_no),acct_item,orig_amount,bill_amount,chrg_amount from TEST_PAYEDOWE_INFO a where substr(id_no,1,2) in ('80','75') and ORIG_AMOUNT>8000;

SHELL:

awk '{if($3>8000&&(substr($1,1,2)=="80" || substr($1,1,2)=="75")) print $0}' ${File_PayedInfo}

2.按欄位orderby 升/降

ORACLE:

select 'yuanwm',to_char(id_no),orig_amount,bill_amount,chrg_amount from TEST_PAYEDOWE_INFO a order by ORIG_AMOUNT DESC,to_char(id_no);

SHELL:

sort -k3nr -k1,1 -t' ' ${File_PayedInfo}|awk '{$2="\b";print $0}'

3.Distinct的使用

ORACLE:

select distinct 'yuanwm',to_char(id_no),substr(acct_item,1,2) from TEST_PAYEDOWE_INFO a ;

SHELL:

awk '{print $1,substr($2,1,2)}' ${File_PayedInfo}|sort -u

4.Insert的使用

echo "直接建立檔案,或者追加即可>,這個不用說了!"

5.Update的使用+where

ORACLE:

update TEST_PAYEDOWE_INFO set bill_amount=50 where id_no='80077008777970';

SHELL:

##解釋:直接遍歷,語法簡單,如果資料量大可使用多程序併發(這裡使用awk不使用sed,因sed考慮因素過多,控制不好,會造成原檔案損壞.因此這裡採用awk重輸出,理解方便,輸出後可刪除原檔案)

awk '{if($1=="80077008777970") {$4=50};print $0}' ${File_PayedInfo}

6.Delete的使用+where

ORACLE:

delete from TEST_PAYEDOWE_INFO where id_no='80077008777970';

SHELL:"

##解釋:直接遍歷,語法簡單,如果資料量大可使用多程序併發(這裡使用awk不使用sed,因sed考慮因素過多,控制不好,會造成原檔案損壞.因此這裡採用awk重輸出,理解方便,輸出後可刪除原檔案)

awk '{if($1=="80077008777970"){} else print $0}' ${File_PayedInfo}

7.Where+Like匹配的使用

ORACLE:

select 'yuanwm',to_char(id_no),acct_item,orig_amount,bill_amount,chrg_amount from TEST_PAYEDOWE_INFO where acct_item like '%8' and to_char(id_no) like '8%' and to_char(id_no) like '%898%';

SHELL:"

#解釋 a.匹配,^開頭$結尾不帶.b.不匹配加!即可.

awk '{if($2~/8$/ && $1 ~/^8/ && $1~/898/) {print $0}}' ${File_PayedInfo}

8.where+rownum的使用

ORACLE:

select 'yuanwm',to_char(id_no),acct_item,orig_amount,bill_amount,chrg_amount from TEST_PAYEDOWE_INFO where rownum<=3 order by id_no;

SHELL:

#解釋,檔案也可以使用head命令,這裡用awk內建作解釋,可能與oracle取的不一樣,這根排序有關,更改排序條件即可達到一樣的效果.NR為內建變數,具體參考手冊

#這樣遍歷可能較多次數

#sort -k1 ${File_PayedInfo}|awk '{ if(NR<=3) print$0}'

#這樣就合適一些

awk '{if(NR>3) {exit 0} else print $0}' ${File_PayedInfo}

9.對於sum/count/gropby/having等關鍵詞的使用

ORACLE:

select 'yuanwm',to_char(id_no),acct_item,sum(chrg_amount),sum(bill_amount),count(1) from TEST_PAYEDOWE_INFO group by id_no,acct_item having sum(orig_amount)>500 and count(1)>0 order by acct_item;

SHELL:

#解釋:a.$1" "$2-這種作為下標匹配,同時可以用為陣列去重

awk '{Arr[$1" "$2] += $3;Arr1[$1" "$2] += $4;CArr[$1" "$2]++}END{for(i in Arr) { if(Arr[i]>500 && CArr[i]>0){print i,Arr[i],Arr1[i],CArr[i]}}}' ${File_PayedInfo}|sort -k2,2

10.inner join/where+兩表關聯(Shell多檔案操作)

ORACLE:

select 'yuanwm',to_char(a.ID_NO),a.ACCT_ITEM,a.ORIG_AMOUNT,a.BILL_AMOUNT,a.CHRG_AMOUNT,to_char(b.ID_NO),to_char(CONTRACT_NO),b.RUN_CODE,b.BELONG_CODE,b.OPEN_TIME from TEST_PAYEDOWE_INFO a inner join TEST_USER_INFO b on a.id_no=b.id_no and a.id_no!='80077008777970';

SHELL:

#解釋:a.這裡會對${File_UserInfo}檔案中id_no去重,因此需要保證唯一主鍵.b:邏輯:儲存使用者資訊id_no->遍歷賬單檔案(按條件輸出)c.條件檔案放前,輸出檔案放後,這裡使用next

#可以讓檔案依次遍歷,而不執行後續其他檔案的條件語句.

awk 'ARGIND==1{Arr[$1]=$0;next} {if($1 in Arr&&ARGIND==2&&$1!=80077008777970) {print $0,Arr[$1]}}' ${File_UserInfo} ${File_PayedInfo}

相關推薦

SQL資料庫基本操作對應Shell指令碼檔案處理

一、前言 日常工作中,一些資料統計的源資料是檔案,因為檔案資料統計不像資料庫操作那樣方便,如果匯入資料庫再進行操作,可能比較麻煩;因此,這裡將SQL資料庫基本操作與Shell對檔案資料操作進行對應,方便用Shell的語法進行檔案處理。這裡分別用Oracle SQL與shel

c# sql資料庫基本操作

SqlConnection conn = DBConnection.MyConnection();//得到資料庫連線物件         /// <summary>         /// 操作資料庫,執行各種SQL語句         /// </sum

例題SQL語句詳解-資料庫基本操作1

1.1 連線伺服器 通過命令列面板連線 host:主機 -h username:使用者名稱 -u password:密碼 -p port:埠 -P 多學一招:如果MySQL伺服器在本地,IP

例題SQL語句詳解-資料庫基本操作2

1.4 表的操作 1.4.1 顯示所有表 語法: show tables 1.4.2 建立表 語法: create table [if not exists] 表名( 欄位名 資料型別 [null|not null] [auto_in

例題SQL語句詳解-資料庫基本操作4

1.6 SQL分類 DDL(data definition language)資料庫定義語言create、alter、drop、shop DML(data manipulation language)資料操縱語言select、update、ins

例題SQL語句詳解-資料庫基本操作6-資料型別拓展

1.3 資料型別——列舉(enum) 1、從集合中選擇一個數據(單選) mysql> create table t8( -> name varchar(20), -> sex enum('男','女','保密')

例題SQL語句詳解-資料庫基本操作7-資料型別拓展

| 1.6 資料型別——boolean MySQL不支援boolean型別,true和false在資料庫中對應1和0。 mysql> create table t15( -> field boolean -> ); Query

例題SQL語句詳解-資料庫基本操作9-完整性介紹

| 1.15 資料完整性介紹 1.15.1 保證實體完整性 1、 主鍵約束 2、 唯一約束 3、 自動增長列 1.15.2 保證域完整性 1、 資料型別約束 2、 非空約束 3、 預設值約束 1.15.3

例題SQL語句詳解-資料庫基本操作10-查詢語句

|版權宣告:本文為博主原創文章,未經博主允許不得轉載。轉載請附上原連結,部落格地址:https://blog.csdn.net/sgsgy5 1.6 查詢語句 語法:select [選項] 列名 [from 表名] [where 條件] [group by

例題SQL語句詳解-資料庫基本操作11-排序分組聯合

| 1.6.11 order by排序 asc:升序【預設】 desc:降序 mysql> select * from stu order by ch desc; # 語文成績降序排列 mysql> select * from stu orde

Sql Server基本操作資料庫 表 檢視

一.對資料庫的操作 1.查詢系統所有資料庫 select * from sysdatabases 2.刪除某個資料庫 drop database dbtest 3.建立某個資料庫 create database dbtest ON PRIMARY ( NAME = ‘dbtest’, FIL

Oracle操作筆記——資料庫基本操作SQL命令

文章目錄 單表查詢 查詢結果拼接用|| 條件判斷用CASE WHEN 限制返回的行數用rownum 隨機返回用dbms_random.value() 模糊查詢用% _ \ 對結果排序用ORD

如何從零開始快速學習sql sever 資料庫基本操作-建庫/表-刪庫/表

環境配置 1.安裝sql sever 資料庫到本地,我用的是sql sever2014版,至於如何安裝請百度吧,學會用搜索工具很重要的,我就不在此囉嗦了。 2.連結上資料庫。 看到紅色框裡面就是各個資料庫名,有些是sql sever 自帶的,有些是我自己建立的,本文主要講述

shell指令碼檔案重定向讀取.csv檔案,輸出SQL Insert語句

檔案重定向常見於指令碼需要讀入檔案和輸出檔案時。這個樣例指令碼兩件事都做了。它讀取.csv 格式的資料檔案,輸出SQL INSERT語句來將資料插入資料庫。 shell指令碼使用命令列引數指定待讀取的.csv檔案。.csv格式用於從電子表格中匯出資料,所以 你可以把資料庫資料放入電子表格中,把電子表

SQL server 練習1(SQL server 資料庫基本操作

  本篇部落格用來記錄,編者做sql server練習的題目及解答,以及遇到的一些問題和總結。 題目 1、資料庫建立 名稱:stuManage 主資料檔案: 邏輯檔名:stuManage_M_data 物理檔名:stuManage__data

資料庫入門之--Navicat Premium快捷鍵&SQL Server基本操作語句

前提:這裡不拔高到開發高度,只做測試用的基本增刪改查 資料庫安裝: Microsoft SQL Server 2008 、MySQL,如下圖:(SQL Server和MySQLl的區別) 然後用Navicat Premium管理資料庫,這些安裝包都百度的到,就不上傳

T-SQL語句操作資料庫——基本操作

一、建立刪除資料資料庫 1、T-SQL語句建立資料庫語法如下: CREATE DATABASE 資料庫名 ON [PRINARY] ( <檔案引數>[,...n] [<檔案組引數>] ) [LOG ON] ( {<日誌檔案引數>}[,...n] ) 檔案

SQL Server 基本操作之三種增加法

一次 增刪改查 sql 數據的操作 插入 table 增長 類型 val 前言:     數據庫操作避免不了對數據的操作,操作方法大同小異,萬變不離其宗,今就寫一下各種花式操作的根本增刪改查四種操作,今天我們就來說一下增加操作的三種方法 正文:   增加操作是對數據庫進

08.SQL Server 基本操作【分離(脫機)、附加(聯機)】

原因 -1 文件的操作 刪除 方法 附加 文件 技術分享 屬性 1、創建、刪除(對準數據庫右鍵)2、分離(脫機)、附加(聯機) 關於附加數據庫失敗的處理:原因:對文件的操作權限不夠處理方法:對準mdf文件和ldf文件 右鍵 屬性 安全性將 用戶 Users

mysql資料庫基本操作注意點

對於一個初學資料庫的人來說,最主要的還是要掌握DQL資料庫查詢語言和DML資料操作語言。 這裡主要對DQL進行簡單的總結,實質就是學習的筆記。 資料查詢語言基本的語句結構為select * from table_name; 1. 條件語句where關建字,支援多種運算子 比較運