js封裝簡單的動畫函式【左右上下移動】
這裡寫自定義目錄標題
Oracl
一, 常見函式
1,去重 Distinct
2, 插入資料
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
3,Union
Union 操作符用於連線兩個以上的 SELECT 語句的結果組合到一個結果集合中。多個 SELECT 語句會刪除重複的資料
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions] ;
4, 排序 order by
ASC 升序排列
DESC 降序排列
5,分組 GROUP BY
GROUP BY 語句根據一個或多個列對結果集進行分組。
在分組的列上我們可以使用 COUNT, SUM, AVG,等函式。
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
6,連線 inner join / left join / right join
INNER JOIN(內連線,或等值連線)**:獲取兩個表中欄位匹配關係的記錄。
LEFT JOIN(左連線):**獲取左表所有記錄,即使右表沒有對應匹配的記錄。
RIGHT JOIN(右連線):** 與 LEFT JOIN 相反,用於獲取右表所有記錄,即使左表沒有對應匹配的記錄。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-BK1EMh7b-1609755302808)(file:///C:/Users/Athena/AppData/Local/Temp/msohtmlclip1/02/clip_image001.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-2DWB22UX-1609755302811)(file:///C:/Users/Athena/AppData/Local/Temp/msohtmlclip1/02/clip_image001.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-GhRSFzoR-1609755302814)(file:///C:/Users/Athena/AppData/Local/Temp/msohtmlclip1/02/clip_image001.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-Oj4ocKaD-1609755302817)(file:///C:/Users/Athena/AppData/Local/Temp/msohtmlclip1/02/clip_image001.png)]
7,中英文轉換
-
把中文的括號轉為成英文括號:
To_single_byte(trim(AKA070)) 這個是把AKA070的值的內容裡面的括號轉化為英文括號
UPDATE TEST_KA20 SET AKA070 = To_single_byte(trim(AKA070)),
AKA074 = To_single_byte(trim(AKA074)),
SKD052 = To_single_byte(trim(SKD052))
8, nvl(x,value)
如果 x 為空,返回 value,否則返回 x。
9,nvl2(value1, value2)
如果x非空,返回value1,否則返回value2
(x,value1,value2)
如果 x 非空,返回 value1,否則返回 value2。
10,in與exist , not in與not exist
1, in和exists
in 是把外表和內表作hash 連線,而exists是對外表作loop迴圈,每次loop迴圈再對內表進行查詢。一直以來認為exists比in效率高的說法是不準確的。
如果查詢的兩個表大小相當,那麼用in和exists差別不大。
如果兩個表中一個較小,一個是大表,則子查詢表大的用exists,子查詢表小的用in:
例如:表A(小表),表B(大表)1:select * from A where cc in (select cc from B)
效率低,用到了A表上cc列的索引;select * from A where exists(select cc from B where cc=A.cc)
效率高,用到了B表上cc列的索引。
相反的2:select * from B where cc in (select cc from A)
效率高,用到了B表上cc列的索引;select * from B where exists(select cc from A where cc=B.cc)
效率低,用到了A表上cc列的索引。
2,not in 和not exists
如果查詢語句使用了not in 那麼內外表都進行全表掃描,沒有用到索引;而not extsts 的子查詢依然能用到表上的索引。所以無論那個表大,用not exists都比not in要快。
not in 邏輯上不完全等同於not exists,如果你誤用了not in,小心你的程式存在致命的BUG:
請看下面的例子:
create table t1 (c1 number,c2 number);
create table t2 (c1 number,c2 number);
insert into t1 values (1,2);
insert into t1 values (1,3);
insert into t2 values (1,2);
insert into t2 values (1,null);
select * from t1 where c2 not in (select c2 from t2);
no rows found
select * from t1 where not exists (select 1 from t2 where t1.c2=t2.c2);
正如所看到的,not in 出現了不期望的結果集,存在邏輯錯誤。如果看一下上述兩個select語句的執行計劃,也會不同。後者使用了hash_aj。 因此,請儘量不要使用not in(它會呼叫子查詢),而儘量使用not exists(它會呼叫關聯子查詢)。如果子查詢中返回的任意一條記錄含有空值,則查詢將不返回任何記錄,正如上面例子所示。除非子查詢欄位有非空限制,這時可以使用not in ,並且也可以通過提示讓它使用hasg_aj或merge_aj連線
10,grant 賦權
在oracle多使用者的情況下,如何能夠讓ansiyb使用者使用ahsicp3下的表,並對其增刪改查;或者是ahsicp3使用者對ahsiyb使用者下的表進行增刪改查,這就得用到了同義詞和賦權;
在Synonyms下建立同義詞,一般同義詞名與需要使用的表的名稱一致;
執行 grant all on **** to ahsicp3,如把ahsiyb下的KA51表授權給ahsicp3,執行下面的命令即可完成授權工作: grant all on ka51 to ahsicp3;
二,日期函式
日期函式對日期進行運算。常用的日期函式有:
1, SYSDATE:顯示系統當前日期
select sysdate from dual
select to_char(sysdate, 'yyyyMMdd') xtdate from dual
2,ADD_MONTHS(date,n)
在某一個日期 date 上,加上指定的月數 n,返回計算後的新日期。date 表示日期, n 表示要加的月數。
select add_months(sysdate, 6) six_month_later from dual;
3,LAST_DAY(date)
返回指定日期當月的最後一天。
select last_day(sysdate) from dual;
4,NEXT_DAY(date,char)
返回date日期的下一個周幾,周幾是由char決定的。
select NEXT_DAY(SYSDATE, ‘星期三’) from dual;
5, MONTHS_BETWEEN(DATE1,DATE2)
計算date1和date2兩個日期間的間隔。注意是date1-date2
select months_between(sysdate, ’17-1月-17’) from dual;
6,ROUND(d[,fmt])
返回一個以 fmt 為格式的四捨五入日期值, d 是日期, fmt 是格式
模型。預設 fmt 為 DDD,即月中的某一天。
如果 fmt 為“YEAR”則舍入到某年的 1 月 1 日,即前半年捨去,後半年作為下一年。
如果 fmt 為“MONTH”則舍入到某月的 1 日,即前月捨去,後半月作為下一月。
select round(to_date(‘2009-09-25’, ‘yyyy-mm-dd’), ‘MONTH’) round_date from dual;
例:select round(to_date(‘2009-09-25’, ‘yyyy-mm-dd’), ‘YEAR’) round_date from dual;
例:select round(to_date(‘2009-09-25’, ‘yyyy-mm-dd’)) round_date from dual;
- TRUNC(d[,fmt])
與 ROUND 對應的函式是TRUNC(d[,fmt])對日期的操作, TRUNC 與 ROUND 非常相似,只
是不對日期進行舍入,直接擷取到對應格式的第一天。
select TRUNC(to_date(‘2009-09-25’, ‘yyyy-mm-dd’), ‘MONTH’) trunc_date from dual;
例:select TRUNC (to_date(‘2009-09-25’, ‘yyyy-mm-dd’), ‘YEAR’) trunc_date from dual;
例:select TRUNC (to_date(‘2009-09-25’, ‘yyyy-mm-dd’)) trunc_date from dual;
8,Extract(fmt FROM d),提取日期中的特定部分。
fmt 為: YEAR、MONTH、DAY、HOUR、MINUTE、SECOND。其中 YEAR、MONTH、DAY可以為 DATE 型別匹配,也可以與TIMESTAMP 型別匹配;但HOUR、MINUTE、SECOND 必須與 TIMESTAMP 型別匹配。
例:EXTRACT 函式示例
Select sysdate “date”,
Extract(year from sysdate) “year”
Extract(month from sysdate) “month”
Extract(day from sysdate) “day”
Extract(hour from systimestamp) “hour”
Extract(minute from systimestamp) “minute”
Extract(second from systimestamp) “second”
From dual;
9, 計算兩個日期(精確到年月日)的差值
oracle裡面我想取兩個日期之間的差值,但是都是varchar型別的我改如何sql?比如 20170628-20170301 如何讓他的值等於88
select floor( to_date('2017062','yyyymmdd') - to_date('20170301','yyyymmdd')) from dual;
SELECT FLOOR (TO_DATE(AKC194, 'YYYYMMDD') - TO_DATE(AKC192 ,'YYYYMMDD'))FROM KC21_ZY
10, 查詢表中欄位裡資料是否有重複
1,查單個欄位
SELECT TEST_NAME,COUNT(*) FROM T_TEST GROUP BY TEST_NAME HAVING COUNT(*) > 1
2,查詢表中多餘的重複記錄,重複記錄是根據單個欄位(Id)來判斷
select * from 表 where Id in (select Id from 表 group byId having count(Id) > 1)
3,刪除表中多餘的重複記錄,重複記錄是根據單個欄位(Id)來判斷,只留有rowid最小的記錄
DELETE from 表 WHERE (id) IN ( SELECT id FROM 表 GROUP BY id HAVING COUNT(id) > 1) AND ROWID NOT IN (SELECT MIN(ROWID) FROM 表 GROUP BY id HAVING COUNT(*) > 1);
4,查詢表中多餘的重複記錄(多個欄位)
select * from 表 a where (a.Id,a.seq) in(select Id,seq from 表 group by Id,seq having count(*) > 1)
5,刪除表中多餘的重複記錄(多個欄位),只留有rowid最小的記錄
delete from 表 a where (a.Id,a.seq) in (select Id,seq from 表 group by Id,seq having count(*) > 1) and rowid not in (select min(rowid) from 表 group by Id,seq having count(*)>1)
三,檢視
1,作用
1)提供各種資料表現形式, 可以使用各種不同的方式將基表的資料展現在使用者面前, 以便符合使用者的使用習慣(主要手段: 使用別名);
2)隱藏資料的邏輯複雜性並簡化查詢語句, 多表查詢語句一般是比較複雜的, 而且使用者需要了解表之間的關係, 否則容易寫錯; 如果基於這樣的查詢語句建立一個檢視, 使用者就可以直接對這個檢視進行"簡單查詢"而獲得結果. 這樣就隱藏了資料的複雜性並簡化了查詢語句.這也是oracle提供各種"資料字典檢視"的原因之一,all_constraints就是一個含有2個子查詢並連線了9個表的檢視(在catalog.sql中定義);
3)執行某些必須使用檢視的查詢. 某些查詢必須藉助檢視的幫助才能完成. 比如, 有些查詢需要連線一個分組統計後的表和另一表, 這時就可以先基於分組統計的結果建立一個檢視, 然後在查詢中連線這個檢視和另一個表就可以了;
4)提供某些安全性保證. 檢視提供了一種可以控制的方式, 即可以讓不同的使用者看見不同的列, 而不允許訪問那些敏感的列, 這樣就可以保證敏感資料不被使用者看見;
5)簡化使用者許可權的管理. 可以將檢視的許可權授予使用者, 而不必將基表中某些列的許可權授予使用者, 這樣就簡化了使用者許可權的定義。
2,建立檢視
1許可權: 要在當前方案中建立檢視, 使用者必須具有create view系統許可權; 要在其他方案中建立檢視, 使用者必須具有create any view系統許可權. 檢視的功能取決於檢視擁有者的許可權.
2 語法:
create [ or replace ] [ force ] view [schema.]view_name
[ (column1,column2,...) ]
as
select ...
[ with check option ]
[ constraint constraint_name ]
[ with read only ];
tips:
1 or replace: 如果存在同名的檢視, 則使用新檢視"替代"已有的檢視
2 force: "強制"建立檢視,不考慮基表是否存在,也不考慮是否具有使用基表的許可權
3 column1,column2,...:檢視的列名, 列名的個數必須與select查詢中列的個數相同; 如果select查詢包含函式或表示式, 則必須為其定義列名.此時, 既可以用column1, column2指定列名, 也可以在select查詢中指定列名.
4 with check option: 指定對檢視執行的dml操作必須滿足“檢視子查詢”的條件即,對通過檢視進行的增刪改操作進行"檢查",要求增刪改操作的資料, 必須是select查詢所能查詢到的資料,否則不允許操作並返回錯誤提示. 預設情況下, 在增刪改之前"並不會檢查"這些行是否能被select查詢檢索到.
5 with read only:建立的檢視只能用於查詢資料, 而不能用於更改資料.
3, 格式
create view 檢視名(可以起別名) as
select…from …
【with read only】 --with read only 表示檢視是一個只讀檢視,只能查詢,不能修改。
create or replace view v_emp("編號","姓名‘) as select empno,ename from emp with read only;
四,儲存過程
1, dbms_output的用法
dbms_output.put('a'); --寫入buffer但不輸出
dbms_output.put('b'); --寫入buffer但不輸出
dbms_output.new_line; --回車(換行),輸出
dbms_output.put_line('hello world!'); --輸出並換行
dbms_output.put('d'); --寫入buffer不輸出
2,儲存過程結構
CREATE OR REPLACE PROCEDURE proc1 ( --建立語句
para1 varchar2, ----------引數列表
para2 OUT varchar2,
para3 IN OUT varchar2
)
AS
v_name varchar2(20); ---------------宣告變數
BEGIN
v_name := 'zhangsf'; --從begin 關鍵字開始為過程的語句塊
para3 := v_name;
dbms_output.put_line('para3:' || para3);
END;
3, for迴圈格式
DECLARE
ls_sae009 varchar2(100);
ls_skd004 varchar2(100);
BEGIN
FOR I IN (select * from ka20 where aae036 = '20200417215701') loop
select max(aaz235) +1 into ls_skd004 from ka21_cxqm where aae036 like '202004%';
INSERT INTO ka21_cxqm (aaz235,AKE001,aae140,AKA078,BKA005 , AAE036) VALUES
(ls_skd004,
I.AKE001,
'390',
'999',
'0.3000',
'20200417215701'
);
end loop;
END;
五,sql優化
1,分庫分表
2,索引
第一, 通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。
第二, 可以大大加快資料的檢索速度,這也是建立索引的最主要的原因。
第三, 可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義。
第四, 在使用分組和排序子句進行資料檢索時,同樣可以顯著減少查詢中分組和排序的時間。
第五, 通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的效能。
第一, 建立索引和維護索引要耗費時間,這種時間隨著資料量的增加而增加。
第二, 索引需要佔物理空間,除了資料表佔資料空間之外,每一個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大。
第三, 當對錶中的資料進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了資料的維護速度。
3,合理使用,避免使用全域性檢索
1、在表中建立索引,優先考慮where、group by使用到的欄位。
2、儘量避免使用select *,返回無用的欄位會降低查詢效率。如下:
SELECT * FROM t
優化方式:使用具體的欄位代替*,只返回使用到的欄位。
3、儘量避免使用in 和not in,會導致資料庫引擎放棄索引進行全表掃描。如下:
SELECT * FROM t WHERE id IN (2,3)
SELECT * FROM t1 WHERE username IN (SELECT username FROM t2)
優化方式:如果是連續數值,可以用between代替。如下:
SELECT * FROM t WHERE id BETWEEN 2 AND 3
如果是子查詢,可以用exists代替。如下:
SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.username = t2.username)
4、儘量避免使用or,會導致資料庫引擎放棄索引進行全表掃描。
SELECT * FROM t WHERE id = 1 OR id = 3
優化方式:可以用union代替or。如下:
SELECT * FROM t WHERE id = 1
UNION
SELECT * FROM t WHERE id = 3
(PS:如果or兩邊的欄位是同一個,如例子中這樣。貌似兩種方式效率差不多,即使union掃描的是索引,or掃描的是全表)
5、儘量避免在欄位開頭模糊查詢,會導致資料庫引擎放棄索引進行全表掃描。
SELECT * FROM t WHERE username LIKE '%li%'
優化方式:儘量在欄位後面使用模糊查詢。如下:
SELECT * FROM t WHERE username LIKE 'li%'
6、儘量避免進行null值的判斷,會導致資料庫引擎放棄索引進行全表掃描。如下:
SELECT * FROM t WHERE score IS NULL
優化方式:可以給欄位新增預設值0,對0值進行判斷。如下:
SELECT * FROM t WHERE score = 0
7、儘量避免在where條件中等號的左側進行表示式、函式操作,會導致資料庫引擎放棄索引進行全表掃描。如下:
SELECT * FROM t2 WHERE score/10 = 9
SELECT * FROM t2 WHERE SUBSTR(username,1,2) = 'li'
優化方式:可以將表示式、函式操作移動到等號右側。如下:
SELECT * FROM t2 WHERE score = 10*9
SELECT * FROM t2 WHERE username LIKE 'li%'
8、當資料量大時,避免使用where 1=1的條件。通常為了方便拼裝查詢條件,我們會預設使用該條件,資料庫引擎會放棄索引進行全表掃描。如下:
SELECT * FROM t WHERE 1=1
優化方式:用程式碼拼裝sql時進行判斷,沒where加where,有where加and。
9. 儘量使用列名(Oracle9i之後, *和列名一樣)
在業務密集的SQL當中儘量不採用IN操作符,用EXISTS 方案代替。
歡迎使用Markdown編輯器
你好! 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,瞭解一下Markdown的基本語法知識。
新的改變
我們對Markdown編輯器進行了一些功能拓展與語法支援,除了標準的Markdown編輯器功能,我們增加了如下幾點新功能,幫助你用它寫部落格:
- 全新的介面設計 ,將會帶來全新的寫作體驗;
- 在創作中心設定你喜愛的程式碼高亮樣式,Markdown 將程式碼片顯示選擇的高亮樣式 進行展示;
- 增加了 圖片拖拽 功能,你可以將本地的圖片直接拖拽到編輯區域直接展示;
- 全新的 KaTeX數學公式 語法;
- 增加了支援甘特圖的mermaid語法1 功能;
- 增加了 多螢幕編輯 Markdown文章功能;
- 增加了 焦點寫作模式、預覽模式、簡潔寫作模式、左右區域同步滾輪設定 等功能,功能按鈕位於編輯區域與預覽區域中間;
- 增加了 檢查列表 功能。
功能快捷鍵
撤銷:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜體:Ctrl/Command + I
標題:Ctrl/Command + Shift + H
無序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
檢查列表:Ctrl/Command + Shift + C
插入程式碼:Ctrl/Command + Shift + K
插入連結:Ctrl/Command + Shift + L
插入圖片:Ctrl/Command + Shift + G
查詢:Ctrl/Command + F
替換:Ctrl/Command + G
合理的建立標題,有助於目錄的生成
直接輸入1次#,並按下space後,將生成1級標題。
輸入2次#,並按下space後,將生成2級標題。
以此類推,我們支援6級標題。有助於使用TOC
語法後生成一個完美的目錄。
如何改變文字的樣式
強調文字 強調文字
加粗文字 加粗文字
標記文字
刪除文字
引用文字
H2O is是液體。
210 運算結果是 1024.
插入連結與圖片
連結: link.
圖片:
帶尺寸的圖片:
居中的圖片:
居中並且帶尺寸的圖片:
當然,我們為了讓使用者更加便捷,我們增加了圖片拖拽功能。
如何插入一段漂亮的程式碼片
去部落格設定頁面,選擇一款你喜歡的程式碼片高亮樣式,下面展示同樣高亮的 程式碼片
.
// An highlighted block
var foo = 'bar';
生成一個適合你的列表
- 專案
- 專案
- 專案
- 專案
- 專案1
- 專案2
- 專案3
- 計劃任務
- 完成任務
建立一個表格
一個簡單的表格是這麼建立的:
專案 | Value |
---|---|
電腦 | $1600 |
手機 | $12 |
導管 | $1 |
設定內容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文字居中 | 第二列文字居右 | 第三列文字居左 |
SmartyPants
SmartyPants將ASCII標點字元轉換為“智慧”印刷標點HTML實體。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' | ‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" | “Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash | – is en-dash, — is em-dash |
建立一個自定義列表
-
Markdown
- Text-to- HTML conversion tool Authors
- John
- Luke
如何建立一個註腳
一個具有註腳的文字。2
註釋也是必不可少的
Markdown將文字轉換為 HTML。
KaTeX數學公式
您可以使用渲染LaTeX數學表示式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通過尤拉積分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多關於的資訊 LaTeX 數學表示式here.
新的甘特圖功能,豐富你的文章
- 關於 甘特圖 語法,參考 這兒,
UML 圖表
可以使用UML圖表進行渲染。 Mermaid. 例如下面產生的一個序列圖:
這將產生一個流程圖。:
- 關於 Mermaid 語法,參考 這兒,
FLowchart流程圖
我們依舊會支援flowchart的流程圖:
- 關於 Flowchart流程圖 語法,參考 這兒.
匯出與匯入
匯出
如果你想嘗試使用此編輯器, 你可以在此篇文章任意編輯。當你完成了一篇文章的寫作, 在上方工具欄找到 文章匯出 ,生成一個.md檔案或者.html檔案進行本地儲存。
匯入
如果你想載入一篇你寫過的.md檔案,在上方工具欄可以選擇匯入功能進行對應副檔名的檔案匯入,
繼續你的創作。
註腳的解釋 ↩︎