1、打開瀏覽器的Console工具欄,然后在里面輸入一個待比較的日期字符串。
創(chuàng)新互聯(lián)主營亳州網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app軟件定制開發(fā),亳州h5成都微信小程序搭建,亳州網(wǎng)站營銷推廣歡迎亳州等地區(qū)企業(yè)咨詢
2、接下來通過new Date將字符串轉(zhuǎn)化為日期對象。
3、然后調(diào)用new Date的getTime方法來獲得當(dāng)前的日期值。
4、當(dāng)獲得了兩個日期值以后就直接將他們做差即可。
5、做完日期差得到的是毫秒數(shù),如果想用時分等單位的話在進(jìn)行轉(zhuǎn)化即可。
6、最后,如果經(jīng)常需要進(jìn)行日期比較的話,我們可以將其封裝成一個函數(shù),在參數(shù)里面?zhèn)魅肴掌谥导纯伞?/p>
用?not?exists?或者?left?join
select?*?from?A?where?not?exists?(select?1?from?B?where?A.F1=B.F1?……)
select?A.*?from?A?left?join?B?on?A.F1=B.F1?……?WHERE?B.F1?is?null
肯定不一樣
a表有三個b,B表有兩個b,那么這些b之間有什么區(qū)別嗎?明顯沒有,所以在minus時,系統(tǒng)會認(rèn)為a表的三個b,和b表的任何一個b都是形同的。所以minus時出來的應(yīng)該是ade三行。
同理,交集的時候出來的應(yīng)該是三個b。
如果看不懂,那么就這么看,A表有10列數(shù)據(jù),有兩行(每行10列)內(nèi)容完全一樣。
B表有5行數(shù)據(jù),每行十列,有一行與“某表”重復(fù)的兩行一致。
現(xiàn)在如果求交集,A表重復(fù)的兩行,和B表的這一行都是有交集的,那么怎么顯示,怎么去判斷,這兩行中的哪一行與B表的那一行是交集,另外一個不是交集?
再沒有特定標(biāo)志的前提下,我們不能判斷,所以我們只能說兩行都是交集。補(bǔ)集的時候是一樣的,A表這兩行都與B表的這一行相同,那么怎么確定哪一行應(yīng)該是交集,哪一行是補(bǔ)集?
這個和我們平時說的集合概念不一樣,集合是不能出現(xiàn)重復(fù)的元素的,你這里有重復(fù)的元素(a表的三個b,B表的兩個b),所以應(yīng)該是多重集的概念。
當(dāng)然真實(shí)的環(huán)境中,基本上不會出現(xiàn)多重集,因?yàn)閿?shù)據(jù)本身就有互異性,兩條相同的數(shù)據(jù)沒有意義。當(dāng)然不排除數(shù)據(jù)庫設(shè)置不合理導(dǎo)致的這種情況發(fā)生,不過那只能說設(shè)計數(shù)據(jù)庫的人好去好好的再學(xué)一學(xué)范式了。
查詢是數(shù)據(jù)的一個重要操作。用戶發(fā)送查詢請求,經(jīng)編譯軟件變異成二進(jìn)制文件供服務(wù)器查詢,后返回查詢結(jié)果集給用戶,查詢會產(chǎn)生一個虛擬表,看到的是表形式顯示的結(jié)果,但結(jié)果并不真正的存儲,每次執(zhí)行查詢只是從數(shù)據(jù)表中提取數(shù)據(jù),并按照表的形式顯示出來。
SELECT 列名
FGROM 表名
[WHERE 查詢條件表達(dá)式]
[GROUP BY 分組表達(dá)式]
[HAVING 分組查詢表達(dá)式]
[ORDER BY 排序的列名 [ASC或DESC]]
group by 用于對查詢的結(jié)果分組統(tǒng)計,通過對group by后面的名字進(jìn)行分組后輸出結(jié)果。
group by后面還可以跟多列表示 多列分組 ,在多列分組時放前面的優(yōu)先分組。
group by 列名,列名
having 子句用于限制分組顯示結(jié)果,其只能和group by一起連用。在where中沒有辦法直接使用聚合函數(shù),即sum avg等無法使用,所以引用了having,在having中可以使用這些函數(shù)。
order by 表示排序,后跟列名和排序方式。如果什么都不加默認(rèn)為升序。ASC表示升序,DESC表示降序。
在Oracle中還可以設(shè)置多列排序
order by 列名1 升降,列名2 升降;
前面的為主要排序,后面的為次一級排序。
注:碰到自己與自己比較的情況下,不能用having,可以創(chuàng)建一個新列。
注:如果select語句同時包含group by,having,order by,按group by,having,order by排序
分組和聚合一起使用,目的是為了統(tǒng)計信息。
where是為了from服務(wù)的,只能跟 真實(shí)的字段 ,用來篩選from子句中指定的操作所產(chǎn)生的行
group by 用來分組where子句的輸出
having 用來從分組的結(jié)果中篩選行
order by用來對篩選的結(jié)果進(jìn)行排序
(1)分組函數(shù):max min?avg sum count
max表示該列的最大值,min表示該列的最小值,avg表示該列的平均值,sum表示該列的和,count表示該列的行數(shù)。
注:分組函數(shù)(max、min、avg、count、sum)只能出現(xiàn)在選擇列表中having子句、order by子句、不能出現(xiàn)在where子句和group by子句中。
(2)多表查詢
多表查詢是指兩個和兩個以上的表或者是視圖的查詢,在實(shí)際應(yīng)用中,當(dāng)查詢單個表不能滿足需求時,一般使用多表查詢。如:顯示sales部門位置和其員工的姓名,這種情況下需要使用到(dept表和emp表)。
多表查詢的連接一般可以分為:內(nèi)連接、左外連接、右外連接、全連接。
注:在使用多表查詢的時候每個表可以設(shè)置別名,如果表指定了別名,那么語句中所有語句必須使用別名,而不能再使用實(shí)際表名。且在寫屬性的時候如果屬性為其中一個表特有的屬性則不需要寫別名,如果是兩個表都有則必須指定是哪一個表的哪個屬性格式為:表名.屬性名。
select 列名 from 表1 別名,表2 別名...
注:e是emp的別名,d是dept的別名。
但如果對表進(jìn)行了操作則需要設(shè)置別名,如:查詢每個部門中工資高于該部門平均工資的員工人數(shù)。在其中有一個avg表,這個表必須設(shè)置別名(提醒:如果僅有一個被修改的表,則可以不設(shè)置別名,但如果有多個表則必須設(shè)置別名)。
內(nèi)連接
內(nèi)連接通過使用比較運(yùn)算符來使每個表的通用列中的值匹配來組成一個新表,即:把兩個表中間共有的那些行拿出來進(jìn)行連接,如果某些行不是兩個表共有的,則不進(jìn)行連接。
select
from 表1
inner join 表2
on 匹配條件
或
select
from 表1 表2
where匹配條件
左外連接
左外連接與內(nèi)連接的區(qū)別是:設(shè)置左外連接的時候設(shè)置了主表和附表,主表在前,附表在后。內(nèi)連接是將兩個表匹配的地方輸出出來,而左外連接則是主表全寫,附表一一對應(yīng),附表有則加上,沒有不寫。
select
from 表1
left join 表2
on 匹配條件
右外連接
右外連接和左外連接基本相同只是右外連接的主表寫在后邊。
select
from 表1
right join 表2
on 匹配條件
全連接
全連接是在等值連接的基礎(chǔ)上將左表和右表的未匹配數(shù)據(jù)都加上,使用的關(guān)鍵字為full outer join或者full join。
select
from 表1
full join 表2
on 匹配條件
自連接
還有一種特殊情況即自連接,在Oracle中一個表無法與自己進(jìn)行比較,所以當(dāng)需要自己表的兩個信息做比較的時候也需要使用連接來連接,即同一張表的連結(jié)查詢。
(3)子查詢
子查詢是指嵌套在其他sql語句中的select語句,也叫嵌套查詢。sql語句執(zhí)行順序?yàn)閺挠业阶髨?zhí)行,所以在執(zhí)行查詢時會先執(zhí)行左側(cè)的子查詢后進(jìn)行主查詢。
子查詢分為單行子查詢和多行子查詢,單行子查詢是指返回一行數(shù)據(jù)的子查詢語句,多行子查詢是指返回多行數(shù)據(jù)的查詢語句。子查詢還可以分為多列子查詢、多行子查詢、多列多行子查詢。
在進(jìn)行子查詢時如果內(nèi)部查詢不返回任何記錄,則外部條件中字段DEPTNO與NULL比較永遠(yuǎn)為假,也就是說外部查詢不返回任何結(jié)果。
總結(jié)為:
單行子查詢是指子查詢只返回單列、單行數(shù)據(jù)
多行子查詢是指返回單列多行數(shù)據(jù),都是針對單列而言的
多列子查詢則是指查詢返回多個列數(shù)據(jù)的子查詢語句
單行子查詢
where deptno = (單行數(shù)值)
多行子查詢
where deptno in ( 多行數(shù)值 )
多列子查詢:
where (job,deptno)=(select job,deptno from emp where ename='KING')
多列多行子查詢
where (job,deptno) in (select job,deptno from emp where ename='KING')
單行子查詢
在單行子查詢的外部查詢中可以使用=、、、=、=、等比較運(yùn)算符。
內(nèi)部查詢返回的結(jié)果必須與外部查詢條件中字段(DEPTNO)相匹配。
多行子查詢
在WHERE子句中使用多行子查詢時,可以使用多行比較運(yùn)算符(IN,ALL,ANY)。
IN:等于任何一個。
ALL:和子查詢返回的所有值比較。例如:salALL(1,2,3)等價于sal3,即大于所有。
ANY:和子查詢返回的任意一個值比較。例如:salANY(1,2,3)等價于sal1,即大于任意一個就可以。
注:ANY運(yùn)算符必須與單行比較運(yùn)算符結(jié)合使用,并且返回行只要匹配子查詢的任何一個結(jié)果即可。
多列子查詢
多列子查詢和多行子查詢相同,只是使用多列子查詢的時候會有多列進(jìn)行匹配。
(4)集合運(yùn)算
為了合并多個select語句的結(jié)果,可以使用集合操作符號union,union all,intersect,minus。
union:該操作符用于取得兩個結(jié)果集的并集。當(dāng)使用該操作符時,會自動去掉結(jié)果集中重復(fù)行
union all:該操作與union相似,但是它不會取消重復(fù)行,而且不會排序
intersect:使用該操作符用于取得兩個結(jié)果集的交集
minus:使用該操作符用于取得兩個結(jié)果集的差集,它只會顯示存在第一個集合中,而不存在第二個集合中的數(shù)據(jù)
總結(jié)為集合運(yùn)算就是將兩個或者多個結(jié)果集組合成一個結(jié)果集。
intersect ?交集 返回兩個查詢共有的記錄
union all ?并集 返回各個查詢的所有記錄,包括重復(fù)的記錄
union ? ? ?交集 返回各個查詢的所有記錄,不包括重復(fù)的記錄
MINUS ? 補(bǔ)集 返回第一個查詢檢查出的記錄減去第二個查詢檢索出來的記錄之后剩余的記錄
注意:當(dāng)使用集合操作的時候,查詢所返回的列數(shù)以及列的類型必須匹配,列名可以不同。
(1)Distinct關(guān)鍵字
在Oracle中,可能出現(xiàn)若干相同的情況,那么可以用Distinct消除重復(fù)行
(2)多表查詢與單行子查詢可以實(shí)現(xiàn)相同的功能
查詢出銷售部(sales)下面的員工姓名,工作,工資
(3)顯示高于自己部門平均工資的員工信息
分析:
1.找到所有部門的平均工資
select deptno,avg(sal) from emp group by deptno;
2.找到所有人的工資信息
select ename,sal,deptno from emp;
3.把兩個結(jié)果集使用多表連接組合組合起來
select * from emp,(select deptno,avg(sal) avgsal from emp group by deptno) damao where emp.deptno=damao.deptno;
4.去掉低于平均工資的那些數(shù)據(jù)即可:
select * from emp,(select deptno,avg(sal) avgsal from emp group by deptno) damao where emp.deptno=damao.deptno and salavgsal;
(4)emp表介紹
字段? ? ? ? ? ? ? 類型? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 描述
empno ? ? ? ? ?NUMBER(4) ? ? ? ? ? ? ? ? 表示雇員編號,是唯一編號
ename ? ? ? ? ?VAECHAR2(10) ? ? ? ? ? 表示雇員姓名
job ? ? ? ? ? ? ? ?VARCHAR2(9) ? ? ? ? ? ? 表示工作職位
mgr ? ? ? ? ? ? ?NUMBER(4) ? ? ? ? ? ? ? ? 表示一個雇員的領(lǐng)導(dǎo)編號
hiredate ? ? ? DATE ? ? ? ? ? ? ? ? ? ? ? ? ? ?表示雇傭日期
sal ? ? ? ? ? ? ? NUMBER(7,2) ? ? ? ? ? ? ? 表示月薪,工資
comm ? ? ? ? ?NUMBER(7,2) ? ? ? ? ? ? ? 表示獎金,或者稱為傭金
deptno ? ? ? ? NUMBER(2) ? ? ? ? ? ? ? ? 部門編號
select 字段1 from 表1 minus select 字段1 from 表2
select 字段1 from 表1 intersect select 字段1 from 表2
select 字段1 from 表1 union all select 字段1 from 表2