蝸牛的家
男兒當自強
C++博客
首頁
新文章
新隨筆
聚合
管理
posts - 48, comments - 21, trackbacks - 0
SQL操作全集
下列語句部分是Mssql語句,不可以在access中使用。
SQL分類:
DDL—數據定義語言(
CREATE
,
ALTER
,
DROP
,
DECLARE
)
DML—數據操縱語言(
SELECT
,
DELETE
,
UPDATE
,
INSERT
)
DCL—數據控制語言(
GRANT
,
REVOKE
,
COMMIT
,
ROLLBACK
)
首先,簡要介紹基礎語句:
1
、說明:創建數據庫
CREATE
DATABASE
database
-
name
2
、說明:刪除數據庫
drop
database
dbname
3
、說明:備份sql server
--
- 創建 備份數據的 device
USE
master
EXEC
sp_addumpdevice
'
disk
'
,
'
testBack
'
,
'
c:\mssql7backup\MyNwind_1.dat
'
--
- 開始 備份
BACKUP
DATABASE
pubs
TO
testBack
4
、說明:創建新表
create
table
tabname(col1 type1
[
not null
]
[
primary key
]
,col2 type2
[
not null
]
,..)
根據已有的表創建新表:
A:
create
table
tab_new
like
tab_old (使用舊表創建新表)
B:
create
table
tab_new
as
select
col1,col2…
from
tab_old definition
only
5
、說明:刪除新表drop
table
tabname
6
、說明:增加一個列
Alter
table
tabname
add
column
col type
注:列增加后將不能刪除。DB2中列加上后數據類型也不能改變,唯一能改變的是增加varchar類型的長度。
7
、說明:添加主鍵:
Alter
table
tabname
add
primary
key
(col)
說明:刪除主鍵:
Alter
table
tabname
drop
primary
key
(col)
8
、說明:創建索引:
create
[
unique
]
index
idxname
on
tabname(col….)
刪除索引:
drop
index
idxname
注:索引是不可更改的,想更改必須刪除重新建。
9
、說明:創建視圖:
create
view
viewname
as
select
statement
刪除視圖:
drop
view
viewname
10
、說明:幾個簡單的基本的sql語句
選擇:
select
*
from
table1
where
范圍
插入:
insert
into
table1(field1,field2)
values
(value1,value2)
刪除:
delete
from
table1
where
范圍
更新:
update
table1
set
field1
=
value1
where
范圍
查找:
select
*
from
table1
where
field1
like
’
%
value1
%
’
--
-like的語法很精妙,查資料!
排序:
select
*
from
table1
order
by
field1,field2
[
desc
]
總數:
select
count
*
as
totalcount
from
table1
求和:
select
sum
(field1)
as
sumvalue
from
table1
平均:
select
avg
(field1)
as
avgvalue
from
table1
最大:
select
max
(field1)
as
maxvalue
from
table1
最?。?/span>
select
min
(field1)
as
minvalue
from
table1
11
、說明:幾個高級查詢運算詞
A:
UNION
運算符
UNION
運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)并消去表中任何重復行而派生出一個結果表。當
ALL
隨
UNION
一起使用時(即
UNION
ALL
),不消除重復行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
B:
EXCEPT
運算符
EXCEPT
運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重復行而派生出一個結果表。當
ALL
隨
EXCEPT
一起使用時 (
EXCEPT
ALL
),不消除重復行。
C:
INTERSECT
運算符
INTERSECT
運算符通過只包括 TABLE1 和 TABLE2 中都有的行并消除所有重復行而派生出一個結果表。當
ALL
隨
INTERSECT
一起使用時 (
INTERSECT
ALL
),不消除重復行。
注:使用運算詞的幾個查詢結果行必須是一致的。
12
、說明:使用外連接
A、
left
outer
join
:
左外連接(左連接):結果集幾包括連接表的匹配行,也包括左連接表的所有行。
SQL:
select
a.a, a.b, a.c, b.c, b.d, b.f
from
a
LEFT
OUT
JOIN
b
ON
a.a
=
b.c
B:
right
outer
join
:
右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。
C:
full
outer
join
:
全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。
其次,大家來看一些不錯的sql語句
1
、說明:復制表(只復制結構,源表名:a 新表名:b) (Access可用)
法一:
select
*
into
b
from
a
where
1
<>
1
法二:
select
top
0
*
into
b
from
a
2
、說明:拷貝表(拷貝數據,源表名:a 目標表名:b) (Access可用)
insert
into
b(a, b, c)
select
d,e,f
from
b;
3
、說明:跨數據庫之間表的拷貝(具體數據使用絕對路徑) (Access可用)
insert
into
b(a, b, c)
select
d,e,f
from
b
in
‘具體數據庫’
where
條件
例子:..
from
b
in
'
"&Server.MapPath(".")&"\data.mdb" &"
'
where
..
4
、說明:子查詢(表名1:a 表名2:b)
select
a,b,c
from
a
where
a
IN
(
select
d
from
b ) 或者:
select
a,b,c
from
a
where
a
IN
(
1
,
2
,
3
)
5
、說明:顯示文章、提交人和最后回復時間
select
a.title,a.username,b.adddate
from
table
a,(
select
max
(adddate) adddate
from
table
where
table
.title
=
a.title) b
6
、說明:外連接查詢(表名1:a 表名2:b)
select
a.a, a.b, a.c, b.c, b.d, b.f
from
a
LEFT
OUT
JOIN
b
ON
a.a
=
b.c
7
、說明:在線視圖查詢(表名1:a )
select
*
from
(
SELECT
a,b,c
FROM
a) T
where
t.a
>
1
;
8
、說明:between的用法,between限制查詢數據范圍時包括了邊界值,
not
between不包括
select
*
from
table1
where
time
between
time1
and
time2
select
a,b,c,
from
table1
where
a
not
between
數值1
and
數值2
9
、說明:
in
的使用方法
select
*
from
table1
where
a
[
not
]
in
(‘值1’,’值2’,’值4’,’值6’)
10
、說明:兩張關聯表,刪除主表中已經在副表中沒有的信息
delete
from
table1
where
not
exists
(
select
*
from
table2
where
table1.field1
=
table2.field1 )
11
、說明:四表聯查問題:
select
*
from
a
left
inner
join
b
on
a.a
=
b.b
right
inner
join
c
on
a.a
=
c.c
inner
join
d
on
a.a
=
d.d
where
.....
12
、說明:日程安排提前五分鐘提醒
SQL:
select
*
from
日程安排
where
datediff
(
'
minute
'
,f開始時間,
getdate
())
>
5
13
、說明:一條sql 語句搞定數據庫分頁
select
top
10
b.
*
from
(
select
top
20
主鍵字段,排序字段
from
表名
order
by
排序字段
desc
) a,表名 b
where
b.主鍵字段
=
a.主鍵字段
order
by
a.排序字段
14
、說明:前10條記錄
select
top
10
*
form table1
where
范圍
15
、說明:選擇在每一組b值相同的數據中對應的a最大的記錄的所有信息(類似這樣的用法可以用于論壇每月排行榜,每月熱銷產品分析,按科目成績排名,等等.)
select
a,b,c
from
tablename ta
where
a
=
(
select
max
(a)
from
tablename tb
where
tb.b
=
ta.b)
16
、說明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重復行而派生出一個結果表
(
select
a
from
tableA )
except
(
select
a
from
tableB)
except
(
select
a
from
tableC)
17
、說明:隨機取出10條數據
select
top
10
*
from
tablename
order
by
newid
()
18
、說明:隨機選擇記錄
select
newid
()
19
、說明:刪除重復記錄
Delete
from
tablename
where
id
not
in
(
select
max
(id)
from
tablename
group
by
col1,col2,...)
20
、說明:列出數據庫里所有的表名
select
name
from
sysobjects
where
type
=
'
U
'
21
、說明:列出表里的所有的
select
name
from
syscolumns
where
id
=
object_id
(
'
TableName
'
)
22
、說明:列示type、vender、pcs字段,以type字段排列,case可以方便地實現多重選擇,類似select 中的case。
select
type,
sum
(
case
vender
when
'
A
'
then
pcs
else
0
end
),
sum
(
case
vender
when
'
C
'
then
pcs
else
0
end
),
sum
(
case
vender
when
'
B
'
then
pcs
else
0
end
)
FROM
tablename
group
by
type
顯示結果:
type vender pcs
電腦 A
1
電腦 A
1
光盤 B
2
光盤 A
2
手機 B
3
手機 C
3
23
、說明:初始化表table1
TRUNCATE
TABLE
table1
24
、說明:選擇從10到15的記錄
select
top
5
*
from
(
select
top
15
*
from
table
order
by
id
asc
) table_別名
order
by
id
desc
隨機選擇數據庫記錄的方法(使用Randomize函數,通過SQL語句實現)
對存儲在數據庫中的數據來說,隨機數特性能給出上面的效果,但它們可能太慢了些。你不能要求ASP“找個隨機數”然后打印出來。實際上常見的解決方案是建立如下所示的循環:
Randomize
RNumber
=
Int
(Rnd
*
499
)
+
1
While
Not
objRec.EOF
If
objRec("ID")
=
RNumber
THEN
... 這里是執行腳本 ...
end
if
objRec.MoveNext
Wend
這很容易理解。首先,你取出1到500范圍之內的一個隨機數(假設500就是數據庫內記錄的總數)。然后,你遍歷每一記錄來測試ID 的值、檢查其是否匹配RNumber。滿足條件的話就執行由THEN 關鍵字開始的那一塊代碼。假如你的RNumber 等于495,那么要循環一遍數據庫花的時間可就長了。雖然500這個數字看起來大了些,但相比更為穩固的企業解決方案這還是個小型數據庫了,后者通常在一個數據庫內就包含了成千上萬條記錄。這時候不就死定了?
采用SQL,你就可以很快地找出準確的記錄并且打開一個只包含該記錄的recordset,如下所示:
Randomize
RNumber
=
Int
(Rnd
*
499
)
+
1
SQL
=
"
SELECT
*
FROM
Customers
WHERE
ID
=
"
&
RNumber
set
objRec
=
ObjConn.
Execute
(SQL)
Response.WriteRNumber
&
"
=
"
&
objRec("ID")
&
" "
&
objRec("c_email")
不必寫出RNumber 和ID,你只需要檢查匹配情況即可。只要你對以上代碼的工作滿意,你自可按需操作“隨機”記錄。Recordset沒有包含其他內容,因此你很快就能找到你需要的記錄這樣就大大降低了處理時間。
再談隨機數
現在你下定決心要榨干Random 函數的最后一滴油,那么你可能會一次取出多條隨機記錄或者想采用一定隨機范圍內的記錄。把上面的標準Random 示例擴展一下就可以用SQL應對上面兩種情況了。
為了取出幾條隨機選擇的記錄并存放在同一recordset內,你可以存儲三個隨機數,然后查詢數據庫獲得匹配這些數字的記錄:
SQL
=
"
SELECT
*
FROM
Customers
WHERE
ID
=
"
&
RNumber
&
"
OR
ID
=
"
&
RNumber2
&
"
OR
ID
=
"
&
RNumber3
假如你想選出10條記錄(也許是每次頁面裝載時的10條鏈接的列表),你可以用BETWEEN 或者數學等式選出第一條記錄和適當數量的遞增記錄。這一操作可以通過好幾種方式來完成,但是
SELECT
語句只顯示一種可能(這里的ID 是自動生成的號碼):
SQL
=
"
SELECT
*
FROM
Customers
WHERE
ID
BETWEEN
"
&
RNumber
&
"
AND
"
&
RNumber
&
"
+
9
"
注意:以上代碼的執行目的不是檢查數據庫內是否有9條并發記錄。
隨機讀取若干條記錄,測試過
Access語法:
SELECT
top
10
*
From
表名
ORDER
BY
Rnd(id)
Sql server:
select
top
n
*
from
表名
order
by
newid
()
mysqlelect
*
From
表名
Order
By
rand
() Limit n
Access左連接語法(最近開發要用左連接,Access幫助什么都沒有,網上沒有Access的SQL說明,只有自己測試, 現在記下以備后查)
語法elect table1.fd1,table1,fd2,table2.fd2
From
table1
left
join
table2
on
table1.fd1,table2.fd1
where
...
使用SQL語句 用...代替過長的字符串顯示
語法:
SQL數據庫:
select
case
when
len
(field)
>
10
then
left
(field,
10
)
+
'
...
'
else
field
end
as
news_name,news_id
from
tablename
Access數據庫:
SELECT
iif(
len
(field)
>
2
,
left
(field,
2
)
+
'
...
'
,field)
FROM
tablename;
Conn.Execute說明
Execute方法
該方法用于執行SQL語句。根據SQL語句執行后是否返回記錄集,該方法的使用格式分為以下兩種:
1
.執行SQL查詢語句時,將返回查詢得到的記錄集。用法為:
Set
對象變量名
=
連接對象.
Execute
("SQL 查詢語言")
Execute方法調用后,會自動創建記錄集對象,并將查詢結果存儲在該記錄對象中,通過Set方法,將記錄集賦給指定的對象保存,以后對象變量就代表了該記錄集對象。
2
.執行SQL的操作性語言時,沒有記錄集的返回。此時用法為:
連接對象.
Execute
"SQL 操作性語句"
[
, RecordAffected
][
, Option
]
·RecordAffected 為可選項,此出可放置一個變量,SQL語句執行后,所生效的記錄數會自動保存到該變量中。通過訪問該變量,就可知道SQL語句隊多少條記錄進行了操作。
·
Option
可選項,該參數的取值通常為adCMDText,它用于告訴ADO,應該將Execute方法之后的第一個字符解釋為命令文本。通過指定該參數,可使執行更高效。
posted on 2008-09-18 17:47
黑色天使
閱讀(124)
評論(0)
編輯
收藏
引用
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
<
2008年8月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(2)
給我留言
查看公開留言
查看私人留言
隨筆分類
C\C++(8)
Hacker(1)
STL
VC&MFC(4)
操作系統(1)
多進程&多線程
流媒體開發
內存管理技術(2)
軟件工程(1)
設計模式(20)
數據結構&算法(2)
網絡開發(3)
隨筆檔案
2011年4月 (1)
2011年3月 (2)
2009年7月 (1)
2009年6月 (2)
2009年3月 (1)
2009年2月 (3)
2009年1月 (3)
2008年12月 (5)
2008年11月 (1)
2008年10月 (3)
2008年9月 (3)
2008年8月 (23)
文章檔案
2011年3月 (1)
2009年6月 (1)
2008年11月 (1)
搜索
最新評論
1.?re: C++設計模式-Observer
評論內容較長,點擊標題查看
--no7dw
2.?re: YUV格式詳細解釋與FFMPEG的關系
評論內容較長,點擊標題查看
--windsome
3.?re: 鍵盤過濾驅動源代碼
@soul
再怎么懶也應該自己實現一部分吧
--黑色天使
4.?re: 鍵盤過濾驅動源代碼[未登錄]
再怎么懶也該加上unload例程吧
--soul
5.?re: CHttpDownLoad Beta 1.0
評論內容較長,點擊標題查看
--tangxinfa
閱讀排行榜
1.?RGB、YUY2、YUYV、YVYU、UYVY與AYUV(轉)(6689)
2.?YUV格式詳細解釋與FFMPEG的關系(4309)
3.?如何檢測內存泄漏(轉)(3902)
4.?memcpy的BUG(2714)
5.?內存池技術學習筆記(2351)
評論排行榜
1.?CHttpDownLoad Beta 1.0(10)
2.?memcpy的BUG(5)
3.?事件模型SOCKET封裝(2)
4.?鍵盤過濾驅動源代碼(2)
5.?C++設計模式-Observer(1)
Copyright ©2025 黑色天使 Powered By
博客園
模板提供:
滬江博客
99久久精品这里只有精品
|
国产成人精品久久
|
91久久香蕉国产熟女线看
|
国产成人综合久久综合
|
国产高潮国产高潮久久久91
|
久久国产综合精品五月天
|
亚洲国产精品无码久久久不卡
|
老色鬼久久亚洲AV综合
|
久久99热这里只有精品国产
|
国产激情久久久久久熟女老人
|
精品国际久久久久999波多野
|
国产激情久久久久影院老熟女免费
|
久久亚洲国产最新网站
|
国产精品久久永久免费
|
亚洲国产成人久久精品99
|
精品久久久久久综合日本
|
香蕉aa三级久久毛片
|
色综合久久中文色婷婷
|
亚洲欧美伊人久久综合一区二区
|
国产精品99久久久久久猫咪
|
无码人妻精品一区二区三区久久久
|
久久久久久久综合日本
|
久久精品视频免费
|
久久久久AV综合网成人
|
亚洲综合日韩久久成人AV
|
香蕉久久影院
|
亚洲国产视频久久
|
亚洲国产成人精品女人久久久
|
久久国产欧美日韩精品
|
国产精品99久久久久久宅男小说
|
天天综合久久久网
|
99精品国产在热久久
|
久久精品天天中文字幕人妻
|
亚洲午夜无码久久久久
|
亚洲欧美一区二区三区久久
|
亚洲国产成人久久综合野外
|
久久伊人影视
|
久久人妻无码中文字幕
|
99蜜桃臀久久久欧美精品网站
|
欧美亚洲国产精品久久
|
久久亚洲AV无码精品色午夜麻豆
|