日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

[转]SQL语句大全

發(fā)布時(shí)間:2025/6/17 数据库 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]SQL语句大全 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
[轉(zhuǎn)]SQL語句大全

?

??
SQL語句大全

--語?句?功?能
--
數(shù)據(jù)操作
SELECT?--從數(shù)據(jù)庫表中檢索數(shù)據(jù)行和列
INSERT?--向數(shù)據(jù)庫表添加新數(shù)據(jù)行
DELETE?--從數(shù)據(jù)庫表中刪除數(shù)據(jù)行
UPDATE?--更新數(shù)據(jù)庫表中的數(shù)據(jù)
--
數(shù)據(jù)定義
CREATE?TABLE?--創(chuàng)建一個(gè)數(shù)據(jù)庫表
DROP?TABLE?--從數(shù)據(jù)庫中刪除表
ALTER?TABLE?--修改數(shù)據(jù)庫表結(jié)構(gòu)
CREATE?VIEW?--創(chuàng)建一個(gè)視圖
DROP?VIEW?--從數(shù)據(jù)庫中刪除視圖
CREATE?INDEX?--為數(shù)據(jù)庫表創(chuàng)建一個(gè)索引
DROP?INDEX?--從數(shù)據(jù)庫中刪除索引
CREATE?PROCEDURE?--創(chuàng)建一個(gè)存儲(chǔ)過程

?


DROP?PROCEDURE?--從數(shù)據(jù)庫中刪除存儲(chǔ)過程
CREATE?TRIGGER?--創(chuàng)建一個(gè)觸發(fā)器
DROP?TRIGGER?--從數(shù)據(jù)庫中刪除觸發(fā)器
CREATE?SCHEMA?--向數(shù)據(jù)庫添加一個(gè)新模式
DROP?SCHEMA?--從數(shù)據(jù)庫中刪除一個(gè)模式
CREATE?DOMAIN?--創(chuàng)建一個(gè)數(shù)據(jù)值域
ALTER?DOMAIN?--改變域定義
DROP?DOMAIN?--從數(shù)據(jù)庫中刪除一個(gè)域
--
數(shù)據(jù)控制
GRANT?--授予用戶訪問權(quán)限
DENY?--拒絕用戶訪問
REVOKE?--解除用戶訪問權(quán)限
--
事務(wù)控制
COMMIT?--結(jié)束當(dāng)前事務(wù)
ROLLBACK?--中止當(dāng)前事務(wù)
SET?TRANSACTION?--定義當(dāng)前事務(wù)數(shù)據(jù)訪問特征
--
程序化SQL
DECLARE?--為查詢設(shè)定游標(biāo)
EXPLAN?--為查詢描述數(shù)據(jù)訪問計(jì)劃
OPEN?--檢索查詢結(jié)果打開一個(gè)游標(biāo)
FETCH?--檢索一行查詢結(jié)果
CLOSE?--關(guān)閉游標(biāo)
PREPARE?--為動(dòng)態(tài)執(zhí)行準(zhǔn)備SQL?語句
EXECUTE?--動(dòng)態(tài)地執(zhí)行SQL?語句
DESCRIBE?--描述準(zhǔn)備好的查詢?
--
-局部變量
declare?@id?char(10)
--set?@id?=?'10010001'
select?@id?=?'10010001'?

---全局變量
--
-必須以@@開頭

--IF?ELSE
declare?@x?int?@y?int?@z?int
select?@x?=?1?@y?=?2?@z=3
if?@x?>?@y
print?'x?>?y'?--打印字符串'x?>?y'
else?if?@y?>?@z
print?'y?>?z'
else?print?'z?>?y'

--CASE
use?pangu
update?employee
set?e_wage?=
case
when?job_level?=?’1’?then?e_wage*1.08
when?job_level?=?’2’?then?e_wage*1.07
when?job_level?=?’3’?then?e_wage*1.06
else?e_wage*1.05
end

--WHILE?CONTINUE?BREAK
declare?@x?int?@y?int?@c?int
select?@x?=?1?@y=1
while?@x?<?3
begin
print?@x?--打印變量x?的值
while?@y?<?3
begin
select?@c?=?100*@x?+?@y
print?@c?--打印變量c?的值
select?@y?=?@y?+?1
end
select?@x?=?@x?+?1
select?@y?=?1
end

--WAITFOR
--
例?等待1?小時(shí)2?分零3?秒后才執(zhí)行SELECT?語句
waitfor?delay?’01:02:03
select?*?from?employee
--例?等到晚上11?點(diǎn)零8?分后才執(zhí)行SELECT?語句
waitfor?time?’23:08:00
select?*?from?employee

***SELECT***

select?*(列名)?from?table_name(表名)?where?column_name?operator?value
ex:(宿主)
select?*?from?stock_information?where?stockid?=?str(nid)
stockname?
=?'str_name'?
stockname?
like?'%?find?this?%'?
stockname?
like?'[a-zA-Z]%'?---------?([]指定值的范圍)
stockname?like?'[^F-M]%'?---------?(^排除指定范圍)
--
-------?只能在使用like關(guān)鍵字的where子句中使用通配符)
or?stockpath?=?'stock_path'
or?stocknumber?<?1000
and?stockindex?=?24
not?stock***?=?'man'
stocknumber?
between?20?and?100
stocknumber?
in(10,20,30)
order?by?stockid?desc(asc)?---------?排序,desc-降序,asc-升序
order?by?1,2?---------?by列號(hào)
stockname?=?(select?stockname?from?stock_information?where?stockid?=?4)
---------?子查詢
--
-------?除非能確保內(nèi)層select只返回一個(gè)行的值,
--
-------?否則應(yīng)在外層where子句中用一個(gè)in限定符
select?distinct?column_name?form?table_name?---------?distinct指定檢索獨(dú)有的列值,不重復(fù)
select?stocknumber?,"stocknumber?+?10"?=?stocknumber?+?10?from?table_name
select?stockname?,?"stocknumber"?=?count(*)?from?table_name?group?by?stockname
---------?group?by?將表按行分組,指定列中有相同的值
having?count(*)?=?2?---------?having選定指定的組

select?*?
from?table1,?table2?
where?table1.id?*=?table2.id?--------?左外部連接,table1中有的而table2中沒有得以null表示
table1.id?=*?table2.id?--------?右外部連接?

select?stockname?from?table1
union?[all]?-----?union合并查詢結(jié)果集,all-保留重復(fù)行
select?stockname?from?table2

***insert***

insert?into?table_name?(Stock_name,Stock_number)?value?("xxx","xxxx")
value?(
select?Stockname?,?Stocknumber?from?Stock_table2)---value為select語句

***update***

update?table_name?set?Stockname?=?"xxx"?[where?Stockid?=?3]
Stockname?
=?default
Stockname?
=?null
Stocknumber?
=?Stockname?+?4

***delete***

delete?from?table_name?where?Stockid?=?3
truncate?table_name?-----------?刪除表中所有行,仍保持表的完整性
drop?table?table_name?---------------?完全刪除表

***alter?table***?---?修改數(shù)據(jù)庫表結(jié)構(gòu)

alter?table?database.owner.table_name?add?column_name?char(2)?null?.....
sp_help?table_name?
----?顯示表已有特征
create?table?table_name?(name?char(20),?age?smallint,?lname?varchar(30))
insert?into?table_name?select?.........?-----?實(shí)現(xiàn)刪除列的方法(創(chuàng)建新表)
alter?table?table_name?drop?constraint?Stockname_default?----?刪除Stockname的default約束

***function(/*常用函數(shù)*/)***

----統(tǒng)計(jì)函數(shù)----
AVG?--求平均值
COUNT?--統(tǒng)計(jì)數(shù)目
MAX?--求最大值
MIN?--求最小值
SUM?--求和

--AVG
use?pangu
select?avg(e_wage)?as?dept_avgWage
from?employee
group?by?dept_id


--MAX
--
比如求工資最高的員工姓名
use?pangu
select?e_name
from?employee
where?e_wage?=
(
select?max(e_wage)
from?employee)

--STDEV()
--
STDEV()函數(shù)返回表達(dá)式中所有數(shù)據(jù)的標(biāo)準(zhǔn)差


--STDEVP()
--
STDEVP()函數(shù)返回總體標(biāo)準(zhǔn)差

--VAR()
--
VAR()函數(shù)返回表達(dá)式中所有值的統(tǒng)計(jì)變異數(shù)

--VARP()
--
VARP()函數(shù)返回總體變異數(shù)

----算術(shù)函數(shù)----

/***三角函數(shù)***/
SIN(float_expression)?--返回以弧度表示的角的正弦
COS(float_expression)?--返回以弧度表示的角的余弦
TAN(float_expression)?--返回以弧度表示的角的正切
COT(float_expression)?--返回以弧度表示的角的余切
/*
**反三角函數(shù)***/
ASIN(float_expression)?--返回正弦是FLOAT?值的以弧度表示的角
ACOS(float_expression)?--返回余弦是FLOAT?值的以弧度表示的角
ATAN(float_expression)?--返回正切是FLOAT?值的以弧度表示的角
ATAN2(float_expression1,float_expression2)?
--返回正切是float_expression1?/float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
--把弧度轉(zhuǎn)換為角度返回與表達(dá)式相同的數(shù)據(jù)類型可為
--
INTEGER/MONEY/REAL/FLOAT?類型
RADIANS(numeric_expression)?--把角度轉(zhuǎn)換為弧度返回與表達(dá)式相同的數(shù)據(jù)類型可為
--
INTEGER/MONEY/REAL/FLOAT?類型
EXP(float_expression)?--返回表達(dá)式的指數(shù)值
LOG(float_expression)?--返回表達(dá)式的自然對(duì)數(shù)值
LOG10(float_expression)--返回表達(dá)式的以10?為底的對(duì)數(shù)值
SQRT(float_expression)?--返回表達(dá)式的平方根
/*
**取近似值函數(shù)***/
CEILING(numeric_expression)?--返回>=表達(dá)式的最小整數(shù)返回的數(shù)據(jù)類型與表達(dá)式相同可為
--
INTEGER/MONEY/REAL/FLOAT?類型
FLOOR(numeric_expression)?--返回<=表達(dá)式的最小整數(shù)返回的數(shù)據(jù)類型與表達(dá)式相同可為
--
INTEGER/MONEY/REAL/FLOAT?類型
ROUND(numeric_expression)?--返回以integer_expression?為精度的四舍五入值返回的數(shù)據(jù)
--
類型與表達(dá)式相同可為INTEGER/MONEY/REAL/FLOAT?類型
ABS(numeric_expression)?--返回表達(dá)式的絕對(duì)值返回的數(shù)據(jù)類型與表達(dá)式相同可為
--
INTEGER/MONEY/REAL/FLOAT?類型
SIGN(numeric_expression)?--測試參數(shù)的正負(fù)號(hào)返回0?零值1?正數(shù)或-1?負(fù)數(shù)返回的數(shù)據(jù)類型
--
與表達(dá)式相同可為INTEGER/MONEY/REAL/FLOAT?類型
PI()?--返回值為π?即3.1415926535897936
RAND([integer_expression])?--用任選的[integer_expression]做種子值得出0-1?間的隨機(jī)浮點(diǎn)數(shù)

----字符串函數(shù)----
ASCII()?--函數(shù)返回字符表達(dá)式最左端字符的ASCII?碼值
CHAR()?--函數(shù)用于將ASCII?碼轉(zhuǎn)換為字符
--
如果沒有輸入0?~?255?之間的ASCII?碼值CHAR?函數(shù)會(huì)返回一個(gè)NULL?值
LOWER()?--函數(shù)把字符串全部轉(zhuǎn)換為小寫
UPPER()?--函數(shù)把字符串全部轉(zhuǎn)換為大寫
STR()?--函數(shù)把數(shù)值型數(shù)據(jù)轉(zhuǎn)換為字符型數(shù)據(jù)
LTRIM()?--函數(shù)把字符串頭部的空格去掉
RTRIM()?--函數(shù)把字符串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING()?--函數(shù)返回部分字符串
CHARINDEX(),PATINDEX()?--函數(shù)返回字符串中某個(gè)指定的子串出現(xiàn)的開始位置
SOUNDEX()?--函數(shù)返回一個(gè)四位字符碼?
--
SOUNDEX函數(shù)可用來查找聲音相似的字符串但SOUNDEX函數(shù)對(duì)數(shù)字和漢字均只返回0?值?
DIFFERENCE()?--函數(shù)返回由SOUNDEX?函數(shù)返回的兩個(gè)字符表達(dá)式的值的差異
--
0?兩個(gè)SOUNDEX?函數(shù)返回值的第一個(gè)字符不同
--
1?兩個(gè)SOUNDEX?函數(shù)返回值的第一個(gè)字符相同
--
2?兩個(gè)SOUNDEX?函數(shù)返回值的第一二個(gè)字符相同
--
3?兩個(gè)SOUNDEX?函數(shù)返回值的第一二三個(gè)字符相同
--
4?兩個(gè)SOUNDEX?函數(shù)返回值完全相同

