本系統(tǒng)為@牛旦教育IT課堂在微頭條上的內(nèi)容,
為便于查閱,特輯錄于此,都是常用SQL基本用法。。
前兩篇連接:
(一):SQL點滴(查詢篇):數(shù)據(jù)庫基礎(chǔ)查詢案例實戰(zhàn)
(二):SQL點滴(排序篇):數(shù)據(jù)常規(guī)排序查詢實戰(zhàn)示例
(三):常用SQL系列之(三):記錄疊加、匹配、外連接及笛卡爾等
(25):如何在運(yùn)算和比較時使用NULL值?
在進(jìn)行SQL查詢計算和比較時,經(jīng)常會碰到NULL的處理情況。但有一關(guān)鍵點需要認(rèn)識到,即NULL值永遠(yuǎn)不會等于或不等于任何值,當(dāng)然,也包括NULL值本身。但是又需要像計算真實值一樣就算可能為空列的返回值。比如我們要找出比王五員工獎金小的員工(包含沒有獎金的員工)。參考SQL可以這樣來寫:
SELECT
e.empname,
e.reward ,
(reward,0)
FROM
e
WHERE
( reward, 0 ) < ( SELECT reward FROM WHERE empname = '王五' )
這個主要就是要注意SQL中的NULL值的特殊性以及如何利用函數(shù)。此函數(shù)就是返回列表中第一個非null值,也就是說如果這樣寫(reward,0),那么當(dāng)reward的是null是,該函數(shù)就返回0。這個可以很好理解的,動手試試吧。
(26):實現(xiàn)數(shù)據(jù)庫表的數(shù)據(jù)插入3種方式 ?
比如我們有一張books書籍表(字段為:bkid,bkname,bktype,,bkprice,,,bkcomm,其中,前三個字段為非空字段,bkid為自增長的主鍵),我們常規(guī)的數(shù)據(jù)插入方式為:
(1)、省略表列名方式:
insert into books
values(1,'Java高效入門','T001','Solo Cui',48.8,'牛旦出版社',now(),'')
這種方式,得在values列表中,匹配每一列,但可以可以省略表明books后的列名列表;
(2)、插入指定列方式:
insert into books(bkname,bktype,)
value('Vue高效入門','T009','牛旦')
這種方式,在表名后指定插入列的列名,再在值列表中匹配必須的列值,即可。
(3)、一次插入多行值:
前兩種我們都是異常插入一條記錄,在DB2和MySQL中,我們可以一次插入多條值,示例如下:
insert into books(bkname,bktype,)
values ('Vue高效進(jìn)階-第一卷','T009','牛旦'),
('Vue終極解密-第一卷','T009','牛旦'),
('游戲編程終極解密-第一卷','T009','牛旦')
這里需要注意的是在values后面值列別的表現(xiàn)形式,即以逗號分隔的多個括號值列表。
(27):為數(shù)據(jù)表插入默認(rèn)值的方式?
創(chuàng)建數(shù)據(jù)表時,可以為相應(yīng)的列定義插入式默認(rèn)值。即在沒有指定列名時,系統(tǒng)會自動為列插入一個值。比如如下定義表時:
create table xtable
xid int not null default 0,
xname varchar(128) default '無名',
xdate default
);
我們?nèi)缦路绞娇梢圆迦肽J(rèn)值:
insert into xtable values ()
不需要在values后制定列值,直接執(zhí)行上述語句,即可完成數(shù)據(jù)的插入。當(dāng)然,你也可以制定某列,帶有默認(rèn)值的不在values值列表中指定也可,如下SQL:
insert into xtable(xid) values(1)
這樣,插入時,其余列將插入默認(rèn)值。
default是所有數(shù)據(jù)庫系統(tǒng)都支持的關(guān)鍵之。但插入方式可有不同。如實SQL Server和可以這樣插入:insert into xtable default values 。
(28):如何確保插入列值為null?
我們知道在設(shè)計表時,可為列指定默認(rèn)值,但有時我們需要在插入值時其保證為空值null。那如何實現(xiàn)呢?
只要這樣:
insert into xtable(xid,xname) values(null,'killer')
這樣就可以確保列為xid插入null,之后可以根據(jù)需要對其進(jìn)行相應(yīng)處理。
如果不對表的某列插入什么值,只要把列名去掉并去掉值列表的對應(yīng)列值即可,如:
insert into xtable(xname) values('jingke')
需要知道的是,如果省略的列在設(shè)計表時有缺省值的,那就會在插入數(shù)據(jù)是自動插入缺省值。當(dāng)然缺省值可以為null。
(29):一條語句實現(xiàn)從一個表向另一表復(fù)制插入數(shù)據(jù)?
有時候我們不想一條條的向表中插入數(shù)據(jù),而是想從已知有數(shù)據(jù)的表里按要求查找并直接將查到的數(shù)據(jù)插入到目的表中(比如沖A表查找4列符合條件的數(shù)據(jù),然后自動能將結(jié)果插入到B表),如何實現(xiàn)呢?
可以整夜來編寫SQL語句:
insert into (,ename,level)
select ,name,level from person where city in ('','beijing')
這樣就可實現(xiàn)查詢并復(fù)制數(shù)據(jù)到目的表中了。
這里需要注意的是查詢表結(jié)構(gòu)和插入表結(jié)構(gòu)的一致性(數(shù)據(jù)類型和大小),否則可能插入失敗。
當(dāng)然,你可以根據(jù)需要對查詢的數(shù)據(jù)進(jìn)行必要的轉(zhuǎn)換以便插入。
有這樣的SQL查找,借用輔助工具還可以進(jìn)行異構(gòu)數(shù)據(jù)庫間的數(shù)據(jù)復(fù)制插入。試試吧。
(30):如何快速復(fù)制表定義:
也就是說,創(chuàng)建一個與已有表的列設(shè)置相同的表,如何實現(xiàn)?比如我要創(chuàng)建一個和部門表定義一樣的表depart,以為備用。在mysql中,可以這樣完成:
create table departs
as
select * from where 1=0
執(zhí)行上面的的語句,就可定義一個和定義t完全一樣的表了。
省事吧?尤其在想做測試用表時,這個太方便了。
上面的SQL語句,也適合Oracle和。DB2中更簡單,形式如下:
create table like xtable .
使用帶有l(wèi)ike語法create table命令即可基于xtable創(chuàng)建新表。而SQL Server的語法是這樣的:
select * into depart from where 1=0.
就這么省事,試試吧——對了,把條件改改看結(jié)果如實?
本篇就輯錄到這,點個贊分享出去吧。
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。