QUOTENAME()?--函數(shù)返回被特定字符括起來的字符串
/*
select?quotename('abc',?'{')?quotename('abc')
運(yùn)行結(jié)果如下:
----------------------------------
{abc}?[abc]
*/


REPLICATE()?--函數(shù)返回一個(gè)重復(fù)character_expression?指定次數(shù)的字符串
/*
select?replicate('abc',?3)?replicate(?'abc',?-2)
運(yùn)行結(jié)果如下:
-----------?-----------
abcabcabc?NULL


REVERSE()?--函數(shù)將指定的字符串的字符排列順序顛倒
REPLACE()?--函數(shù)返回被替換了指定子串的字符串
/*select?replace('abc123g',?'123',?'def')
運(yùn)行結(jié)果如下:
-----------?-----------
abcdefg
*/


SPACE()?--函數(shù)返回一個(gè)有指定長度的空白字符串
STUFF()?--函數(shù)用另一子串替換字符串指定位置長度的子串


----數(shù)據(jù)類型轉(zhuǎn)換函數(shù)----
CAST()?函數(shù)語法如下
CAST()?(<expression>?AS?<data_?type>[?length?])
CONVERT()?函數(shù)語法如下
CONVERT()?(<data_?type>[?length?],?<expression>?[,?style])

select?cast(100+99?as?char)?convert(varchar(12),?getdate())
運(yùn)行結(jié)果如下
------------------------------?------------
199?Jan?15?2000

----日期函數(shù)----
DAY()?--函數(shù)返回date_expression?中的日期值
MONTH()?--函數(shù)返回date_expression?中的月份值
YEAR()?--函數(shù)返回date_expression?中的年份值
DATEADD(<datepart>?,<number>?,<date>)?
--函數(shù)返回指定日期date?加上指定的額外日期間隔number?產(chǎn)生的新日期
DATEDIFF(<datepart>?,<number>?,<date>)
--函數(shù)返回兩個(gè)指定日期在datepart?方面的不同之處
DATENAME(<datepart>?,?<date>)?--函數(shù)以字符串的形式返回日期的指定部分
DATEPART(<datepart>?,?<date>)?--函數(shù)以整數(shù)值的形式返回日期的指定部分
GETDATE()?--函數(shù)以DATETIME?的缺省格式返回系統(tǒng)當(dāng)前的日期和時(shí)間


----系統(tǒng)函數(shù)----
APP_NAME()?--函數(shù)返回當(dāng)前執(zhí)行的應(yīng)用程序的名稱
COALESCE()?--函數(shù)返回眾多表達(dá)式中第一個(gè)非NULL?表達(dá)式的值
COL_LENGTH(<'table_name'>,?<'column_name'>)?--函數(shù)返回表中指定字段的長度值
COL_NAME(<table_id>,?<column_id>)?--函數(shù)返回表中指定字段的名稱即列名
DATALENGTH()?--函數(shù)返回?cái)?shù)據(jù)表達(dá)式的數(shù)據(jù)的實(shí)際長度
DB_ID(['database_name'])?--函數(shù)返回?cái)?shù)據(jù)庫的編號(hào)
DB_NAME(database_id)?--函數(shù)返回?cái)?shù)據(jù)庫的名稱
HOST_ID()?--函數(shù)返回服務(wù)器端計(jì)算機(jī)的名稱
HOST_NAME()?--函數(shù)返回服務(wù)器端計(jì)算機(jī)的名稱
IDENTITY(<data_type>[,?seed?increment])?[AS?column_name])
--IDENTITY()?函數(shù)只在SELECT?INTO?語句中使用用于插入一個(gè)identity?column列到新表中
/*
select?identity(int,?1,?1)?as?column_name
into?newtable
from?oldtable
*/
ISDATE()?--函數(shù)判斷所給定的表達(dá)式是否為合理日期
ISNULL(<check_expression>,?<replacement_value>)?--函數(shù)將表達(dá)式中的NULL?值用指定值替換
ISNUMERIC()?--函數(shù)判斷所給定的表達(dá)式是否為合理的數(shù)值
NEWID()?--函數(shù)返回一個(gè)UNIQUEIDENTIFIER?類型的數(shù)值
NULLIF(<expression1>,?<expression2>)
--NULLIF?函數(shù)在expression1?與expression2?相等時(shí)返回NULL?值若不相等時(shí)則返回expression1?的值

sql中的保留字

action?
add?aggregate?all?
alter?after?and?as?
asc?avg?avg_row_length?auto_increment?
between?bigint?bit?binary?
blob?bool?both?
by?
cascade?case?char?character?
change?
check?checksum?column?
columns?comment?
constraint?create?
cross?current_date?current_time?current_timestamp?
data?
database?databases?date?
datetime?day?day_hour?day_minute?
day_second?dayofmonth?dayofweek?dayofyear?
dec?decimal?default?delayed?
delay_key_write?
delete?desc?describe?
distinct?distinctrow?double?drop?
end?else?escape?escaped?
enclosed?enum?explain?
exists?
fields?
file?first?float?
float4?float8?flush?
foreign?
from?for?full?function?
global?
grant?grants?group?
having?heap?high_priority?hour?
hour_minute?hour_second?hosts?identified?
ignore?
in?index?infile?
inner?insert?insert_id?int?
integer?interval?int1?int2?
int3?int4?int8?
into?
if?is?isam?join?
key?keys?kill?last_insert_id?
leading?
left?length?like?
lines?limit?
load?local?
lock?logs?
long?longblob?
longtext?low_priority?
max?max_rows?
match?mediumblob?mediumtext?mediumint?
middleint?min_rows?minute?minute_second?
modify?
month?monthname?myisam?
natural?numeric?no?
not?
null?on?optimize?option?
optionally?
or?order?outer?
outfile?pack_keys?partial?password?
precision?primary?procedure?process?
processlist?
privileges?read?real?
references?reload?regexp?rename?
replace?restrict?returns?revoke?
rlike?row?rows?second?
select?set?show?shutdown?
smallint?soname?sql_big_tables?sql_big_selects?
sql_low_priority_updates?sql_log_off?sql_log_update?sql_select_limit?
sql_small_result?sql_big_result?sql_warnings?straight_join?
starting?status?string?
table?
tables?
temporary?terminated?text?
then?time?timestamp?tinyblob?
tinytext?
tinyint?trailing?to?
type?
use?using?unique?
unlock?unsigned?
update?usage?
values?varchar?variables?varying?
varbinary?with?write?when?
where?year?year_month?zerofill

常用SQL命令和ASP編程
在進(jìn)行數(shù)據(jù)庫操作時(shí),無非就是添加、刪除、修改,這得設(shè)計(jì)到一些常用的SQL語句,如下:?
SQL常用命令使用方法:

(
1)?數(shù)據(jù)記錄篩選:

sql
="select?*?from?數(shù)據(jù)表?where?字段名=字段值?order?by?字段名?[desc]"

sql
="select?*?from?數(shù)據(jù)表?where?字段名?like?%字段值%?order?by?字段名?[desc]"

sql
="select?top?10?*?from?數(shù)據(jù)表?where?字段名?order?by?字段名?[desc]"

sql
="select?*?from?數(shù)據(jù)表?where?字段名?in?(值1,值2,值3)"

sql
="select?*?from?數(shù)據(jù)表?where?字段名?between?值1?and?值2"

(
2)?更新數(shù)據(jù)記錄:

sql
="update?數(shù)據(jù)表?set?字段名=字段值?where?條件表達(dá)式"

sql
="update?數(shù)據(jù)表?set?字段1=值1,字段2=值2?……?字段n=值n?where?條件表達(dá)式"

(
3)?刪除數(shù)據(jù)記錄:

sql
="delete?from?數(shù)據(jù)表?where?條件表達(dá)式"

sql
="delete?from?數(shù)據(jù)表"?(將數(shù)據(jù)表所有記錄刪除)

(
4)?添加數(shù)據(jù)記錄:

sql
="insert?into?數(shù)據(jù)表?(字段1,字段2,字段3?…)?valuess?(值1,值2,值3?…)"

sql
="insert?into?目標(biāo)數(shù)據(jù)表?select?*?from?源數(shù)據(jù)表"?(把源數(shù)據(jù)表的記錄添加到目標(biāo)數(shù)據(jù)表)

(
5)?數(shù)據(jù)記錄統(tǒng)計(jì)函數(shù):

AVG(字段名)?得出一個(gè)表格欄平均值
COUNT(*|字段名)?對(duì)數(shù)據(jù)行數(shù)的統(tǒng)計(jì)或?qū)δ骋粰谟兄档臄?shù)據(jù)行數(shù)統(tǒng)計(jì)
MAX(字段名)?取得一個(gè)表格欄最大的值
MIN(字段名)?取得一個(gè)表格欄最小的值
SUM(字段名)?把數(shù)據(jù)欄的值相加

引用以上函數(shù)的方法:

sql
="select?sum(字段名)?as?別名?from?數(shù)據(jù)表?where?條件表達(dá)式"
set?rs=conn.excute(sql)

用?rs("別名")?獲取統(tǒng)的計(jì)值,其它函數(shù)運(yùn)用同上。

(
6)?數(shù)據(jù)表的建立和刪除:

CREATE?TABLE?數(shù)據(jù)表名稱(字段1?類型1(長度),字段2?類型2(長度)?……?)

例:
CREATE?TABLE?tab01(name?varchar(50),datetime?default?now())

DROP?TABLE?數(shù)據(jù)表名稱?(永久性刪除一個(gè)數(shù)據(jù)表)


在ASP編程時(shí),下面這些語句是必須知道的:

1.連接數(shù)據(jù)庫
a.?ASP與Access數(shù)據(jù)庫連接:
<%@?language=VBs?cript%>
<%
dim?conn,mdbfile
mdbfile
=server.mappath("數(shù)據(jù)庫名稱.mdb")
set?conn=server.createobject("adodb.connection")
conn.
open?"driver={microsoft?access?driver?(*.mdb)};uid=admin;pwd=數(shù)據(jù)庫密碼;dbq="&mdbfile
%>

b.?ASP與SQL數(shù)據(jù)庫連接:

<%@?language=VBs?cript%>
<%
dim?conn
set?conn=server.createobject("ADODB.connection")
con.
open?"PROVIDER=SQLOLEDB;DATA?SOURCE=SQL服務(wù)器名稱或IP地址;UID=sa;PWD=數(shù)據(jù)庫密碼;DATABASE=數(shù)據(jù)庫名稱
%>

建立記錄集對(duì)象:

set?rs=server.createobject("adodb.recordset")
rs.
open?SQL語句,conn,3,2

2.?記錄集對(duì)象的方法:

rs.movenext?將記錄指針從當(dāng)前的位置向下移一行
rs.moveprevious?將記錄指針從當(dāng)前的位置向上移一行
rs.movefirst?將記錄指針移到數(shù)據(jù)表第一行
rs.movelast?將記錄指針移到數(shù)據(jù)表最后一行
rs.absoluteposition
=N?將記錄指針移到數(shù)據(jù)表第N行
rs.absolutepage
=N?將記錄指針移到第N頁的第一行
rs.pagesize
=N?設(shè)置每頁為N條記錄
rs.pagecount?根據(jù)?pagesize?的設(shè)置返回總頁數(shù)
rs.recordcount?返回記錄總數(shù)
rs.bof?返回記錄指針是否超出數(shù)據(jù)表首端,true表示是,false為否
rs.eof?返回記錄指針是否超出數(shù)據(jù)表末端,true表示是,false為否
rs.
delete?刪除當(dāng)前記錄,但記錄指針不會(huì)向下移動(dòng)
rs.addnew?添加記錄到數(shù)據(jù)表末端
rs.
update?更新數(shù)據(jù)表記錄

附:

常數(shù)?常數(shù)值?說明
--------------------------------
adLockReadOnly?
1?缺省值,Recordset對(duì)象以只讀方式啟動(dòng),無法運(yùn)行AddNew、Update及Delete等方法
adLockPrssimistic?
2?當(dāng)數(shù)據(jù)源正在更新時(shí),系統(tǒng)會(huì)暫時(shí)鎖住其他用戶的動(dòng)作,以保持?jǐn)?shù)據(jù)一致性。
adLockOptimistic?
3?當(dāng)數(shù)據(jù)源正在更新時(shí),系統(tǒng)并不會(huì)鎖住其他用戶的動(dòng)作,其他用戶可以對(duì)數(shù)據(jù)進(jìn)行增、刪、改的操作。
adLockBatchOptimistic?
4?當(dāng)數(shù)據(jù)源正在更新時(shí),其他用戶必須將CursorLocation屬性改為adUdeClientBatch才能對(duì)數(shù)據(jù)進(jìn)行增、刪、改的操作。


MSSQL經(jīng)典語句?
?

1.按姓氏筆畫排序:Select?*?From?TableName?Order?By?CustomerName?Collate?Chinese_PRC_Stroke_ci_as?

2.數(shù)據(jù)庫加密:select?encrypt('原始密碼')
select?pwdencrypt('原始密碼')
select?pwdcompare('原始密碼','加密后密碼')?=?1--相同;否則不相同?encrypt('原始密碼')
select?pwdencrypt('原始密碼')
select?pwdcompare('原始密碼','加密后密碼')?=?1--相同;否則不相同

3.取回表中字段:declare?@list?varchar(1000),@sql?nvarchar(1000)?
select?@list=@list+','+b.name?from?sysobjects?a,syscolumns?b?where?a.id=b.id?and?a.name='表A'
set?@sql='select?'+right(@list,len(@list)-1)+'?from?表A'?
exec?(@sql)

4.查看硬盤分區(qū):EXEC?master..xp_fixeddrives

5.比較A,B表是否相等:if?(select?checksum_agg(binary_checksum(*))?from?A)
=
(
select?checksum_agg(binary_checksum(*))?from?B)
print?'相等'
else
print?'不相等'

6.殺掉所有的事件探察器進(jìn)程:DECLARE?hcforeach?CURSOR?GLOBAL?FOR?SELECT?'kill?'+RTRIM(spid)?FROM?master.dbo.sysprocesses
WHERE?program_name?IN('SQL?profiler',N'SQL?事件探查器')
EXEC?sp_msforeach_worker?'?'

7.記錄搜索:開頭到N條記錄
Select?Top?N?*?From?表
-------------------------------
N到M條記錄(要有主索引ID)Select?Top?M-N?*?From?表?Where?ID?in?(Select?Top?M?ID?From?表)?Order?by?ID?Desc
----------------------------------
N到結(jié)尾記錄
Select?Top?N?*?From?表?Order?by?ID?Desc

8.如何修改數(shù)據(jù)庫的名稱:sp_renamedb?'old_name',?'new_name'?

9:獲取當(dāng)前數(shù)據(jù)庫中的所有用戶表select?Name?from?sysobjects?where?xtype='u'?and?status>=0

10:獲取某一個(gè)表的所有字段select?name?from?syscolumns?where?id=object_id('表名')

11:查看與某一個(gè)表相關(guān)的視圖、存儲(chǔ)過程、函數(shù)select?a.*?from?sysobjects?a,?syscomments?b?where?a.id?=?b.id?and?b.text?like?'%表名%'

12:查看當(dāng)前數(shù)據(jù)庫中所有存儲(chǔ)過程select?name?as?存儲(chǔ)過程名稱?from?sysobjects?where?xtype='P'

13:查詢用戶創(chuàng)建的所有數(shù)據(jù)庫select?*?from?master..sysdatabases?D?where?sid?not?in(select?sid?from?master..syslogins?where?name='sa')
或者
select?dbid,?name?AS?DB_NAME?from?master..sysdatabases?where?sid?<>?0x01

14:查詢某一個(gè)表的字段和數(shù)據(jù)類型select?column_name,data_type?from?information_schema.columns
where?table_name?=?'表名'?

[n].[標(biāo)題]:Select?*?From?TableName?Order?By?CustomerName?

[n].[標(biāo)題]:Select?*?From?TableName?Order?By?CustomerName?

from:http://tb.blog.csdn.net/TrackBack.aspx?PostId=585515

?

觸發(fā)器
-MSSQL常用操作

?

不再新開文章.

這里只打算講解四部分了,也就最簡單、最常用的四部分。

1、觸發(fā)器。

定義:?何為觸發(fā)器?在SQL?Server里面也就是對(duì)某一個(gè)表的一定的操作,觸發(fā)某種條件,從而執(zhí)行的一段程序。觸發(fā)器是一個(gè)特殊的存儲(chǔ)過程。
常見的觸發(fā)器有三種:分別應(yīng)用于Insert?,?
Update?,?Delete?事件。(SQL?Server?2000定義了新的觸發(fā)器,這里不提)

我為什么要使用觸發(fā)器?比如,這么兩個(gè)表:

Create?Table?Student(?--學(xué)生表
StudentID?int?primary?key,?--學(xué)號(hào)
....
)

Create?Table?BorrowRecord(?--學(xué)生借書記錄表
BorrowRecord?int?identity(1,1),?--流水號(hào)?
StudentID?int?,?--學(xué)號(hào)
BorrowDate?datetime,?--借出時(shí)間
ReturnDAte?Datetime,?--歸還時(shí)間
...
)

用到的功能有:
1.如果我更改了學(xué)生的學(xué)號(hào),我希望他的借書記錄仍然與這個(gè)學(xué)生相關(guān)(也就是同時(shí)更改借書記錄表的學(xué)號(hào));
2.如果該學(xué)生已經(jīng)畢業(yè),我希望刪除他的學(xué)號(hào)的同時(shí),也刪除它的借書記錄。
等等。

這時(shí)候可以用到觸發(fā)器。對(duì)于1,創(chuàng)建一個(gè)Update觸發(fā)器:

Create?Trigger?truStudent
On?Student
for?Update
As
if?Update(StudentID)
begin

Update?BorrowRecord?
Set?StudentID=i.StudentID
From?BorrowRecord?br?,?Deleted?d?,Inserted?i?
Where?br.StudentID=d.StudentID

end?

理解觸發(fā)器里面的兩個(gè)臨時(shí)的表:Deleted?,?Inserted?。注意Deleted?與Inserted分別表示觸發(fā)事件的表“舊的一條記錄”和“新的一條記錄”。
一個(gè)Update?的過程可以看作為:生成新的記錄到Inserted表,復(fù)制舊的記錄到Deleted表,然后刪除Student記錄并寫入新紀(jì)錄。

對(duì)于2,創(chuàng)建一個(gè)Delete觸發(fā)器
Create?trigger?trdStudent
On?Student
for?Delete
As
Delete?BorrowRecord?
From?BorrowRecord?br?,?Delted?d
Where?br.StudentID=d.StudentID

從這兩個(gè)例子我們可以看到了觸發(fā)器的關(guān)鍵:A.2個(gè)臨時(shí)的表;B.觸發(fā)機(jī)制。
這里我們只講解最簡單的觸發(fā)器。復(fù)雜的容后說明。
事實(shí)上,我不鼓勵(lì)使用觸發(fā)器。觸發(fā)器的初始設(shè)計(jì)思想,已經(jīng)被“級(jí)聯(lián)”所替代.



?

MSSQL數(shù)據(jù)庫導(dǎo)出和導(dǎo)入
?

SQL?Server導(dǎo)出導(dǎo)入數(shù)據(jù)方法

?
?一、導(dǎo)出導(dǎo)入SQL?Server里某個(gè)數(shù)據(jù)庫?
?
1.?在SQL?Server企業(yè)管理器里選中要轉(zhuǎn)移的數(shù)據(jù)庫,按鼠標(biāo)右鍵,選所有任務(wù)->備份數(shù)據(jù)庫。?
2.?備份?選數(shù)據(jù)庫-完全,?目的?備份到?按添加按鈕?文件名?在SQL?Server服務(wù)器硬盤下輸入一個(gè)自定義的備份數(shù)據(jù)庫文件名(后綴一般是bak)?重寫?選重寫現(xiàn)有媒體?最后按確定按鈕。?如果生成的備份數(shù)據(jù)庫文件大于1M,要用壓縮工具壓縮后再到Internet上傳輸。?
3.?通過FTP或者remote?desktop或者pcanywhere等方法?把第二步生成的備份數(shù)據(jù)庫文件或者其壓縮后的文件傳到目的SQL?Server數(shù)據(jù)庫,如果有壓縮要解壓。?4.目的SQL?Server數(shù)據(jù)庫如果還沒有此數(shù)據(jù)庫,先創(chuàng)建一個(gè)新的數(shù)據(jù)庫;?然后選中這個(gè)新創(chuàng)建的數(shù)據(jù)庫,按鼠標(biāo)右鍵,選所有任務(wù)->還原數(shù)據(jù)庫?還原->從設(shè)備->選擇設(shè)備->磁盤->添加(找到要導(dǎo)入的備份數(shù)據(jù)庫文件名)->確定?還原備份集->數(shù)據(jù)庫-完全?最后按確定按鈕。完全的數(shù)據(jù)庫導(dǎo)入成功了。?(如果在已經(jīng)存在的SQL?Server數(shù)據(jù)庫上還原數(shù)據(jù)庫可能遇到有還有其它人正在使用它而恢復(fù)操做失敗,?可以去看?->管理->當(dāng)前活動(dòng)->/對(duì)象->找到數(shù)據(jù)庫下鎖的進(jìn)程號(hào)->到查詢分析器里用kill?進(jìn)程號(hào)殺掉這些鎖,?然后再做還原)?
注意:
如果在原有的目的SQL?Server數(shù)據(jù)庫上從備份文件(
*.bak)還原數(shù)據(jù)庫?會(huì)把已經(jīng)存在的表、存儲(chǔ)過程等數(shù)據(jù)庫對(duì):象全部替換成最近這次導(dǎo)入的備份數(shù)據(jù)庫里的內(nèi)容。?如果一定要還原備份文件(*.bak)里部分?jǐn)?shù)據(jù),需要另外建一個(gè)新數(shù)據(jù)庫,?其邏輯名稱和數(shù)量同備份文件(*.bak)里數(shù)據(jù)庫的邏輯名稱和數(shù)量一致;?新數(shù)據(jù)庫的物理文件名稱取得一定要和備份文件(*.bak)里數(shù)據(jù)庫的物理文件不一樣才行。?
?
二、導(dǎo)出導(dǎo)入SQL?Server里某個(gè)表?
?
1.?沒有防火墻,同一個(gè)局域網(wǎng)里或不在同一個(gè)局域網(wǎng)里,但通過Internet可以互相訪問?在SQL?Server企業(yè)管理器里選中目的數(shù)據(jù)庫?,按鼠標(biāo)右鍵,選所有任務(wù)->導(dǎo)入數(shù)據(jù)->?彈出數(shù)據(jù)轉(zhuǎn)換服務(wù)導(dǎo)入/導(dǎo)出向?qū)Т翱?/span>->下一步->?選數(shù)據(jù)源->?數(shù)據(jù)源(用于SQL?Server的Microfost?OLE?DB提供程序)->?服務(wù)器(可選擇局域網(wǎng)內(nèi)能訪問到的所有SQL?Server服務(wù)器,或者直接輸入IP地址)->?選擇使用windows身份驗(yàn)證還是使用SQL?Serve身份驗(yàn)證(輸入數(shù)據(jù)庫的用戶名和密碼)->?數(shù)據(jù)庫(可選擇上面選中SQL?Server服務(wù)器上所有權(quán)限范圍內(nèi)的數(shù)據(jù)庫)->下一步->?選擇目的->目的(用于SQL?Server的Microfost?OLE?DB提供程序)->?服務(wù)器(默認(rèn)為上一步里選中的導(dǎo)出服務(wù)器,也可以選其它局域網(wǎng)內(nèi)能訪問到的所有SQL?Server服務(wù)器,或者直接輸入IP地址)->?目的數(shù)據(jù)庫(可選擇上面選中SQL?Server服務(wù)器上所有權(quán)限范圍內(nèi)的數(shù)據(jù)庫)->下一步->?制定表復(fù)制或查詢->選從源數(shù)據(jù)庫復(fù)制表和視圖(也可以選擇用一條查詢指定要傳輸?shù)臄?shù)據(jù))->下一步->?選擇源表和視圖->在要導(dǎo)入的表和視圖前面選中源->目的出現(xiàn)同樣的表名(可以手工修改成別的表名)->?轉(zhuǎn)換->列映射和轉(zhuǎn)換里面可以修改源表和目的表之間字段的對(duì)應(yīng)關(guān)系,修改目的表字段的類型和長度等,?并可以選擇創(chuàng)建目的表,在目的表中增加行,除去并重新創(chuàng)建目的表,啟用標(biāo)志插入等選項(xiàng)->確定->下一步->?保存、調(diào)度和復(fù)制包->時(shí)間->立即運(yùn)行(如果要實(shí)現(xiàn)隔一段時(shí)間自動(dòng)導(dǎo)出導(dǎo)入數(shù)據(jù),選調(diào)度DTS包以便以后執(zhí)行)->?保存(可以不選)->[?保存DTS包(如果以后還要轉(zhuǎn)移這批相同的數(shù)據(jù),可以把本次導(dǎo)出導(dǎo)入的內(nèi)容和步驟保存起來,?存到SQL?Server即可,保存的時(shí)候要輸入DTS的包名及詳細(xì)描述)->下一步->?]->完成?正在執(zhí)行包->圖形界面顯示創(chuàng)建表及插入記錄的步驟和狀態(tài)->完成?
2.?經(jīng)過防火墻,不在同一個(gè)局域網(wǎng)里?①、導(dǎo)出表里的數(shù)據(jù)到文本文件:?在SQL?Server企業(yè)管理器里選中目的數(shù)據(jù)庫,按鼠標(biāo)右鍵,選所有任務(wù)->?導(dǎo)入數(shù)據(jù)->彈出數(shù)據(jù)轉(zhuǎn)換服務(wù)導(dǎo)入/導(dǎo)出向?qū)Т翱?/span>->下一步->?選數(shù)據(jù)源->?數(shù)據(jù)源(用于SQL?Server的Microfost?OLE?DB提供程序)->?服務(wù)器(可選擇局域網(wǎng)內(nèi)能訪問到的所有SQL?Server服務(wù)器)->?選擇使用windows身份驗(yàn)證還是使用SQL?Serve身份驗(yàn)證(輸入數(shù)據(jù)庫的用戶名和密碼)->?數(shù)據(jù)庫(可選擇上面選中SQL?Server服務(wù)器上所有權(quán)限范圍內(nèi)的數(shù)據(jù)庫)->下一步->?選擇目的->目的(文本文件)->?文件名(在自己的電腦硬盤中生成一個(gè)自定義的文本文件)?->下一步->?制定表復(fù)制或查詢->選從源數(shù)據(jù)庫復(fù)制表和視圖(也可以選擇用一條查詢指定要傳輸?shù)臄?shù)據(jù))->下一步->?選擇目的文件格式->源(選擇要導(dǎo)出的表)->用默認(rèn)的帶分隔符->選第一行包含有列名稱選項(xiàng)->下一步->?保存、調(diào)度和復(fù)制包->時(shí)間->立即運(yùn)行(如果要實(shí)現(xiàn)隔一段時(shí)間自動(dòng)導(dǎo)出到文本文件,選調(diào)度DTS包以便以后執(zhí)行)->?保存(可以不選)->?[保存DTS包(保存的時(shí)候要輸入DTS的包名及詳細(xì)描述)->下一步->]->完成?正在執(zhí)行包->圖形界面顯示表到文本文件的步驟和狀態(tài)->完成?如果生成的文本文件大于1M,要用壓縮工具壓縮后再到Internet上傳輸。?②、通過FTP或者remote?desktop或者pcanywhere等方法把?第①步生成的文本文件或者其壓縮后的文件傳到目的SQL?Server數(shù)據(jù)庫,如果有壓縮要解壓。?③、把文本文件導(dǎo)入目的SQL?Server數(shù)據(jù)庫?直接把文本文件導(dǎo)入目的SQL?Server數(shù)據(jù)庫里跟文本文件同名的新表名時(shí),默認(rèn)的會(huì)把所有字段類型都變成字符串。?所以我們要這樣做:?在源SQL?Server數(shù)據(jù)庫上先生成創(chuàng)建表的sql語句?在SQL?Server查詢分析器里->選中源數(shù)據(jù)庫里表名->按右鍵->在新窗口中編寫對(duì)象腳本->創(chuàng)建->?復(fù)制下新窗口內(nèi)創(chuàng)建表名的sql語句?到目標(biāo)SQL?Server數(shù)據(jù)庫上查詢分析器里執(zhí)行創(chuàng)建表名的sql語句,生成空表結(jié)構(gòu)。?(如果已經(jīng)存在這樣的表名,修改建表的sql語句,在表名后面加上導(dǎo)入時(shí)間的年月信息,例如table_0113)?調(diào)用導(dǎo)入/導(dǎo)出工具->彈出數(shù)據(jù)轉(zhuǎn)換服務(wù)導(dǎo)入/導(dǎo)出向?qū)Т翱?/span>->下一步->?選數(shù)據(jù)源->?數(shù)據(jù)源(文本文件)->?文件名(已傳到目的SQL?Server數(shù)據(jù)庫下要導(dǎo)入的文本文件,后綴可以不是*.txt,?但是常規(guī)文本編輯器能打開的文件,文件類型選全部)->下一步->?選擇文件格式->用默認(rèn)的帶分隔符->選第一行包含有列名稱選項(xiàng)->下一步->?制定列分割符->逗號(hào)->下一步->?選擇目的->目的(用于SQL?Server的Microfost?OLE?DB提供程序)->?服務(wù)器(可選擇目標(biāo)局域網(wǎng)內(nèi)能訪問到的所有SQL?Server服務(wù)器)->?選擇使用windows身份驗(yàn)證還是使用SQL?Serve身份驗(yàn)證(輸入數(shù)據(jù)庫的用戶名和密碼)->?數(shù)據(jù)庫(可選擇上面選中SQL?Server服務(wù)器上所有權(quán)限范圍內(nèi)的數(shù)據(jù)庫)->下一步->?選擇源表和視圖->修改目的表名為剛才創(chuàng)建的表名->轉(zhuǎn)換(在目的表中追加行)?->下一步->?保存、調(diào)度和復(fù)制包->?時(shí)間->立即運(yùn)行(如果要實(shí)現(xiàn)隔一段時(shí)間自動(dòng)把文本文件導(dǎo)入,選調(diào)度DTS包以便以后執(zhí)行)->?保存(可以不選)->?[保存DTS包(保存的時(shí)候要輸入DTS的包名及詳細(xì)描述)->下一步->]->完成?正在執(zhí)行包->圖形界面顯示文本文件到表的步驟和狀態(tài)->完成?如果要更改導(dǎo)入時(shí)間的年月信息的表名,例如table_0113到原來的表名,?在企業(yè)管理器里把原來的表名改成table_old_0113,table_0113改名成table。?這會(huì)對(duì)應(yīng)用程序里頻繁訪問的表照成一定的中斷。?
注意:
源表上的建的索引和主鍵約束不能用上面介紹的1和2方法轉(zhuǎn)移過來,還需要手工來建索引和主鍵。?標(biāo)志種子和not?null的約束可以繼承過來。?導(dǎo)入視圖時(shí)會(huì)把源視圖里所有的真實(shí)數(shù)據(jù)導(dǎo)入成一個(gè)新表,而不是視圖。
?
?三、SQL?Server存儲(chǔ)過程或用戶定義的函數(shù)導(dǎo)出導(dǎo)入
?
?
1、導(dǎo)出存儲(chǔ)過程或用戶定義的函數(shù)成*.sql文件?在SQL?Server企業(yè)管理器里選中源數(shù)據(jù)庫,?存儲(chǔ)過程->單選或者多選中要轉(zhuǎn)移的存儲(chǔ)過程->?用戶定義的函數(shù)->單選或者多選中要轉(zhuǎn)移的函數(shù)->?按鼠標(biāo)右鍵,選所有任務(wù)->生成SQL腳本->確定->在自己的電腦硬盤中生成一個(gè)自定義的*.sql文件->?保存->正在生成SQL腳本->成功?2、如果目的數(shù)據(jù)庫經(jīng)過防火墻,不在同一個(gè)局域網(wǎng)里,?要通過FTP或者remote?desktop或者pcanywhere等方法把第1步生成的*.sql文件傳到目的SQL?Server數(shù)據(jù)庫服務(wù)器上。?3、用查詢分析器進(jìn)入SQL?Server目的數(shù)據(jù)庫,?從菜單里選文件->打開->打開查詢文件->選中第1步生成的*.sql文件->點(diǎn)執(zhí)行查詢的綠色倒三角型快捷鍵->?查詢窗口里會(huì)出現(xiàn)執(zhí)行后的消息(有時(shí)候可能因?yàn)榇鎯?chǔ)過程和用戶定義的函數(shù)之間有一定的依賴關(guān)系,會(huì)報(bào)一些錯(cuò)。?最好先執(zhí)行用戶定義的函數(shù)的*.sql文件,再執(zhí)行存儲(chǔ)過程的*.sql文件)?
?
四、ORACLE數(shù)據(jù)庫里表導(dǎo)入SQL?Server數(shù)據(jù)庫
?
?
1、在目的SQL?Server數(shù)據(jù)庫服務(wù)器上安裝ORACLE?Client軟件或者ORACLE?ODBC?Driver.?在$ORACLE_HOMEnetworkadmintnsnames.ora里配置ORACLE數(shù)據(jù)庫的別名(service?name)。?
?
2、在WIN2000或者win2003服務(wù)器->管理工具->數(shù)據(jù)源(ODBC)->?系統(tǒng)DSN(本機(jī)器上NT域用戶都可以用)->添加->ORACLE?ODBC?Driver->完成->?data?source?name?可以自定義,我一般填ORACLE數(shù)據(jù)庫的sid標(biāo)志,?description里可以填ORACLE數(shù)據(jù)庫詳細(xì)描述,也可以不填->?data?source?service?name?填第1步定義的ORACLE數(shù)據(jù)庫別名->OK。?(用戶DSN和文件DSN也可以類似配置,但使用的時(shí)候有一些限制)
?
3、SQL?Server的導(dǎo)入和導(dǎo)出數(shù)據(jù)工具里->選數(shù)據(jù)源->?數(shù)據(jù)源(其它(ODBC數(shù)據(jù)源))->?選第2步在ODBC里定義的系統(tǒng)DSN?source?name,用戶名密碼處填寫ORACLE系統(tǒng)的用戶名和密碼->?下一步->選擇目的,選SQL?Server數(shù)據(jù)庫(跟上面第二點(diǎn)講的一致,就不重復(fù)了)。
注意:
在ORACLE表和SQL?Server表之間
'轉(zhuǎn)換'那步很重要,?可以改變默認(rèn)的字段數(shù)據(jù)類型,如image->text,decimal->int?
?
五、SQL?Server數(shù)據(jù)庫里表導(dǎo)入ORACLE數(shù)據(jù)庫
?
?方法一.導(dǎo)出目的選通過ODBC數(shù)據(jù)源里定義的ORACLE數(shù)據(jù)庫,?注意ORACLE里表名都是大寫的.?我一般在ORACLE這邊先生成好表結(jié)構(gòu),再選擇SQL?SERVER源表往ORACLE目的表里追加數(shù)據(jù).?數(shù)據(jù)傳輸速度比方法二慢.?方法二.從SQL?Server數(shù)據(jù)庫導(dǎo)入數(shù)據(jù)到ORACLE數(shù)據(jù)庫可以選擇用Windows下ORACLE9i企業(yè)或者個(gè)人版數(shù)據(jù)庫做中轉(zhuǎn)。?
(?注意:ORACLE通過訪問SQL?Server的數(shù)據(jù)庫鏈接時(shí),用select?
*?的時(shí)候字段名是用雙引號(hào)引起來的。)?
?
MySQL數(shù)據(jù)庫導(dǎo)出和導(dǎo)入
1).MySQLimport的語法介紹:?

  MySQLimport位于MySQL
/bin目錄中,是MySQL的一個(gè)載入(或者說導(dǎo)入)數(shù)據(jù)的一個(gè)非常有效的工具。這是一個(gè)命令行工具。有兩個(gè)參數(shù)以及大量的選項(xiàng)可供選擇。這個(gè)工具把一個(gè)文本文件(text?file)導(dǎo)入到你指定的數(shù)據(jù)庫和表中。比方說我們要從文件Customers.txt中把數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫Meet_A_Geek中的表Custermers中:?

  MySQLimport?Meet_A_Geek?Customers.txt?

  注意:這里Customers.txt是我們要導(dǎo)入數(shù)據(jù)的文本文件,而Meet_A_Geek是我們要操作的數(shù)據(jù)庫,數(shù)據(jù)庫中的表名是Customers,這里文本文件的數(shù)據(jù)格式必須與Customers表中的記錄格式一致,否則MySQLimport命令將會(huì)出錯(cuò)。

  其中表的名字是導(dǎo)入文件的第一個(gè)句號(hào)(.)前面文件字符串,另外一個(gè)例子:MySQLimport?Meet_A_Geek?Cus.
to.mers.txt

  那么我們將把文件中的內(nèi)容導(dǎo)入到數(shù)據(jù)庫Meet_A_Geek?中的Cus表中。?

  上面的例子中,都只用到兩個(gè)參數(shù),并沒有用到更多的選項(xiàng),下面介紹MySQLimport的選項(xiàng)?

  
2).MySQLimport的常用選項(xiàng)介紹:?

  選項(xiàng)?功能?

  
-d?or?--delete?新數(shù)據(jù)導(dǎo)入數(shù)據(jù)表中之前刪除數(shù)據(jù)數(shù)據(jù)表中的所有信息?
  -f?or?--force?不管是否遇到錯(cuò)誤,MySQLimport將強(qiáng)制繼續(xù)插入數(shù)據(jù)?
  -i?or?--ignore?MySQLimport跳過或者忽略那些有相同唯一關(guān)鍵字的行,?導(dǎo)入文件中的數(shù)據(jù)將被忽略。?
  -l?or?-lock-tables?數(shù)據(jù)被插入之前鎖住表,這樣就防止了,你在更新數(shù)據(jù)庫時(shí),用戶的查詢和更新受到影響。?
  
-r?or?-replace?這個(gè)選項(xiàng)與-i選項(xiàng)的作用相反;此選項(xiàng)將替代表中有相同唯一關(guān)鍵字的記錄。?
  
--fields-enclosed-?by=?char?指定文本文件中數(shù)據(jù)的記錄時(shí)以什么括起的,?很多情況下數(shù)據(jù)以雙引號(hào)括起。?默認(rèn)的情況下數(shù)據(jù)是沒有被字符括起的。?

  
--fields-terminated-?by=char?指定各個(gè)數(shù)據(jù)的值之間的分隔符,在句號(hào)分隔的文件中,分隔符是句號(hào)。您可以用此選項(xiàng)指定數(shù)據(jù)之間的分隔符。

  默認(rèn)的分隔符是跳格符(Tab)?

  
--lines-terminated-?by=str?此選項(xiàng)指定文本文件中行與行之間數(shù)據(jù)的分隔字符串或者字符。?默認(rèn)的情況下MySQLimport以newline為行分隔符。?

  您可以選擇用一個(gè)字符串來替代一個(gè)單個(gè)的字符:?

  一個(gè)新行或者一個(gè)回車。?

  MySQLimport命令常用的選項(xiàng)還有
-v?顯示版本(version),-p?提示輸入密碼(password)等。?

  
3).例子:導(dǎo)入一個(gè)以逗號(hào)為分隔符的文件?

  文件中行的記錄格式是這樣的:?

  "
1",?"ORD89876",?"1?Dozen?Roses",?"19991226"?

  我們的任務(wù)是要把這個(gè)文件里面的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫Meet_A_Geek中的表格Orders中,我們使用這個(gè)命令:?

  bin
/MySQLimport?–prl?–fields-enclosed-by="?–fields-terminated-by=,?Meet_A_Geek?Orders.txt?

  這個(gè)命令可能看起來很不爽,不過當(dāng)你熟悉了之后,這是非常簡單的。第一部分,bin
/MySQLimport?,告訴操作系統(tǒng)你要運(yùn)行的命令是MySQL/bin目錄下的MySQLimport,選項(xiàng)p是要求輸入密碼,這樣就要求你在改動(dòng)數(shù)據(jù)庫之前輸入密碼,操作起來會(huì)更安全。?我們用了r選項(xiàng)是因?yàn)槲覀兿胍驯碇械奈ㄒ魂P(guān)鍵字與文件記錄中有重復(fù)唯一關(guān)鍵字的記錄替換成文件中的數(shù)據(jù)。我們表單中的數(shù)據(jù)不是最新的,需要用文件中的數(shù)據(jù)去更新,因而就用r這個(gè)選項(xiàng),替代數(shù)據(jù)庫中已經(jīng)有的記錄。l選項(xiàng)的作用是在我們插入數(shù)據(jù)的時(shí)候鎖住表,這樣就阻止了用戶在我們更新表的時(shí)候?qū)Ρ磉M(jìn)行查詢或者更改的操作。
  批處理是一種非交互式運(yùn)行MySQL程序的方法,如同您在MySQL中使用的命令一樣,你仍然將使用這些命令。?

  為了實(shí)現(xiàn)批處理,您重定向一個(gè)文件到MySQL程序中,首先我們需要一個(gè)文本文件,這個(gè)文本文件包含有與我們在MySQL中輸入的命令相同的文本。?

  比如我們要插入一些數(shù)據(jù),使用包含下面文本的文件(文件名為New_Data.sql,當(dāng)然我們也可以取名為New_Data.txt及任何其他的合法名字,并不一定要以后綴sql結(jié)尾):?

  
USE?Meet_A_Geek;?
  
INSERT?INTO?Customers?(Customer_ID,?Last_Name)?VALUES(NULL,?"Block");?
  
INSERT?INTO?Customers?(Customer_ID,?Last_Name)?VALUES(NULL,?"Newton");?
  
INSERT?INTO?Customers?(Customer_ID,?Last_Name)?VALUES(NULL,?"Simmons");?

  注意上面的這些句子的語法都必須是正確的,并且每個(gè)句子以分號(hào)結(jié)束。?

  上面的USE命令選擇數(shù)據(jù)庫,INSERT命令插入數(shù)據(jù)。?

  下面我們要把上面的文件導(dǎo)入到數(shù)據(jù)庫中,導(dǎo)入之前要確認(rèn)數(shù)據(jù)庫已經(jīng)在運(yùn)行,即是MySQLd進(jìn)程(或者說服務(wù),Windows?NT下面稱為”服務(wù)“,unix下面為”進(jìn)程“)已經(jīng)在運(yùn)行。?

  然后運(yùn)行下面的命令:?

  bin
/MySQL?–p?<?/home/mark/New_Data.sql?

  接著按提示輸入密碼,如果上面的文件中的語句沒有錯(cuò)誤,那么這些數(shù)據(jù)就被導(dǎo)入到了數(shù)據(jù)庫中。?

  命令行中使用LOAD?DATA?INFILE?從文件中導(dǎo)入數(shù)據(jù)到數(shù)據(jù)庫:?

  現(xiàn)在您可能會(huì)問自己,"究竟為什么我要輸入所有的這些SQL語句到文件中,然后通過程序運(yùn)行它們呢?”?
這樣看起來好像需要大量的工作。很好,你這樣想很可能就對(duì)了。但是假如你有從所有這些命令中產(chǎn)生的log記錄呢?現(xiàn)在這樣就很棒,嗯,大多數(shù)數(shù)據(jù)庫都會(huì)自動(dòng)產(chǎn)生數(shù)據(jù)庫中的事件記錄的log。而大部分log都包含有用過的原始的SQL命令。因此,如果您不能從您現(xiàn)在的數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù)到新的MySQL數(shù)據(jù)庫中使用,那么您可以使用log和MySQL的批處理特性,來快速且方便地導(dǎo)入您地?cái)?shù)據(jù)。當(dāng)然,這樣就省去了打字的麻煩。?

  
LOAD?DATA?INFILE?

  這是我們要介紹的最后一個(gè)導(dǎo)入數(shù)據(jù)到MySQL數(shù)據(jù)庫中的方法。這個(gè)命令與MySQLimport非常相似,但這個(gè)方法可以在MySQL命令行中使用。也就是說您可以在所有使用API的程序中使用這個(gè)命令。使用這種方法,您就可以在應(yīng)用程序中導(dǎo)入您想要導(dǎo)入的數(shù)據(jù)。?

  使用這個(gè)命令之前,MySQLd進(jìn)程(服務(wù))必須已經(jīng)在運(yùn)行。

  啟動(dòng)MySQL命令行:
  bin
/MySQL?–p?

  按提示輸入密碼,成功進(jìn)入MySQL命令行之后,輸入下面的命令:

  
USE?Meet_A_Geek;?
  
LOAD?DATA?INFILE?"/home/mark/data.sql"?INTO?TABLE?Orders;?

  簡單的講,這樣將會(huì)把文件data.sql中的內(nèi)容導(dǎo)入到表Orders中,如MySQLimport工具一樣,這個(gè)命令也有一些可以選擇的參數(shù)。比如您需要把自己的電腦上的數(shù)據(jù)導(dǎo)入到遠(yuǎn)程的數(shù)據(jù)庫服務(wù)器中,您可以使用下面的命令:?
  
LOAD?DATA?LOCAL?INFILE?"C:MyDocsSQL.txt"?INTO?TABLE?Orders;?
  上面的LOCAL參數(shù)表示文件是本地的文件,服務(wù)器是您所登陸的服務(wù)器。?

  這樣就省去了使用ftp來上傳文件到服務(wù)器,MySQL替你完成了.?

  您也可以設(shè)置插入語句的優(yōu)先級(jí),如果您要把它標(biāo)記為低優(yōu)先級(jí)(LOW_PRIORITY),那么MySQL將會(huì)等到?jīng)]有其他人讀這個(gè)表的時(shí)候,才把插入數(shù)據(jù)。可以使用如下的命令:?
  ?
LOAD?DATA?LOW_PRIORITY?INFILE?"/home/mark/data.sql"?INTO?TABLE?Orders;?

  您也可以指定是否在插入數(shù)據(jù)的時(shí)候,取代或者忽略文件與數(shù)據(jù)表中重復(fù)的鍵值。替代重復(fù)的鍵值的語法:?

  
LOAD?DATA?LOW_PRIORITY?INFILE?"/home/mark/data.sql"?REPLACE?INTO?TABLE?Orders;?

  上面的句子看起來有點(diǎn)笨拙,但卻把關(guān)鍵字放在了讓您的剖析器可以理解的地方。?

  下面的一對(duì)選項(xiàng)描述了文件的記錄格式,這些選項(xiàng)也是在MySQLimport工具中可以用的。他們在這里看起來有點(diǎn)不同。首先,要用到FIELDS關(guān)鍵字,如果用到這個(gè)關(guān)鍵字,MySQL剖析器希望看到至少有下面的一個(gè)選項(xiàng):

  TERMINATED?
BY?character?
  ?ENCLOSED?
BY?character?
  ?ESCAPED?
BY?character?

  這些關(guān)鍵字與它們的參數(shù)跟MySQLimport中的用法是一樣的.?The?
  ?TERMINATED?
BY?描述字段的分隔符,默認(rèn)情況下是tab字符(t)?
  ?ENCLOSED?BY描述的是字段的括起字符。比方以引號(hào)括起每一個(gè)字段。?
  ?ESCAPED?
BY?描述的轉(zhuǎn)義字符。默認(rèn)的是反些杠(backslash:?).?

  下面仍然使用前面的MySQLimport命令的例子,用LOAD?DATA?INFILE語句把同樣的文件導(dǎo)入到數(shù)據(jù)庫中:?

  
LOAD?DATA?INFILE?"/home/mark/Orders.txt"?REPLACE?INTO?TABLE?Orders?FIELDS?TERMINATED?BY?','?  ENCLOSED?BY?'"';?

  
LOAD?DATA?INFILE語句中有一個(gè)MySQLimport工具中沒有特點(diǎn):?

  
LOAD?DATA?INFILE?可以按指定的列把文件導(dǎo)入到數(shù)據(jù)庫中。?

  當(dāng)我們要把數(shù)據(jù)的一部分內(nèi)容導(dǎo)入的時(shí)候,這個(gè)特點(diǎn)就很重要。比方說,我們要從Access數(shù)據(jù)庫升級(jí)到MySQL數(shù)據(jù)庫的時(shí)候,需要加入一些欄目(列
/字段/field)到MySQL數(shù)據(jù)庫中,以適應(yīng)一些額外的需要。?

  這個(gè)時(shí)候,我們的Access數(shù)據(jù)庫中的數(shù)據(jù)仍然是可用的,但是因?yàn)檫@些數(shù)據(jù)的欄目(field)與MySQL中的不再匹配,因此而無法再使用MySQLimport工具。盡管如此,我們?nèi)匀豢梢允褂肔OAD?DATA?INFILE,下面的例子顯示了如何向指定的欄目(field)中導(dǎo)入數(shù)據(jù):?

  
LOAD?DATA?INFILE?"/home/Order.txt"?INTO?TABLE?Orders(Order_Number,?Order_Date,?Customer_ID);?

  如您所見,我們可以指定需要的欄目(fields)。這些指定的字段依然是以括號(hào)括起,由逗號(hào)分隔的,如果您遺漏了其中任何一個(gè),MySQL將會(huì)提醒您
^_^?

  Importing?Data?
from?Microsoft?Access?(從Access中導(dǎo)入數(shù)據(jù),略)

  您可以看到MySQL有很多可以導(dǎo)入數(shù)據(jù)的方法,然而這些只是數(shù)據(jù)傳輸中的一半。另外的一般是從MySQL數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù)。有許多的原因我們需要導(dǎo)出數(shù)據(jù)。一個(gè)重要的原因是用于備份數(shù)據(jù)庫。數(shù)據(jù)的造價(jià)常常是昂貴的,需要謹(jǐn)慎處理它們。經(jīng)常地備份可以幫助防止寶貴數(shù)據(jù)地丟失;另外一個(gè)原因是,也許您希望導(dǎo)出數(shù)據(jù)來共享。?在這個(gè)信息技術(shù)不斷成長的世界中,共享數(shù)據(jù)變得越來越常見。?

  比方說Macmillan?USA維護(hù)護(hù)著一個(gè)將要出版的書籍的大型數(shù)據(jù)庫。這個(gè)數(shù)據(jù)庫在許多書店之間共享,這樣他們就知道哪些書將會(huì)很快出版。醫(yī)院越來越走向采用無紙病歷記錄,這樣這些病歷可以隨時(shí)跟著你。世界變得越來越小,信息也被共享得越來越多。有很多中導(dǎo)出數(shù)據(jù)得方法,它們都跟導(dǎo)入數(shù)據(jù)很相似。因?yàn)?#xff0c;畢竟,這些都只是一種透視得方式。從數(shù)據(jù)庫導(dǎo)出的數(shù)據(jù)就是從另一端導(dǎo)入的數(shù)據(jù)。這里我們并不討論其他的數(shù)據(jù)庫各種各樣的導(dǎo)出數(shù)據(jù)的方法,您將學(xué)會(huì)如何用MySQL來實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出。

  使用MySQLdump:?
  MySQLdump命令位于MySQL
/bin/目錄中?

  MySQLdump工具很多方面類似相反作用的工具M(jìn)ySQLimport。它們有一些同樣的選項(xiàng)。但MySQLdump能夠做更多的事情。它可以把整個(gè)數(shù)據(jù)庫裝載到一個(gè)單獨(dú)的文本文件中。這個(gè)文件包含有所有重建您的數(shù)據(jù)庫所需要的SQL命令。這個(gè)命令取得所有的模式(
Schema,后面有解釋)并且將其轉(zhuǎn)換成DDL語法(CREATE語句,即數(shù)據(jù)庫定義語句),取得所有的數(shù)據(jù),并且從這些數(shù)據(jù)中創(chuàng)建INSERT語句。這個(gè)工具將您的數(shù)據(jù)庫中所有的設(shè)計(jì)倒轉(zhuǎn)。因?yàn)樗械臇|西都被包含到了一個(gè)文本文件中。這個(gè)文本文件可以用一個(gè)簡單的批處理和一個(gè)合適SQL語句導(dǎo)回到MySQL中。這個(gè)工具令人難以置信地簡單而快速。決不會(huì)有半點(diǎn)讓人頭疼地地方。?

  因此,如果您像裝載整個(gè)數(shù)據(jù)庫Meet_A_Geek的內(nèi)容到一個(gè)文件中,可以使用下面的命令:?
  ?bin
/MySQLdump?–p?Meet_A_Geek?>?MeetAGeek_Dump_File.txt?

  這個(gè)語句也允許您指定一個(gè)表進(jìn)行dump(備份
/導(dǎo)出/裝載?)。如果您只是希望把數(shù)據(jù)庫Meet_A_Geek中的表Orders中的整個(gè)內(nèi)容導(dǎo)出到一個(gè)文件,可以使用下面的命令:?
  ?bin
/MySQLdump?–p?Meet_A_Geek?Orders?>MeetAGeek_Orders.txt?

  這個(gè)非常的靈活,您甚至可以使用WHERE從句來選擇您需要的記錄導(dǎo)出到文件中。要達(dá)到這樣的目的,可以使用類似于下面的命令:?
  ?bin
/MySQLdump?–p?–where="Order_ID?>?2000"?Meet_A_Geek?Orders?>?Special_Dump.txt?

  MySQLdump工具有大量的選項(xiàng),部分選項(xiàng)如下表:?

  選項(xiàng)
/Option?作用/Action?Performed?

  
--add-drop-table?
  ?這個(gè)選項(xiàng)將會(huì)在每一個(gè)表的前面加上DROP?TABLE?IF?EXISTS語句,這樣可以保證導(dǎo)回MySQL數(shù)據(jù)庫的時(shí)候不會(huì)出錯(cuò),因?yàn)槊看螌?dǎo)回的時(shí)候,都會(huì)首先檢查表是否存在,存在就刪除?

  
--add-locks?
  ?這個(gè)選項(xiàng)會(huì)在INSERT語句中捆上一個(gè)LOCK?TABLE和UNLOCK?TABLE語句。這就防止在這些記錄被再次導(dǎo)入數(shù)據(jù)庫時(shí)其他用戶對(duì)表進(jìn)行的操作?

  
-c?or?-?complete_insert?
  ?這個(gè)選項(xiàng)使得MySQLdump命令給每一個(gè)產(chǎn)生INSERT語句加上列(field)的名字。當(dāng)把數(shù)據(jù)導(dǎo)出導(dǎo)另外一個(gè)數(shù)據(jù)庫時(shí)這個(gè)選項(xiàng)很有用。?

  
--delayed-insert?在INSERT命令中加入DELAY選項(xiàng)?
  ?-F?or?-flush-logs?使用這個(gè)選項(xiàng),在執(zhí)行導(dǎo)出之前將會(huì)刷新MySQL服務(wù)器的log.?
  ?
-f?or?-force?使用這個(gè)選項(xiàng),即使有錯(cuò)誤發(fā)生,仍然繼續(xù)導(dǎo)出?
  ?
--full?這個(gè)選項(xiàng)把附加信息也加到CREATE?TABLE的語句中?
  ?-l?or?-lock-tables?使用這個(gè)選項(xiàng),導(dǎo)出表的時(shí)候服務(wù)器將會(huì)給表加鎖。?
  ?
-t?or?-no-create-?info?
  ?這個(gè)選項(xiàng)使的MySQLdump命令不創(chuàng)建CREATE?TABLE語句,這個(gè)選項(xiàng)在您只需要數(shù)據(jù)而不需要DDL(數(shù)據(jù)庫定義語句)時(shí)很方便。?

  
-d?or?-no-data?這個(gè)選項(xiàng)使的MySQLdump命令不創(chuàng)建INSERT語句。?
  ?在您只需要DDL語句時(shí),可以使用這個(gè)選項(xiàng)。?
  ?
--opt?此選項(xiàng)將打開所有會(huì)提高文件導(dǎo)出速度和創(chuàng)造一個(gè)可以更快導(dǎo)入的文件的選項(xiàng)。?
  ?-q?or?-quick?這個(gè)選項(xiàng)使得MySQL不會(huì)把整個(gè)導(dǎo)出的內(nèi)容讀入內(nèi)存再執(zhí)行導(dǎo)出,而是在讀到的時(shí)候就寫入導(dǎo)文件中。?
  ?
-T?path?or?-tab?=?path?這個(gè)選項(xiàng)將會(huì)創(chuàng)建兩個(gè)文件,一個(gè)文件包含DDL語句或者表創(chuàng)建語句,另一個(gè)文件包含數(shù)據(jù)。DDL文件被命名為table_name.sql,數(shù)據(jù)文件被命名為table_name.txt.路徑名是存放這兩個(gè)文件的目錄。目錄必須已經(jīng)存在,并且命令的使用者有對(duì)文件的特權(quán)。?

  
-w?"WHERE?Clause"?or?-where?=?"Where?clause?"?
  ?如前面所講的,您可以使用這一選項(xiàng)來過篩選將要放到導(dǎo)出文件的數(shù)據(jù)。?

  假定您需要為一個(gè)表單中要用到的帳號(hào)建立一個(gè)文件,經(jīng)理要看今年(2004年)所有的訂單(Orders),它們并不對(duì)DDL感興趣,并且需要文件有逗號(hào)分隔,因?yàn)檫@樣就很容易導(dǎo)入到Excel中。?為了完成這個(gè)人物,您可以使用下面的句子:?

  bin
/MySQLdump?–p?–where?"Order_Date?>='2000-01-01'"?
  ?–tab?
=?/home/mark?–no-create-info?–fields-terminated-by=,?Meet_A_Geek?Orders?
  ?這將會(huì)得到您想要的結(jié)果。?

  
schema:模式The?set?of?statements,?expressed?in?data?definition?language,?that?completely?describe?the?structure?of?a?data?base.?
  ?一組以數(shù)據(jù)定義語言來表達(dá)的語句集,該語句集完整地描述了數(shù)據(jù)庫的結(jié)構(gòu)。

  
SELECT?INTO?OUTFILE?:?

  如果您覺得MySQLdump工具不夠酷,就使用SELECT?
INTO?OUTFILE吧,?MySQL同樣提供一個(gè)跟LOAD?DATA?INFILE命令有相反作用的命令,這就是SELECT?INTO?OUTFILE?命令,這兩個(gè)命令有很多的相似之處。首先,它們有所有的選項(xiàng)幾乎相同。現(xiàn)在您需要完成前面用MySQLdump完成的功能,可以依照下面的步驟進(jìn)行操作:?

  
1.?確保MySQLd進(jìn)程(服務(wù))已經(jīng)在運(yùn)行?
  ?
2.?cd?/usr/local/MySQL?
  ?
3.?bin/MySQLadmin?ping?;//?如果這個(gè)句子通不過,可以用這個(gè):MySQLadmin?-u?root?-p?ping?
MySQLadmin?ping用于檢測MySQLd的狀態(tài),
is?alive說明正在運(yùn)行,出錯(cuò)則可能需要用戶名和密碼。?
  ?
4.?啟動(dòng)MySQL?監(jiān)聽程序.?
  ?
5.?bin/MySQL?–p?Meet_A_Geek;//?進(jìn)入MySQL命令行,并且打開數(shù)據(jù)庫Meet_A_Geek,需要輸入密碼?
  ?
6.?在命令行中,輸入一下命令:?

  
SELECT?*?INTO?OUTFILE?'/home/mark/Orders.txt'?
  ?FIELDS?
  ?TERMINATED?
BY?=?','?
  ?
FROM?Orders?
  ?
WHERE?Order_Date?>=?'2000-01-01'?

  在你按了Return(回車)之后,文件就創(chuàng)建了。這個(gè)句子就像一個(gè)規(guī)則的SELECT語句,只是把想屏幕的輸出重定向到了文件中。這意味這您可以使用JOIN來實(shí)現(xiàn)多表的高級(jí)查詢。這個(gè)特點(diǎn)也可以被用作一個(gè)報(bào)表產(chǎn)生器。?

  比方說,您可以組合這一章中討論的方法來產(chǎn)生一個(gè)非常有趣的查詢,試試這個(gè):?

  在MySQL目錄建立一個(gè)名為Report_G.rpt?的文本文件,加入下面的行:?

  
USE?Meet_A_Geek;?
  ?
INSERT?INTO?Customers?(Customer_ID,?Last_Name,?First_Name)?
  ?
VALUES?(NULL,?"Kinnard",?"Vicky");?
  ?
INSERT?INTO?Customers?(Customer_ID,?Last_Name,?First_Name)?
  ?
VALUES?(NULL,?"Kinnard",?"Steven");?
  ?
INSERT?INTO?Customers?(Customer_ID,?Last_Name,?First_Name)?
  ?
VALUES?(NULL,?"Brown",?"Sam");?
  ?
SELECT?Last_Name?INTO?OUTFILE?'/home/mark/Report.rpt'?
  ?
FROM?Customers?WHERE?Customer_ID?>?1;?

  然后確認(rèn)?MySQL進(jìn)程在運(yùn)行,并且您在MySQL目錄中,?輸入下面的命令:?

  bin
/MySQL?<?Report_G.rpt檢查您命名作為輸出的文件,這個(gè)文件將會(huì)包含所有您在Customers表中輸入的顧客的姓。?如您所見,您可以使用今天學(xué)到的導(dǎo)入/導(dǎo)出(import/export)的方法來幫助得到報(bào)表。?查看全文?

關(guān)于MSSQL數(shù)據(jù)庫的字段
?

數(shù)據(jù)類型是數(shù)據(jù)的一種屬性,表示數(shù)據(jù)所表示信息的類型。任何一種計(jì)算機(jī)語言都定義了自己的數(shù)據(jù)類型。當(dāng)然,不同的程序語言都具有不同的特點(diǎn),所定義的數(shù)據(jù)類型的各類和名稱都或多或少有些不同。SQLServer提供了25種數(shù)據(jù)類型:
  ·
Binary[(n)]
  ·
Varbinary[(n)]
  ·
Char[(n)]
  ·
Varchar[(n)]
  ·
Nchar[(n)]
  ·
Nvarchar[(n)]
  ·
Datetime
  ·
Smalldatetime
  ·
Decimal[(p[,s])]
  ·Numeric
[(p[,s])]
  ·
Float[(n)]
  ·
Real
  ·
Int
  ·
Smallint
  ·
Tinyint
  ·
Money
  ·
Smallmoney
  ·
Bit
  ·
Cursor
  ·Sysname
  ·
Timestamp
  ·
Uniqueidentifier
  ·
Text
  ·
Image
  ·
Ntext
(
1)二進(jìn)制數(shù)據(jù)類型

  二進(jìn)制數(shù)據(jù)包括Binary、Varbinary和Image
  Binary數(shù)據(jù)類型既可以是固定長度的(
Binary),也可以是變長度的。
  
Binary[(n)]是n位固定的二進(jìn)制數(shù)據(jù)。其中,n的取值范圍是從1到8000。其存儲(chǔ)窨的大小是n+4個(gè)字節(jié)。
  
Varbinary[(n)]是n位變長度的二進(jìn)制數(shù)據(jù)。其中,n的取值范圍是從1到8000。其存儲(chǔ)窨的大小是n+4個(gè)字節(jié),不是n個(gè)字節(jié)。
  在Image數(shù)據(jù)類型中存儲(chǔ)的數(shù)據(jù)是以位字符串存儲(chǔ)的,不是由SQLServer解釋的,必須由應(yīng)用程序來解釋。例如,應(yīng)用程序可以使用BMP、TIEF、GIF和JPEG格式把數(shù)據(jù)存儲(chǔ)在Image數(shù)據(jù)類型中。
(
2)字符數(shù)據(jù)類型

  字符數(shù)據(jù)的類型包括Char,Varchar和Text
  字符數(shù)據(jù)是由任何字母、符號(hào)和數(shù)字任意組合而成的數(shù)據(jù)。
  Varchar是變長字符數(shù)據(jù),其長度不超過8KB。Char是定長字符數(shù)據(jù),其長度最多為8KB。超過8KB的ASCII數(shù)據(jù)可以使用Text數(shù)據(jù)類型存儲(chǔ)。例如,因?yàn)镠tml文檔全部都是ASCII字符,并且在一般情況下長度超過8KB,所以這些文檔可以Text數(shù)據(jù)類型存儲(chǔ)在SQLServer中。
(
3)Unicode數(shù)據(jù)類型

  Unicode數(shù)據(jù)類型包括Nchar,Nvarchar和Ntext
  在MicrosoftSQLServer中,傳統(tǒng)的非Unicode數(shù)據(jù)類型允許使用由特定字符集定義的字符。在SQLServer安裝過程中,允許選擇一種字符集。使用Unicode數(shù)據(jù)類型,列中可以存儲(chǔ)任何由Unicode標(biāo)準(zhǔn)定義的字符。在Unicode標(biāo)準(zhǔn)中,包括了以各種字符集定義的全部字符。使用Unicode數(shù)據(jù)類型,所戰(zhàn)勝的窨是使用非Unicode數(shù)據(jù)類型所占用的窨大小的兩倍。
  在SQLServer中,Unicode數(shù)據(jù)以Nchar、Nvarchar和Ntext數(shù)據(jù)類型存儲(chǔ)。使用這種字符類型存儲(chǔ)的列可以存儲(chǔ)多個(gè)字符集中的字符。當(dāng)列的長度變化時(shí),應(yīng)該使用Nvarchar字符類型,這時(shí)最多可以存儲(chǔ)4000個(gè)字符。當(dāng)列的長度固定不變時(shí),應(yīng)該使用Nchar字符類型,同樣,這時(shí)最多可以存儲(chǔ)4000個(gè)字符。當(dāng)使用Ntext數(shù)據(jù)類型時(shí),該列可以存儲(chǔ)多于4000個(gè)字符。
(
4)日期和時(shí)間數(shù)據(jù)類型

  日期和時(shí)間數(shù)據(jù)類型包括Datetime和Smalldatetime兩種類型
  日期和時(shí)間數(shù)據(jù)類型由有效的日期和時(shí)間組成。例如,有效的日期和時(shí)間數(shù)據(jù)包括“
4/01/9812:15:00:00:00PM”和“1:28:29:15:01AM8/17/98”。前一個(gè)數(shù)據(jù)類型是日期在前,時(shí)間在后一個(gè)數(shù)據(jù)類型是霎時(shí)間在前,日期在后。在MicrosoftSQLServer中,日期和時(shí)間數(shù)據(jù)類型包括Datetime和Smalldatetime兩種類型時(shí),所存儲(chǔ)的日期范圍是從1753年1月1日開始,到9999年12月31日結(jié)束(每一個(gè)值要求8個(gè)存儲(chǔ)字節(jié))。使用Smalldatetime數(shù)據(jù)類型時(shí),所存儲(chǔ)的日期范圍是1900年1月1日開始,到2079年12月31日結(jié)束(每一個(gè)值要求4個(gè)存儲(chǔ)字節(jié))。
  日期的格式可以設(shè)定。設(shè)置日期格式的命令如下:
  SetDateFormat{format
|@format_var|
  其中,format
|@format_var是日期的順序。有效的參數(shù)包括MDY、DMY、YMD、YDM、MYD和DYM。在默認(rèn)情況下,日期格式為MDY。
  例如,當(dāng)執(zhí)行SetDateFormatYMD之后,日期的格式為年月日形式;當(dāng)執(zhí)行SetDateFormatDMY之后,日期的格式為日月有年形式
5)數(shù)字?jǐn)?shù)據(jù)類型

  數(shù)字?jǐn)?shù)據(jù)只包含數(shù)字。數(shù)字?jǐn)?shù)據(jù)類型包括正數(shù)和負(fù)數(shù)、小數(shù)(浮點(diǎn)數(shù))和整數(shù)
  整數(shù)由正整數(shù)和負(fù)整數(shù)組成,例如39、
250-2和33967。在MicrsoftSQLServer中,整數(shù)存儲(chǔ)的數(shù)據(jù)類型是  Int,Smallint和Tinyint。Int數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍大于Smallint數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍,而Smallint據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍大于Tinyint數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍。使用Int數(shù)據(jù)狗昔存儲(chǔ)數(shù)據(jù)的范圍是從-2147483648到2147483647(每一個(gè)值要求4個(gè)字節(jié)存儲(chǔ)空間)。使用Smallint數(shù)據(jù)類型時(shí),存儲(chǔ)數(shù)據(jù)的范圍從-32768到32767(每一個(gè)值要求2個(gè)字節(jié)存儲(chǔ)空間)。使用Tinyint數(shù)據(jù)類型時(shí),存儲(chǔ)數(shù)據(jù)的范圍是從0到255(每一個(gè)值要求1個(gè)字節(jié)存儲(chǔ)空間)。
  精確小婁數(shù)據(jù)在SQLServer中的數(shù)據(jù)類型是Decimal和Numeric。這種數(shù)據(jù)所占的存儲(chǔ)空間根據(jù)該數(shù)據(jù)的位數(shù)后的位數(shù)來確定。
  在SQLServer中,近似小數(shù)數(shù)據(jù)的數(shù)據(jù)類型是Float和Real。例如,三分之一這個(gè)分?jǐn)?shù)記作。
3333333,當(dāng)使用近似數(shù)據(jù)類型時(shí)能準(zhǔn)確表示。因此,從系統(tǒng)中檢索到的數(shù)據(jù)可能與存儲(chǔ)在該列中數(shù)據(jù)不完全一樣。
6)貨幣數(shù)據(jù)表示正的或者負(fù)的貨幣數(shù)量。

  在MicrosoftSQLServer中,貨幣數(shù)據(jù)的數(shù)據(jù)類型是Money和Smallmoney
  Money數(shù)據(jù)類型要求8個(gè)存儲(chǔ)字節(jié),Smallmoney數(shù)據(jù)類型要求4個(gè)存儲(chǔ)字節(jié)。

7)特殊數(shù)據(jù)類型

  特殊數(shù)據(jù)類型包括前面沒有提過的數(shù)據(jù)類型。特殊的數(shù)據(jù)類型有3種,即  
Timestamp、Bit和Uniqueidentifier。
  Timestamp用于表示SQLServer活動(dòng)的先后順序,以二進(jìn)投影的格式表示。Timestamp數(shù)據(jù)與插入數(shù)據(jù)或者日期和時(shí)間沒有關(guān)系。
  Bit由1或者0組成。當(dāng)表示真或者假、ON或者OFF時(shí),使用Bit數(shù)據(jù)類型。例如,詢問是否是每一次訪問的客戶機(jī)請求可以存儲(chǔ)在這種數(shù)據(jù)類型的列中。
  Uniqueidentifier由16字節(jié)的十六進(jìn)制數(shù)字組成,表示一個(gè)全局唯一的。當(dāng)表的記錄行要求唯一時(shí),GUID是非常有用。例如,在客戶標(biāo)識(shí)號(hào)列使用這種數(shù)據(jù)類型可以區(qū)別不同的客戶。
2.用戶定義的數(shù)據(jù)類型

  用戶定義的數(shù)據(jù)類型基于在MicrosoftSQLServer中提供的數(shù)據(jù)類型。當(dāng)幾個(gè)表中必須存儲(chǔ)同一種數(shù)據(jù)類型時(shí),并且為保證這些列有相同的數(shù)據(jù)類型、長度和可空性時(shí),可以使用用戶定義的數(shù)據(jù)類型。例如,可定義一種稱為  postal_code的數(shù)據(jù)類型,它基于Char數(shù)據(jù)類型。
  當(dāng)創(chuàng)建用戶定義的數(shù)據(jù)類型時(shí),必須提供三個(gè)數(shù):數(shù)據(jù)類型的名稱、所基于的系統(tǒng)數(shù)據(jù)類型和數(shù)據(jù)類型的可空性。
1)創(chuàng)建用戶定義的數(shù)據(jù)類型

  創(chuàng)建用戶定義的數(shù)據(jù)類型可以使用Transact
-SQL語句。系統(tǒng)存儲(chǔ)過程sp_addtype可以來創(chuàng)建用戶定義的數(shù)據(jù)類型。其語法形式如下:
  sp_addtype{type},
[,system_data_bype][,'null_type']
  其中,type是用戶定義的數(shù)據(jù)類型的名稱。system_data_type是系統(tǒng)提供的數(shù)據(jù)類型,例如Decimal、
IntChar  等等。null_type表示該數(shù)據(jù)類型是如何處理空值的,必須使用單引號(hào)引起來,例如'NULL''NOTNULL'或者'NONULL'
  例子:
  Usecust
  Execsp_addtypessn,
'Varchar(11)',"NotNull'
  創(chuàng)建一個(gè)用戶定義的數(shù)據(jù)類型ssn,其基于的系統(tǒng)數(shù)據(jù)類型是變長為11的字符,不允許空。
  例子:
  Usecust
  Execsp_addtypebirthday,datetime,
'Null'
  創(chuàng)建一個(gè)用戶定義的數(shù)據(jù)類型birthday,其基于的系統(tǒng)數(shù)據(jù)類型是DateTime,允許空。
  例子:
  Usemaster
  Execsp_addtypetelephone,
'varchar(24),'NotNull'
  Eexcsp_addtypefax,
'varchar(24)','Null'
  創(chuàng)建兩個(gè)數(shù)據(jù)類型,即telephone和fax
2)刪除用戶定義的數(shù)據(jù)類型

  當(dāng)用戶定義的數(shù)據(jù)類型不需要時(shí),可刪除。刪除用戶定義的數(shù)據(jù)類型的命令是sp_droptype{
'type'}。
  例子:
  Usemaster
  Execsp_droptype
'ssn'
  注意:當(dāng)表中的列還正在使用用戶定義的數(shù)據(jù)類型時(shí),或者在其上面還綁定有默認(rèn)或者規(guī)則時(shí),這種用戶定義的數(shù)據(jù)類型不能刪除。
SQLSERVER的字段類型說明

以下為SQL?SERVER7.0以上版本的字段類型說明。SQL?SERVER6.5的字段類型說明請參考SQL?SERVER提供的說明。?

  

字段類型
?描述
?
bit?0或1的整型數(shù)字?
int?從-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型數(shù)字?
smallint?從-2^15(-32,768)到2^15(32,767)的整型數(shù)字?
tinyint?從0到255的整型數(shù)字?

?
?
decimal?從-10^38到10^38-1的定精度與有效位數(shù)的數(shù)字?
numeric?decimal的同義詞?

?
?
money?從-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的貨幣數(shù)據(jù),最小貨幣單位千分之十?
smallmoney?從-214,748.3648到214,748.3647的貨幣數(shù)據(jù),最小貨幣單位千分之十?

?
?
float?從-1.79E+308到1.79E+308可變精度的數(shù)字?
real?從-3.04E+38到3.04E+38可變精度的數(shù)字?

?
?
datetime?從1753年1月1日到9999年12日31的日期和時(shí)間數(shù)據(jù),最小時(shí)間單位為百分之三秒或3.33毫秒?
smalldatetime?從1900年1月1日到2079年6月6日的日期和時(shí)間數(shù)據(jù),最小時(shí)間單位為分鐘?

?
?
timestamp?時(shí)間戳,一個(gè)數(shù)據(jù)庫寬度的唯一數(shù)字?
uniqueidentifier?全球唯一標(biāo)識(shí)符GUID?

?
?
char?定長非Unicode的字符型數(shù)據(jù),最大長度為8000?
varchar?變長非Unicode的字符型數(shù)據(jù),最大長度為8000?
text?變長非Unicode的字符型數(shù)據(jù),最大長度為2^31-1(2G)?

?
?
nchar?定長Unicode的字符型數(shù)據(jù),最大長度為8000?
nvarchar?變長Unicode的字符型數(shù)據(jù),最大長度為8000?
ntext?變長Unicode的字符型數(shù)據(jù),最大長度為2^31-1(2G)?

?
?
binary?定長二進(jìn)制數(shù)據(jù),最大長度為8000?
varbinary?變長二進(jìn)制數(shù)據(jù),最大長度為8000?
image?變長二進(jìn)制數(shù)據(jù),最大長度為2^31-1(2G)?


--語?句              功?能
--
數(shù)據(jù)操作
SELECT   --從數(shù)據(jù)庫表中檢索數(shù)據(jù)行和列
INSERT   --向數(shù)據(jù)庫表添加新數(shù)據(jù)行
DELETE   --從數(shù)據(jù)庫表中刪除數(shù)據(jù)行
UPDATE   --更新數(shù)據(jù)庫表中的數(shù)據(jù)?
--
數(shù)據(jù)定義?
CREATE?TABLE  --創(chuàng)建一個(gè)數(shù)據(jù)庫表
DROP?TABLE  ?--從數(shù)據(jù)庫中刪除表?
ALTER?TABLE  ?--修改數(shù)據(jù)庫表結(jié)構(gòu)
CREATE?VIEW  ?--創(chuàng)建一個(gè)視圖?
DROP?VIEW  ?--從數(shù)據(jù)庫中刪除視圖
CREATE?INDEX  --為數(shù)據(jù)庫表創(chuàng)建一個(gè)索引
DROP?INDEX  ?--從數(shù)據(jù)庫中刪除索引?
CREATE?PROCEDURE ?--創(chuàng)建一個(gè)存儲(chǔ)過程?
DROP?PROCEDURE  --從數(shù)據(jù)庫中刪除存儲(chǔ)過程
CREATE?TRIGGER  --創(chuàng)建一個(gè)觸發(fā)器?
DROP?TRIGGER  --從數(shù)據(jù)庫中刪除觸發(fā)器
CREATE?SCHEMA  --向數(shù)據(jù)庫添加一個(gè)新模式
DROP?SCHEMA  ?--從數(shù)據(jù)庫中刪除一個(gè)模式
CREATE?DOMAIN  --創(chuàng)建一個(gè)數(shù)據(jù)值域
ALTER?DOMAIN  --改變域定義
DROP?DOMAIN  ?--從數(shù)據(jù)庫中刪除一個(gè)域
--
數(shù)據(jù)控制?
GRANT   --授予用戶訪問權(quán)限
DENY   --拒絕用戶訪問?
REVOKE   --解除用戶訪問權(quán)限
--
事務(wù)控制
COMMIT   --結(jié)束當(dāng)前事務(wù)
ROLLBACK  ?--中止當(dāng)前事務(wù)?
SET?TRANSACTION  --定義當(dāng)前事務(wù)數(shù)據(jù)訪問特征
--
程序化SQL?
DECLARE   --為查詢設(shè)定游標(biāo)?
EXPLAN   --為查詢描述數(shù)據(jù)訪問計(jì)劃
OPEN   --檢索查詢結(jié)果打開一個(gè)游標(biāo)
FETCH   --檢索一行查詢結(jié)果?
CLOSE   --關(guān)閉游標(biāo)
PREPARE   --為動(dòng)態(tài)執(zhí)行準(zhǔn)備SQL?語句?
EXECUTE   --動(dòng)態(tài)地執(zhí)行SQL?語句
DESCRIBE  ?--描述準(zhǔn)備好的查詢?
--
-局部變量
declare?@id?char(10)?
--set?@id?=?’10010001’?
select?@id?=?’10010001

---全局變量?
--
-必須以@@開頭


MSSQL常用匯總
?

下列語句部分是Mssql語句,不可以在access中使用。

SQL分類:?
DDL—數(shù)據(jù)定義語言(
CREATEALTERDROPDECLARE)?
DML—數(shù)據(jù)操縱語言(
SELECTDELETEUPDATEINSERT)?
DCL—數(shù)據(jù)控制語言(
GRANTREVOKECOMMITROLLBACK)

首先,簡要介紹基礎(chǔ)語句:
1、說明:創(chuàng)建數(shù)據(jù)庫
CREATE?DATABASE?database-name?
2、說明:刪除數(shù)據(jù)庫
drop?database?dbname
3、說明:備份sql?server
---?創(chuàng)建?備份數(shù)據(jù)的?device
USE?master
EXEC?sp_addumpdevice?'disk',?'testBack',?'c:mssql7backupMyNwind_1.dat'
---?開始?備份
BACKUP?DATABASE?pubs?TO?testBack?
4、說明:創(chuàng)建新表
create?table?tabname(col1?type1?[not?null]?[primary?key],col2?type2?[not?null],..)
根據(jù)已有的表創(chuàng)建新表:?
A:
create?table?tab_new?like?tab_old?(使用舊表創(chuàng)建新表)
B:
create?table?tab_new?as?select?col1,col2…?from?tab_old?definition?only
5、說明:刪除新表drop?table?tabname?
6、說明:增加一個(gè)列
Alter?table?tabname?add?column?col?type
注:列增加后將不能刪除。DB2中列加上后數(shù)據(jù)類型也不能改變,唯一能改變的是增加varchar類型的長度。
7、說明:添加主鍵:?Alter?table?tabname?add?primary?key(col)?
說明:刪除主鍵:?
Alter?table?tabname?drop?primary?key(col)?
8、說明:創(chuàng)建索引:create?[unique]?index?idxname?on?tabname(col….)?
刪除索引:
drop?index?idxname
注:索引是不可更改的,想更改必須刪除重新建。
9、說明:創(chuàng)建視圖:create?view?viewname?as?select?statement?
刪除視圖:
drop?view?viewname
10、說明:幾個(gè)簡單的基本的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]
總數(shù):
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
最小:
select?min(field1)?as?minvalue?from?table1
11、說明:幾個(gè)高級(jí)查詢運(yùn)算詞
A:?
UNION?運(yùn)算符?
UNION?運(yùn)算符通過組合其他兩個(gè)結(jié)果表(例如?TABLE1?和?TABLE2)并消去表中任何重復(fù)行而派生出一個(gè)結(jié)果表。當(dāng)?ALL?隨?UNION?一起使用時(shí)(即?UNION?ALL),不消除重復(fù)行。兩種情況下,派生表的每一行不是來自?TABLE1?就是來自?TABLE2。?
B:?
EXCEPT?運(yùn)算符?
EXCEPT?運(yùn)算符通過包括所有在?TABLE1?中但不在?TABLE2?中的行并消除所有重復(fù)行而派生出一個(gè)結(jié)果表。當(dāng)?ALL?隨?EXCEPT?一起使用時(shí)?(EXCEPT?ALL),不消除重復(fù)行。?
C:?
INTERSECT?運(yùn)算符
INTERSECT?運(yùn)算符通過只包括?TABLE1?和?TABLE2?中都有的行并消除所有重復(fù)行而派生出一個(gè)結(jié)果表。當(dāng)?ALL?隨?INTERSECT?一起使用時(shí)?(INTERSECT?ALL),不消除重復(fù)行。?
注:使用運(yùn)算詞的幾個(gè)查詢結(jié)果行必須是一致的。?
12、說明:使用外連接?
A、
left?outer?join:?
左外連接(左連接):結(jié)果集幾包括連接表的匹配行,也包括左連接表的所有行。?
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:?
右外連接(右連接):結(jié)果集既包括連接表的匹配連接行,也包括右連接表的所有行。?
C:
full?outer?join:?
全外連接:不僅包括符號(hào)連接表的匹配行,還包括兩個(gè)連接表中的所有記錄。

其次,大家來看一些不錯(cuò)的sql語句
1、說明:復(fù)制表(只復(fù)制結(jié)構(gòu),源表名:a?新表名:b)?(Access可用)
法一:
select?*?into?b?from?a?where?1<>1
法二:
select?top?0?*?into?b?from?a

2、說明:拷貝表(拷貝數(shù)據(jù),源表名:a?目標(biāo)表名:b)?(Access可用)
insert?into?b(a,?b,?c)?select?d,e,f?from?b;

3、說明:跨數(shù)據(jù)庫之間表的拷貝(具體數(shù)據(jù)使用絕對(duì)路徑)?(Access可用)
insert?into?b(a,?b,?c)?select?d,e,f?from?b?in?‘具體數(shù)據(jù)庫’?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、說明:顯示文章、提交人和最后回復(fù)時(shí)間
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限制查詢數(shù)據(jù)范圍時(shí)包括了邊界值,not?between不包括
select?*?from?table1?where?time?between?time1?and?time2
select?a,b,c,?from?table1?where?a?not?between?數(shù)值1?and?數(shù)值2

9、說明:in?的使用方法
select?*?from?table1?where?a?[not]?in?(‘值1’,’值2’,’值4’,’值6’)

10、說明:兩張關(guān)聯(lián)表,刪除主表中已經(jīng)在副表中沒有的信息?
delete?from?table1?where?not?exists?(?select?*?from?table2?where?table1.field1=table2.field1?)

11、說明:四表聯(lián)查問題:
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開始時(shí)間,getdate())>5

13、說明:一條sql?語句搞定數(shù)據(jù)庫分頁
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值相同的數(shù)據(jù)中對(duì)應(yīng)的a最大的記錄的所有信息(類似這樣的用法可以用于論壇每月排行榜,每月熱銷產(chǎn)品分析,按科目成績排名,等等.)
select?a,b,c?from?tablename?ta?where?a=(select?max(a)?from?tablename?tb?where?tb.b=ta.b)

16、說明:包括所有在?TableA?中但不在?TableB和TableC?中的行并消除所有重復(fù)行而派生出一個(gè)結(jié)果表
(
select?a?from?tableA?)?except?(select?a?from?tableB)?except?(select?a?from?tableC)

17、說明:隨機(jī)取出10條數(shù)據(jù)
select?top?10?*?from?tablename?order?by?newid()

18、說明:隨機(jī)選擇記錄
select?newid()

19、說明:刪除重復(fù)記錄
Delete?from?tablename?where?id?not?in?(select?max(id)?from?tablename?group?by?col1,col2,...)

20、說明:列出數(shù)據(jù)庫里所有的表名
select?name?from?sysobjects?where?type='U'?

21、說明:列出表里的所有的
select?name?from?syscolumns?where?id=object_id('TableName')

22、說明:列示type、vender、pcs字段,以type字段排列,case可以方便地實(shí)現(xiàn)多重選擇,類似select?中的case。
select?type,sum(case?vender

?

?

代碼 --使用Sql語句從數(shù)據(jù)庫讀出數(shù)據(jù)字典
SELECT??表名=case?when?a.colorder=1?then?d.name?else?''?end,?
???????字段序號(hào)
=a.colorder,?字段名=a.name,?標(biāo)識(shí)=case?when?COLUMNPROPERTY(?a.id,a.name,'IsIdentity')=1?then?''else?''?end,?
????????主鍵
=case?when?exists(SELECT?1?FROM?sysobjects?where?xtype='PK'?and?name?in?
?????????????????????????????(??
SELECT?name?FROM?sysindexes?WHERE?indid?in
?????????????????????????????(???
SELECT?indid?FROM?sysindexkeys?WHERE?id?=?a.id?AND?colid=a.colid??)))?then?''?else?''?end,?
??????????????????????????????類型
=b.name,?占用字節(jié)數(shù)=a.length,?長度=COLUMNPROPERTY(a.id,a.name,'PRECISION'),?
?????????????????小數(shù)位數(shù)
=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),?允許空=case?when?a.isnullable=1?then?''else?''?end,?
??????????????????默認(rèn)值
=isnull(e.text,''),?字段說明=isnull(g.[value],'')
?
FROM?syscolumns?a?left?join?systypes?b?on?a.xtype=b.xusertype?inner?join?sysobjects?d?on?a.id=d.id??
?
and?d.xtype='U'?and??d.name<>'dtproperties'?left?join?syscomments?e?on?a.cdefault=e.id?
?
left?join?sysproperties?g?on?a.id=g.id?and?a.colid=g.smallid??order?by?a.id,a.colorder

?

?

posted on 2009-12-19 12:12 DotNet編程 閱讀(...) 評(píng)論(...) 編輯 收藏

轉(zhuǎn)載于:https://www.cnblogs.com/furenjun/archive/2009/12/19/sql.html

總結(jié)

以上是生活随笔為你收集整理的[转]SQL语句大全的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。