欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
經(jīng)典SQL查詢(xún)語(yǔ)句大全

一、基礎
1、說(shuō)明:創(chuàng )建數據庫
CREATE DATABASE database-name
2、說(shuō)明:刪除數據庫
drop database dbname
3、說(shuō)明:備份sql server
--- 創(chuàng )建 備份數據的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 開(kāi)始 備份
BACKUP DATABASE pubs TO testBack
4、說(shuō)明:創(chuàng )建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根據已有的表創(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、說(shuō)明:刪除新表
drop table tabname
6、說(shuō)明:增加一個(gè)列
Alter table tabname add column col type
注:列增加后將不能刪除。DB2中列加上后數據類(lèi)型也不能改變,唯一能改變的是增加varchar類(lèi)型的長(cháng)度。
7、說(shuō)明:添加主鍵: Alter table tabname add primary key(col)
說(shuō)明:刪除主鍵: Alter table tabname drop primary key(col)
8、說(shuō)明:創(chuàng )建索引:create [unique] index idxname on tabname(col….)
刪除索引:drop index idxname
注:索引是不可更改的,想更改必須刪除重新建。
9、說(shuō)明:創(chuàng )建視圖:create view viewname as select statement
刪除視圖:drop view viewname
10、說(shuō)明:幾個(gè)簡(jiǎn)單的基本的sql語(yǔ)句
選擇: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的語(yǔ)法很精妙,查資料!
排序: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
最?。簊elect min(field1) as minvalue from table1
11、說(shuō)明:幾個(gè)高級查詢(xún)運算詞
A: UNION 運算符
UNION 運算符通過(guò)組合其他兩個(gè)結果表(例如 TABLE1 和 TABLE2)并消去表中任何重復行而派生出一個(gè)結果表。當 ALL 隨 UNION 一起使用時(shí)(即 UNION ALL),不消除重復行。兩種情況下,派生表的每一行不是來(lái)自 TABLE1 就是來(lái)自 TABLE2。
B: EXCEPT 運算符
EXCEPT 運算符通過(guò)包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重復行而派生出一個(gè)結果表。當 ALL 隨 EXCEPT 一起使用時(shí) (EXCEPT ALL),不消除重復行。
C: INTERSECT 運算符
INTERSECT 運算符通過(guò)只包括 TABLE1 和 TABLE2 中都有的行并消除所有重復行而派生出一個(gè)結果表。當 ALL 隨 INTERSECT 一起使用時(shí) (INTERSECT ALL),不消除重復行。
注:使用運算詞的幾個(gè)查詢(xún)結果行必須是一致的。
12、說(shuō)明:使用外連接
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/cross (outer) join:
全外連接:不僅包括符號連接表的匹配行,還包括兩個(gè)連接表中的所有記錄。
12、分組:Group by:
 

 一張表,一旦分組完成后,查詢(xún)后只能得到組相關(guān)的信息。
 組相關(guān)的信息:(統計信息) count,sum,max,min,avg 分組的標準)
   在SQLServer中分組時(shí):不能以text,ntext,image類(lèi)型的字段作為分組依據
 在selecte統計函數中的字段,不能和普通的字段放在一起;
13、對數據庫進(jìn)行操作:
 分離數據庫: sp_detach_db; 附加數據庫:sp_attach_db 后接表明,附加需要完整的路徑名
14.如何修改數據庫的名稱(chēng):
sp_renamedb 'old_name', 'new_name'

二、提升
1、說(shuō)明:復制表(只復制結構,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1(僅用于SQlServer)
法二:select top 0 * into b from a
2、說(shuō)明:拷貝表(拷貝數據,源表名:a 目標表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、說(shuō)明:跨數據庫之間表的拷貝(具體數據使用絕對路徑) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具體數據庫’ where 條件
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
4、說(shuō)明:子查詢(xún)(表名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、說(shuō)明:顯示文章、提交人和最后回復時(shí)間
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、說(shuō)明:外連接查詢(xún)(表名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、說(shuō)明:在線(xiàn)視圖查詢(xún)(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、說(shuō)明:between的用法,between限制查詢(xún)數據范圍時(shí)包括了邊界值,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、說(shuō)明:in 的使用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
10、說(shuō)明:兩張關(guān)聯(lián)表,刪除主表中已經(jīng)在副表中沒(méi)有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、說(shuō)明:四表聯(lián)查問(wè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、說(shuō)明:日程安排提前五分鐘提醒
SQL: select * from 日程安排 where datediff('minute',f開(kāi)始時(shí)間,getdate())>5
13、說(shuō)明:一條sql 語(yǔ)句搞定數據庫分頁(yè)
select top 10 b.* from (select top 20 主鍵字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主鍵字段 = a.主鍵字段 order by a.排序字段
具體實(shí)現:
關(guān)于數據庫分頁(yè):
 declare @start int,@end int
 @sql nvarchar(600)
 set @sql=’select top’+str(@end-@start+1)+’+from T where rid not in(select top’+str(@str-1)+’Rid from T where Rid>-1)’
 exec sp_executesql @sql

注意:在top后不能直接跟一個(gè)變量,所以在實(shí)際應用中只有這樣的進(jìn)行特殊的處理。Rid為一個(gè)標識列,如果top后還有具體的字段,這樣做是非常有好處的。因為這樣可以避免 top的字段如果是邏輯索引的,查詢(xún)的結果后實(shí)際表中的不一致(邏輯索引中的數據有可能和數據表中的不一致,而查詢(xún)時(shí)如果處在索引則首先查詢(xún)索引)
14、說(shuō)明:前10條記錄
select top 10 * form table1 where 范圍
15、說(shuō)明:選擇在每一組b值相同的數據中對應的a最大的記錄的所有信息(類(lèi)似這樣的用法可以用于論壇每月排行榜,每月熱銷(xiāo)產(chǎn)品分析,按科目成績(jì)排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、說(shuō)明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重復行而派生出一個(gè)結果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
17、說(shuō)明:隨機取出10條數據
select top 10 * from tablename order by newid()
18、說(shuō)明:隨機選擇記錄
select newid()
19、說(shuō)明:刪除重復記錄
1),delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
2),select distinct * into temp from tablename
 delete from tablename
 insert into tablename select * from temp
評價(jià): 這種操作牽連大量的數據的移動(dòng),這種做法不適合大容量但數據操作
3),例如:在一個(gè)外部表中導入數據,由于某些原因第一次只導入了一部分,但很難判斷具體位置,這樣只有在下一次全部導入,這樣也就產(chǎn)生好多重復的字段,怎樣刪除重復字段
alter table tablename
--添加一個(gè)自增列
add column_b int identity(1,1)
 delete from tablename where column_b not in(
select max(column_b) from tablename group by column1,column2,...)
alter table tablename drop column column_b
20、說(shuō)明:列出數據庫里所有的表名
select name from sysobjects where type='U' // U代表用戶(hù)
21、說(shuō)明:列出表里的所有的列名
select name from syscolumns where id=object_id('TableName')
22、說(shuō)明:列示type、vender、pcs字段,以type字段排列,case可以方便地實(shí)現多重選擇,類(lèi)似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
光盤(pán) B 2
光盤(pán) A 2
手機 B 3
手機 C 3
23、說(shuō)明:初始化表table1
TRUNCATE TABLE table1
24、說(shuō)明:選擇從10到15的記錄
select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc
三、技巧
1、1=1,1=2的使用,在SQL語(yǔ)句組合時(shí)用的較多
“where 1=1” 是表示選擇全部   “where 1=2”全部不選,
如:
if @strWhere !=''
begin
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere
end
else
begin
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
end
我們可以直接寫(xiě)成
錯誤!未找到目錄項。
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere 2、收縮數據庫
--重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
--收縮數據和日志
DBCC SHRINKDB
DBCC SHRINKFILE
3、壓縮數據庫
dbcc shrinkdatabase(dbname)
4、轉移數據庫給新用戶(hù)以已存在用戶(hù)權限
exec sp_change_users_login 'update_one','newname','oldname'
go
5、檢查備份集
RESTORE VERIFYONLY from disk='E:\dvbbs.bak'
6、修復數據庫
ALTER DATABASE [dvbbs] SET SINGLE_USER
GO
DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
GO
ALTER DATABASE [dvbbs] SET MULTI_USER
GO
7、日志清除
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
 @MaxMinutes INT,
 @NewSize INT

USE tablename -- 要操作的數據庫名
SELECT @LogicalFileName = 'tablename_log', -- 日志文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
 @NewSize = 1 -- 你想設定的日志文件的大小(M)
Setup / initialize
DECLARE @OriginalSize int
SELECT @OriginalSize = size
 FROM sysfiles
 WHERE name = @LogicalFileName
SELECT 'Original Size of ' + db_name() + ' LOG is ' +
 CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
 CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
 FROM sysfiles
 WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
 (DummyColumn char (8000) not null)

DECLARE @Counter   INT,
 @StartTime DATETIME,
 @TruncLog  VARCHAR(255)
SELECT @StartTime = GETDATE(),
 @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'
DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
 AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName) 
 AND (@OriginalSize * 8 /1024) > @NewSize 
 BEGIN -- Outer loop.
SELECT @Counter = 0
 WHILE  ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
 BEGIN -- update
 INSERT DummyTrans VALUES ('Fill Log') DELETE DummyTrans
 SELECT @Counter = @Counter + 1
 END
 EXEC (@TruncLog) 
 END
SELECT 'Final Size of ' + db_name() + ' LOG is ' +
 CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
 CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
 FROM sysfiles
 WHERE name = @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF
8、說(shuō)明:更改某個(gè)表
exec sp_changeobjectowner 'tablename','dbo'
9、存儲更改全部表
CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch
@OldOwner as NVARCHAR(128),
@NewOwner as NVARCHAR(128)
AS
DECLARE @Name   as NVARCHAR(128)
DECLARE @Owner  as NVARCHAR(128)
DECLARE @OwnerName  as NVARCHAR(128)
DECLARE curObject CURSOR FOR
select 'Name'   = name,
  'Owner'   = user_name(uid)
from sysobjects
where user_name(uid)=@OldOwner
order by name
OPEN  curObject
FETCH NEXT FROM curObject INTO @Name, @Owner
WHILE(@@FETCH_STATUS=0)
BEGIN    
if @Owner=@OldOwner
begin
  set @OwnerName = @OldOwner + '.' + rtrim(@Name)
  exec sp_changeobjectowner @OwnerName, @NewOwner
end
-- select @name,@NewOwner,@OldOwner
FETCH NEXT FROM curObject INTO @Name, @Owner
END
close curObject
deallocate curObject
GO

10、SQL SERVER中直接循環(huán)寫(xiě)入數據
declare @i int
set @i=1
while @i<30
begin
   insert into test (userid) values(@i)
   set @i=@i+1
end
案例:
有如下表,要求就裱中所有沒(méi)有及格的成績(jì),在每次增長(cháng)0.1的基礎上,使他們剛好及格:
 Name    score
 Zhangshan 80
 Lishi      59
 Wangwu     50
 Songquan 69
while((select min(score) from tb_table)<60)
begin
update tb_table set score =score*1.01
where score<60
if (select min(score) from tb_table)>60
 break
 else
   continue
end

數據開(kāi)發(fā)-經(jīng)典

1.按姓氏筆畫(huà)排序:
Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as //從少到多
2.數據庫加密:
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.查看硬盤(pán)分區:
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.記錄搜索:
開(kāi)頭到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到結尾記錄
Select Top N * From 表 Order by ID Desc
案例
例如1:一張表有一萬(wàn)多條記錄,表的第一個(gè)字段 RecID 是自增長(cháng)字段, 寫(xiě)一個(gè)SQL語(yǔ)句,找出表的第31到第40個(gè)記錄。
 select top 10 recid from A where recid not in(select top 30 recid from A)
分析:如果這樣寫(xiě)會(huì )產(chǎn)生某些問(wèn)題,如果recid在表中存在邏輯索引。
 select top 10 recid from A where……是從索引中查找,而后面的select top 30 recid from A則在數據表中查找,這樣由于索引中的順序有可能和數據表中的不一致,這樣就導致查詢(xún)到的不是本來(lái)的欲得到的數據。
解決方案
1, 用order by select top 30 recid from A order by ricid 如果該字段不是自增長(cháng),就會(huì )出現問(wèn)題
2, 在那個(gè)子查詢(xún)中也加條件:select top 30 recid from A where recid>-1
例2:查詢(xún)表中的最后以條記錄,并不知道這個(gè)表共有多少數據,以及表結構。
set @s = 'select top 1 * from T  where pid not in (select top ' + str(@count-1) + ' pid from T)'
print @s     exec sp_executesql @s
9:獲取當前數據庫中的所有用戶(hù)表
select Name from sysobjects where xtype='u' and status>=0
10:獲取某一個(gè)表的所有字段
select name from syscolumns where id=object_id('表名')
select name from syscolumns where id in (select id from sysobjects where type = 'u' and name = '表名')
兩種方式的效果相同
11:查看與某一個(gè)表相關(guān)的視圖、存儲過(guò)程、函數
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'
12:查看當前數據庫中所有存儲過(guò)程
select name as 存儲過(guò)程名稱(chēng) from sysobjects where xtype='P'
13:查詢(xún)用戶(hù)創(chuàng )建的所有數據庫
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:查詢(xún)某一個(gè)表的字段和數據類(lèi)型
select column_name,data_type from information_schema.columns
where table_name = '表名'
15:不同服務(wù)器數據庫之間的數據操作
--創(chuàng )建鏈接服務(wù)器
exec sp_addlinkedserver  'ITSV ', ' ', 'SQLOLEDB ', '遠程服務(wù)器名或ip地址 '
exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用戶(hù)名 ', '密碼 '
--查詢(xún)示例
select * from ITSV.數據庫名.dbo.表名
--導入示例
select * into 表 from ITSV.數據庫名.dbo.表名
--以后不再使用時(shí)刪除鏈接服務(wù)器
exec sp_dropserver 'ITSV ', 'droplogins '

--連接遠程/局域網(wǎng)數據(openrowset/openquery/opendatasource)
--1、openrowset
--查詢(xún)示例
select * from openrowset( 'SQLOLEDB ', 'sql服務(wù)器名 '; '用戶(hù)名 '; '密碼 ',數據庫名.dbo.表名)
--生成本地表
select * into 表 from openrowset( 'SQLOLEDB ', 'sql服務(wù)器名 '; '用戶(hù)名 '; '密碼 ',數據庫名.dbo.表名)

--把本地表導入遠程表
insert openrowset( 'SQLOLEDB ', 'sql服務(wù)器名 '; '用戶(hù)名 '; '密碼 ',數據庫名.dbo.表名)
select *from 本地表
--更新本地表
update b
set b.列A=a.列A
 from openrowset( 'SQLOLEDB ', 'sql服務(wù)器名 '; '用戶(hù)名 '; '密碼 ',數據庫名.dbo.表名)as a inner join 本地表 b
on a.column1=b.column1
--openquery用法需要創(chuàng )建一個(gè)連接
--首先創(chuàng )建一個(gè)連接創(chuàng )建鏈接服務(wù)器
exec sp_addlinkedserver  'ITSV ', ' ', 'SQLOLEDB ', '遠程服務(wù)器名或ip地址 '
--查詢(xún)
select *
FROM openquery(ITSV, 'SELECT * FROM 數據庫.dbo.表名 ')
--把本地表導入遠程表
insert openquery(ITSV, 'SELECT * FROM 數據庫.dbo.表名 ')
select * from 本地表
--更新本地表
update b
set b.列B=a.列B
FROM openquery(ITSV, 'SELECT * FROM 數據庫.dbo.表名 ') as a 
inner join 本地表 b on a.列A=b.列A

--3、opendatasource/openrowset
SELECT  *
FROM  opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陸名;Password=密碼 ' ).test.dbo.roy_ta
--把本地表導入遠程表
insert opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陸名;Password=密碼 ').數據庫.dbo.表名
select * from 本地表 

 

 

 

 

 

SQL Server基本函數
SQL Server基本函數
1.字符串函數 長(cháng)度與分析用
1,datalength(Char_expr) 返回字符串包含字符數,但不包含后面的空格
2,substring(expression,start,length) 取子串,字符串的下標是從“1”,start為起始位置,length為字符串長(cháng)度,實(shí)際應用中以len(expression)取得其長(cháng)度
3,right(char_expr,int_expr) 返回字符串右邊第int_expr個(gè)字符,還用left于之相反
4,isnull( check_expression , replacement_value )如果check_expression為空,則返回replacement_value的值,不為空,就返回check_expression字符操作類(lèi)
5,Sp_addtype 自定義數據類(lèi)型
例如:EXEC sp_addtype birthday, datetime, 'NULL'
6,set nocount {on|off}
使返回的結果中不包含有關(guān)受 Transact-SQL 語(yǔ)句影響的行數的信息。如果存儲過(guò)程中包含的一些語(yǔ)句并不返回許多實(shí)際的數據,則該設置由于大量減少了網(wǎng)絡(luò )流量,因此可顯著(zhù)提高性能。SET NOCOUNT 設置是在執行或運行時(shí)設置,而不是在分析時(shí)設置。
SET NOCOUNT 為 ON 時(shí),不返回計數(表示受 Transact-SQL 語(yǔ)句影響的行數)。
SET NOCOUNT 為 OFF 時(shí),返回計數

 

 

 

常識

在SQL查詢(xún)中:from后最多可以跟多少張表或視圖:256
在SQL語(yǔ)句中出現 Order by,查詢(xún)時(shí),先排序,后取
在SQL中,一個(gè)字段的最大容量是8000,而對于nvarchar(4000),由于nvarchar是Unicode碼。 
 
SQLServer2000同步復制技術(shù)實(shí)現步驟
一、 預備工作
1.發(fā)布服務(wù)器,訂閱服務(wù)器都創(chuàng )建一個(gè)同名的windows用戶(hù),并設置相同的密碼,做為發(fā)布快照文件夾的有效訪(fǎng)問(wèn)用戶(hù)
--管理工具
--計算機管理
--用戶(hù)和組
--右鍵用戶(hù)
--新建用戶(hù)
--建立一個(gè)隸屬于administrator組的登陸windows的用戶(hù)(SynUser)
2.在發(fā)布服務(wù)器上,新建一個(gè)共享目錄,做為發(fā)布的快照文件的存放目錄,操作:
我的電腦--D:\ 新建一個(gè)目錄,名為: PUB
--右鍵這個(gè)新建的目錄
--屬性--共享
--選擇"共享該文件夾"
--通過(guò)"權限"按紐來(lái)設置具體的用戶(hù)權限,保證第一步中創(chuàng )建的用戶(hù)(SynUser) 具有對該文件夾的所有權限

--確定
3.設置SQL代理(SQLSERVERAGENT)服務(wù)的啟動(dòng)用戶(hù)(發(fā)布/訂閱服務(wù)器均做此設置)
開(kāi)始--程序--管理工具--服務(wù)
--右鍵SQLSERVERAGENT
--屬性--登陸--選擇"此賬戶(hù)"
--輸入或者選擇第一步中創(chuàng )建的windows登錄用戶(hù)名(SynUser)
--"密碼"中輸入該用戶(hù)的密碼
4.設置SQL Server身份驗證模式,解決連接時(shí)的權限問(wèn)題(發(fā)布/訂閱服務(wù)器均做此設置)
企業(yè)管理器
--右鍵SQL實(shí)例--屬性
--安全性--身份驗證
--選擇"SQL Server 和 Windows"
--確定
5.在發(fā)布服務(wù)器和訂閱服務(wù)器上互相注冊
企業(yè)管理器
--右鍵SQL Server組
--新建SQL Server注冊...
--下一步--可用的服務(wù)器中,輸入你要注冊的遠程服務(wù)器名 --添加
--下一步--連接使用,選擇第二個(gè)"SQL Server身份驗證"
--下一步--輸入用戶(hù)名和密碼(SynUser)
--下一步--選擇SQL Server組,也可以創(chuàng )建一個(gè)新組
--下一步--完成
6.對于只能用IP,不能用計算機名的,為其注冊服務(wù)器別名(此步在實(shí)施中沒(méi)用到)
 (在連接端配置,比如,在訂閱服務(wù)器上配置的話(huà),服務(wù)器名稱(chēng)中輸入的是發(fā)布服務(wù)器的IP)
開(kāi)始--程序--Microsoft SQL Server--客戶(hù)端網(wǎng)絡(luò )實(shí)用工具
--別名--添加
--網(wǎng)絡(luò )庫選擇"tcp/ip"--服務(wù)器別名輸入SQL服務(wù)器名
--連接參數--服務(wù)器名稱(chēng)中輸入SQL服務(wù)器ip地址
--如果你修改了SQL的端口,取消選擇"動(dòng)態(tài)決定端口",并輸入對應的端口號
二、 正式配置
1、配置發(fā)布服務(wù)器
打開(kāi)企業(yè)管理器,在發(fā)布服務(wù)器(B、C、D)上執行以下步驟:
(1) 從[工具]下拉菜單的[復制]子菜單中選擇[配置發(fā)布、訂閱服務(wù)器和分發(fā)]出現配置發(fā)布和分發(fā)向導
(2) [下一步] 選擇分發(fā)服務(wù)器 可以選擇把發(fā)布服務(wù)器自己作為分發(fā)服務(wù)器或者其他sql的服務(wù)器(選擇自己)
(3) [下一步] 設置快照文件夾
采用默認\\servername\Pub
(4) [下一步] 自定義配置
可以選擇:是,讓我設置分發(fā)數據庫屬性啟用發(fā)布服務(wù)器或設置發(fā)布設置
否,使用下列默認設置(推薦)
(5) [下一步] 設置分發(fā)數據庫名稱(chēng)和位置 采用默認值
(6) [下一步] 啟用發(fā)布服務(wù)器 選擇作為發(fā)布的服務(wù)器
(7) [下一步] 選擇需要發(fā)布的數據庫和發(fā)布類(lèi)型
(8) [下一步] 選擇注冊訂閱服務(wù)器
(9) [下一步] 完成配置
2、創(chuàng )建出版物
發(fā)布服務(wù)器B、C、D上
(1)從[工具]菜單的[復制]子菜單中選擇[創(chuàng )建和管理發(fā)布]命令
(2)選擇要創(chuàng )建出版物的數據庫,然后單擊[創(chuàng )建發(fā)布]
(3)在[創(chuàng )建發(fā)布向導]的提示對話(huà)框中單擊[下一步]系統就會(huì )彈出一個(gè)對話(huà)框。對話(huà)框上的內容是復制的三個(gè)類(lèi)型。我們現在選第一個(gè)也就是默認的快照發(fā)布(其他兩個(gè)大家可以去看看幫助)
(4)單擊[下一步]系統要求指定可以訂閱該發(fā)布的數據庫服務(wù)器類(lèi)型,
SQLSERVER允許在不同的數據庫如 orACLE或ACCESS之間進(jìn)行數據復制。
但是在這里我們選擇運行"SQL SERVER 2000"的數據庫服務(wù)器
(5)單擊[下一步]系統就彈出一個(gè)定義文章的對話(huà)框也就是選擇要出版的表
注意: 如果前面選擇了事務(wù)發(fā)布 則再這一步中只能選擇帶有主鍵的表
(6)選擇發(fā)布名稱(chēng)和描述
(7)自定義發(fā)布屬性 向導提供的選擇:
是 我將自定義數據篩選,啟用匿名訂閱和或其他自定義屬性
否 根據指定方式創(chuàng )建發(fā)布 (建議采用自定義的方式)
(8)[下一步] 選擇篩選發(fā)布的方式
(9)[下一步] 可以選擇是否允許匿名訂閱
1)如果選擇署名訂閱,則需要在發(fā)布服務(wù)器上添加訂閱服務(wù)器
方法: [工具]->[復制]->[配置發(fā)布、訂閱服務(wù)器和分發(fā)的屬性]->[訂閱服務(wù)器] 中添加
否則在訂閱服務(wù)器上請求訂閱時(shí)會(huì )出現的提示:改發(fā)布不允許匿名訂閱
如果仍然需要匿名訂閱則用以下解決辦法
[企業(yè)管理器]->[復制]->[發(fā)布內容]->[屬性]->[訂閱選項] 選擇允許匿名請求訂閱
2)如果選擇匿名訂閱,則配置訂閱服務(wù)器時(shí)不會(huì )出現以上提示
(10)[下一步] 設置快照 代理程序調度
(11)[下一步] 完成配置
當完成出版物的創(chuàng )建后創(chuàng )建出版物的數據庫也就變成了一個(gè)共享數據庫
有數據
srv1.庫名..author有字段:id,name,phone,
srv2.庫名..author有字段:id,name,telphone,adress

要求:
srv1.庫名..author增加記錄則srv1.庫名..author記錄增加
srv1.庫名..author的phone字段更新,則srv1.庫名..author對應字段telphone更新
--*/

--大致的處理步驟
--1.在 srv1 上創(chuàng )建連接服務(wù)器,以便在 srv1 中操作 srv2,實(shí)現同步
exec sp_addlinkedserver 'srv2','','SQLOLEDB','srv2的sql實(shí)例名或ip'
exec sp_addlinkedsrvlogin 'srv2','false',null,'用戶(hù)名','密碼'
go
--2.在 srv1 和 srv2 這兩臺電腦中,啟動(dòng) msdtc(分布式事務(wù)處理服務(wù)),并且設置為自動(dòng)啟動(dòng)
。我的電腦--控制面板--管理工具--服務(wù)--右鍵 Distributed Transaction Coordinator--屬性--啟動(dòng)--并將啟動(dòng)類(lèi)型設置為自動(dòng)啟動(dòng)
go


--然后創(chuàng )建一個(gè)作業(yè)定時(shí)調用上面的同步處理存儲過(guò)程就行了

企業(yè)管理器
--管理
--SQL Server代理
--右鍵作業(yè)
--新建作業(yè)
--"常規"項中輸入作業(yè)名稱(chēng)
--"步驟"項
--新建
--"步驟名"中輸入步驟名
--"類(lèi)型"中選擇"Transact-SQL 腳本(TSQL)"
--"數據庫"選擇執行命令的數據庫
--"命令"中輸入要執行的語(yǔ)句: exec p_process
--確定
--"調度"項
--新建調度
--"名稱(chēng)"中輸入調度名稱(chēng)
--"調度類(lèi)型"中選擇你的作業(yè)執行安排
--如果選擇"反復出現"
--點(diǎn)"更改"來(lái)設置你的時(shí)間安排


然后將SQL Agent服務(wù)啟動(dòng),并設置為自動(dòng)啟動(dòng),否則你的作業(yè)不會(huì )被執行

設置方法:
我的電腦--控制面板--管理工具--服務(wù)--右鍵 SQLSERVERAGENT--屬性--啟動(dòng)類(lèi)型--選擇"自動(dòng)啟動(dòng)"--確定.


--3.實(shí)現同步處理的方法2,定時(shí)同步

--在srv1中創(chuàng )建如下的同步處理存儲過(guò)程
create proc p_process
as
--更新修改過(guò)的數據
update b set name=i.name,telphone=i.telphone
from srv2.庫名.dbo.author b,author i
where b.id=i.id and
(b.name <> i.name or b.telphone <> i.telphone)

--插入新增的數據
insert srv2.庫名.dbo.author(id,name,telphone)
select id,name,telphone from author i
where not exists(
select * from srv2.庫名.dbo.author where id=i.id)

--刪除已經(jīng)刪除的數據(如果需要的話(huà))
delete b
from srv2.庫名.dbo.author b
where not exists(
select * from author where id=b.id)
go


                   SQL查詢(xún)語(yǔ)句關(guān)鍵字方法
distinct關(guān)鍵字
顯示沒(méi)有重復記錄的商品名稱(chēng),商品價(jià)格和商品類(lèi)別列表。
select distinct ware_name,price from t_ware;

使用計算列
查詢(xún)所有商品價(jià)格提高20%后的價(jià)格。
select ware_id,ware_name,price*1.2 from t_ware;

列的別名
a) 不使用as
select ware_id,ware_name,price*1.2 as price_raise from t_ware;

b) 使用as
select ware_id,ware_name,price*1.2 price_raise from t_ware;


使用邏輯表達式
a) not
顯示商品價(jià)格不大于100的商品
select ware_id,ware_name,price,category_id from t_ware where not price>100;

b) and
顯示商品價(jià)格大于100且商品類(lèi)別編號為5的商品
select ware_id,ware_name,price,category_id from t_ware where not price>100;

c) or
顯示商品類(lèi)別編號為5或6或7的商品
select ware_id,ware_name,price,category_id from t_ware where category_id=5 or category_id=6 or category_id=7;

使用between關(guān)鍵字
顯示商品價(jià)格在200元至1000元之間的商品(留心一下,是半開(kāi)區間還是封閉區間?)
select ware_id,ware_name,price,category_id from t_ware where price between 200 and 1000;

使用in關(guān)鍵字
顯示商品類(lèi)別為5,6,7且價(jià)格不小于200元的商品
select ware_id,ware_name,price,category_id from t_ware where category_id in (5,6,7) and price>=200;

使用like子句進(jìn)行模糊查詢(xún)
a) %(百分號)表示0到n個(gè)任意字符
select ware_id,ware_name,price,category_id from t_ware where ware_name like '%純棉%';

b) _(下劃線(xiàn))表示單個(gè)的任意字符
select ware_id,ware_name,price,category_id from t_ware where ware_name like '%長(cháng)袖_恤%';


轉義字符escape的使用
select ware_id,ware_name,price,category_id from t_ware where ware_name like '%\%%' escape '\';


使用order by給數據排序
select * from t_ware_category where parent_id=0 order by seq;
select * from t_ware_category where parent_id=0 order by seq asc;
select * from t_ware_category where parent_id=0 order by seq desc;

rownum
a) 查詢(xún)前20條商品記錄
select ware_id,ware_name,price from t_ware where rownum<=20;

b) 查詢(xún)第11條至第20條記錄
select ware_id,ware_name,price from t_ware where rownum<=10 and ware_id not in (select ware_id from t_ware where rownum<=10);


常用統計函數
a) sum()返回一個(gè)數字列或計算列的總和
select sum(price) from t_ware;

b) avg()對一個(gè)數字列或計算列求平均值


c) min()返回一個(gè)數字列或一個(gè)數字表達式的最小值


d) max()返回一個(gè)數字列或一個(gè)數字表達式的最大值


e) count()返回滿(mǎn)面足select語(yǔ)句中指定的條件的記錄值


多表查詢(xún)和笛卡兒乘積
查詢(xún)商品編號,商品名稱(chēng),商品價(jià)格和商品類(lèi)別名稱(chēng)
select t_ware.ware_id,t_ware.ware_name,t_ware.price,t_ware_category.category_name from t_ware,t_ware_category where t_ware.category_id=t_ware_category.category_id;
使用join
a) 左連接
select t_ware.ware_id,t_ware.ware_name,t_ware.price,t_ware_category.category_name from t_ware left join t_ware_category on t_ware.category_id=t_ware_category.category_id;

select w.ware_id,w.ware_name,w.price,wc.category_name from t_ware w left join t_ware_category wc on w.category_id=wc.category_id;
b) 右連接
select t_ware.ware_id,t_ware.ware_name,t_ware.price,t_ware_category.category_name from t_ware left join t_ware_category on t_ware.category_id=t_ware_category.category_id;

使用union
select ware_id,ware_name from t_ware where ware_name like '%T恤%' union select ware_id,ware_name from t_ware where ware_name like '%手提包%'

使用group by
a) 統計每個(gè)二級類(lèi)別下有多少商品,以及商品總價(jià)值
select w.category_id,wc.category_name,count(w.ware_id),sum(w.price) from t_ware w left join t_ware_category wc on w.category_id=wc.category_id group by w.category_id,wc.category_name;

b) 統計每個(gè)一級類(lèi)別下有多少商品,以及商品總價(jià)值
select wc2.category_id,wc2.category_name,sum(w.price) from t_ware w left join t_ware_category wc on w.category_id=wc.category_id left join t_ware_category wc2 on wc.parent_id=wc2.category_id group by wc2.category_id,wc2.category_name;
使用having對結果進(jìn)行篩選
select w.category_id,wc.category_name,count(w.ware_id),sum(w.price) from t_ware w left join t_ware_category wc on w.category_id=wc.category_id group by w.category_id,wc.category_name having sum(w.price)>1000;

 

SQL查詢(xún)語(yǔ)句精華使用簡(jiǎn)要
一、 簡(jiǎn)單查詢(xún)
簡(jiǎn)單的Transact-SQL查詢(xún)只包括選擇列表、FROM子句和WHERE子句。它們分別說(shuō)明所查詢(xún)列、查詢(xún)的
表或視圖、以及搜索條件等。
例如,下面的語(yǔ)句查詢(xún)testtable表中姓名為“張三”的nickname字段和email字段。
SELECT nickname,email
FROM testtable
WHERE name='張三'

(一) 選擇列表
選擇列表(select_list)指出所查詢(xún)列,它可以是一組列名列表、星號、表達式、變量(包括局部變
量和全局變量)等構成。

1、選擇所有列
例如,下面語(yǔ)句顯示testtable表中所有列的數據:
SELECT *
FROM testtable

2、選擇部分列并指定它們的顯示次序
查詢(xún)結果集合中數據的排列順序與選擇列表中所指定的列名排列順序相同。
例如:
SELECT nickname,email
FROM testtable

3、更改列標題
在選擇列表中,可重新指定列標題。定義格式為:
列標題=列名
列名 列標題
如果指定的列標題不是標準的標識符格式時(shí),應使用引號定界符,例如,下列語(yǔ)句使用漢字顯示列
標題:
SELECT 昵稱(chēng)=nickname,電子郵件=email
FROM testtable

4、刪除重復行
SELECT語(yǔ)句中使用ALL或DISTINCT選項來(lái)顯示表中符合條件的所有行或刪除其中重復的數據行,默認為ALL。使用DISTINCT選項時(shí),對于所有重復的數據行在SELECT返回的結果集合中只保留一行。

5、限制返回的行數
使用TOP n [PERCENT]選項限制返回的數據行數,TOP n說(shuō)明返回n行,而TOP n PERCENT時(shí),說(shuō)明n是
表示一百分數,指定返回的行數等于總行數的百分之幾。
例如:
SELECT TOP 2 *
FROM testtable
SELECT TOP 20 PERCENT *
FROM testtable

(二)FROM子句
FROM子句指定SELECT語(yǔ)句查詢(xún)及與查詢(xún)相關(guān)的表或視圖。在FROM子句中最多可指定256個(gè)表或視圖,
它們之間用逗號分隔。
在FROM子句同時(shí)指定多個(gè)表或視圖時(shí),如果選擇列表中存在同名列,這時(shí)應使用對象名限定這些列
所屬的表或視圖。例如在usertable和citytable表中同時(shí)存在cityid列,在查詢(xún)兩個(gè)表中的cityid時(shí)應
使用下面語(yǔ)句格式加以限定:
SELECT username,citytable.cityid
FROM usertable,citytable
WHERE usertable.cityid=citytable.cityid
在FROM子句中可用以下兩種格式為表或視圖指定別名:
表名 as 別名
表名 別名

(二) FROM子句
FROM子句指定SELECT語(yǔ)句查詢(xún)及與查詢(xún)相關(guān)的表或視圖。在FROM子句中最多可指定256個(gè)表或視圖,
它們之間用逗號分隔。
在FROM子句同時(shí)指定多個(gè)表或視圖時(shí),如果選擇列表中存在同名列,這時(shí)應使用對象名限定這些列
所屬的表或視圖。例如在usertable和citytable表中同時(shí)存在cityid列,在查詢(xún)兩個(gè)表中的cityid時(shí)應
使用下面語(yǔ)句格式加以限定:
SELECT username,citytable.cityid
FROM usertable,citytable
WHERE usertable.cityid=citytable.cityid
在FROM子句中可用以下兩種格式為表或視圖指定別名:
表名 as 別名
表名 別名
例如上面語(yǔ)句可用表的別名格式表示為:
SELECT username,b.cityid
FROM usertable a, citytable b
WHERE a.cityid=b.cityid
SELECT不僅能從表或視圖中檢索數據,它還能夠從其它查詢(xún)語(yǔ)句所返回的結果集合中查詢(xún)數據。
例如:
SELECT a.au_fname+a.au_lname
FROM authors a,titleauthor ta
(SELECT title_id,title
FROM titles
WHERE ytd_sales>10000
) AS t
WHERE a.au_id=ta.au_id
AND ta.title_id=t.title_id
此例中,將SELECT返回的結果集合給予一別名t,然后再從中檢索數據。

(三) 使用WHERE子句設置查詢(xún)條件
WHERE子句設置查詢(xún)條件,過(guò)濾掉不需要的數據行。例如下面語(yǔ)句查詢(xún)年齡大于20的數據:
SELECT *
FROM usertable
WHERE age>20
WHERE子句可包括各種條件運算符:
比較運算符(大小比較):>、>=、=、<、<=、<>、!>、!<
范圍運算符(表達式值是否在指定的范圍):BETWEEN…AND…
NOT BETWEEN…AND…
列表運算符(判斷表達式是否為列表中的指定項):IN (項1,項2……)
NOT IN (項1,項2……)
模式匹配符(判斷值是否與指定的字符通配格式相符):LIKE、NOT LIKE
空值判斷符(判斷表達式是否為空):IS NULL、NOT IS NULL
邏輯運算符(用于多條件的邏輯連接):NOT、AND、OR
1、范圍運算符例:age BETWEEN 10 AND 30相當于age>=10 AND age<=30
2、列表運算符例:country IN ('Germany','China')
3、模式匹配符例:常用于模糊查找,它判斷列值是否與指定的字符串格式相匹配??捎糜赾har、
varchar、text、ntext、datetime和smalldatetime等類(lèi)型查詢(xún)。
可使用以下通配字符:
百分號%:可匹配任意類(lèi)型和長(cháng)度的字符,如果是中文,請使用兩個(gè)百分號即%%。
下劃線(xiàn)_:匹配單個(gè)任意字符,它常用來(lái)限制表達式的字符長(cháng)度。
方括號[]:指定一個(gè)字符、字符串或范圍,要求所匹配對象為它們中的任一個(gè)。
[^]:其取值也[] 相同,但它要求所匹配對象為指定字符以外的任一個(gè)字符。
例如:
限制以Publishing結尾,使用LIKE '%Publishing'
限制以A開(kāi)頭:LIKE '[A]%'
限制以A開(kāi)頭外:LIKE '[^A]%'
4、空值判斷符例WHERE age IS NULL
5、邏輯運算符:優(yōu)先級為NOT、AND、OR
(四)查詢(xún)結果排序
使用ORDER BY子句對查詢(xún)返回的結果按一列或多列排序。ORDER BY子句的語(yǔ)法格式為:
ORDER BY {column_name [ASC|DESC]} [,…n]
其中ASC表示升序,為默認值,DESC為降序。ORDER BY不能按ntext、text和image數據類(lèi)型進(jìn)行排
序。
例如:
SELECT *
FROM usertable
ORDER BY age desc,userid ASC
另外,可以根據表達式進(jìn)行排序。

二、 聯(lián)合查詢(xún)
UNION運算符可以將兩個(gè)或兩個(gè)以上上SELECT語(yǔ)句的查詢(xún)結果集合合并成一個(gè)結果集合顯示,即執行聯(lián)
合查詢(xún)。UNION的語(yǔ)法格式為:
select_statement
UNION [ALL] selectstatement
[UNION [ALL] selectstatement][…n]
其中selectstatement為待聯(lián)合的SELECT查詢(xún)語(yǔ)句。
ALL選項表示將所有行合并到結果集合中。不指定該項時(shí),被聯(lián)合查詢(xún)結果集合中的重復行將只保留一
行。
聯(lián)合查詢(xún)時(shí),查詢(xún)結果的列標題為第一個(gè)查詢(xún)語(yǔ)句的列標題。因此,要定義列標題必須在第一個(gè)查詢(xún)語(yǔ)
句中定義。要對聯(lián)合查詢(xún)結果排序時(shí),也必須使用第一查詢(xún)語(yǔ)句中的列名、列標題或者列序號。
在使用UNION 運算符時(shí),應保證每個(gè)聯(lián)合查詢(xún)語(yǔ)句的選擇列表中有相同數量的表達式,并且每個(gè)查詢(xún)選
擇表達式應具有相同的數據類(lèi)型,或是可以自動(dòng)將它們轉換為相同的數據類(lèi)型。在自動(dòng)轉換時(shí),對于數值類(lèi)型,系統將低精度的數據類(lèi)型轉換為高精度的數據類(lèi)型。
在包括多個(gè)查詢(xún)的UNION語(yǔ)句中,其執行順序是自左至右,使用括號可以改變這一執行順序。例如:
查詢(xún)1 UNION (查詢(xún)2 UNION 查詢(xún)3)

三、連接查詢(xún)
通過(guò)連接運算符可以實(shí)現多個(gè)表查詢(xún)。連接是關(guān)系數據庫模型的主要特點(diǎn),也是它區別于其它類(lèi)型
數據庫管理系統的一個(gè)標志。
在關(guān)系數據庫管理系統中,表建立時(shí)各數據之間的關(guān)系不必確定,常把一個(gè)實(shí)體的所有信息存放在
一個(gè)表中。當檢索數據時(shí),通過(guò)連接操作查詢(xún)出存放在多個(gè)表中的不同實(shí)體的信息。連接操作給用戶(hù)帶
來(lái)很大的靈活性,他們可以在任何時(shí)候增加新的數據類(lèi)型。為不同實(shí)體創(chuàng )建新的表,爾后通過(guò)連接進(jìn)行
查詢(xún)。
連接可以在SELECT 語(yǔ)句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出連接時(shí)有助于
將連接操作與WHERE子句中的搜索條件區分開(kāi)來(lái)。所以,在Transact-SQL中推薦使用這種方法。
SQL-92標準所定義的FROM子句的連接語(yǔ)法格式為:
FROM join_table join_type join_table
[ON (join_condition)]
其中join_table指出參與連接操作的表名,連接可以對同一個(gè)表操作,也可以對多表操作,對同一
個(gè)表操作的連接又稱(chēng)做自連接。
join_type 指出連接類(lèi)型,可分為三種:內連接、外連接和交叉連接。內連接(INNER JOIN)使用比
較運算符進(jìn)行表間某(些)列數據的比較操作,并列出這些表中與連接條件相匹配的數據行。根據所使用
的比較方式不同,內連接又分為等值連接、自然連接和不等連接三種。
外連接分為左外連接(LEFT OUTER JOIN或LEFT JOIN)、右外連接(RIGHT OUTER JOIN或RIGHT JOIN)
和全外連接(FULL OUTER JOIN或FULL JOIN)三種。與內連接不同的是,外連接不只列出與連接條件相匹配的行,而是列出左表(左外連接時(shí))、右表(右外連接時(shí))或兩個(gè)表(全外連接時(shí))中所有符合搜索條件的
數據行。
交叉連接(CROSS JOIN)沒(méi)有WHERE 子句,它返回連接表中所有數據行的笛卡爾積,其結果集合中的
數據行數等于第一個(gè)表中符合查詢(xún)條件的數據行數乘以第二個(gè)表中符合查詢(xún)條件的數據行數。
連接操作中的ON (join_condition) 子句指出連接條件,它由被連接表中的列和比較運算符、邏輯
運算符等構成。
無(wú)論哪種連接都不能對text、ntext和image數據類(lèi)型列進(jìn)行直接連接,但可以對這三種列進(jìn)行間接
連接。例如:
SELECT p1.pub_id,p2.pub_id,p1.pr_info
FROM pub_info AS p1 INNER JOIN pub_info AS p2
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)

(一)內連接
內連接查詢(xún)操作列出與連接條件匹配的數據行,它使用比較運算符比較被連接列的列值。內連接分
三種:
1、等值連接:在連接條件中使用等于號(=)運算符比較被連接列的列值,其查詢(xún)結果中列出被連接
表中的所有列,包括其中的重復列。
2、不等連接: 在連接條件使用除等于運算符以外的其它比較運算符比較被連接的列的列值。這些
運算符包括>、>=、<=、<、!>、!<和<>。
3、自然連接:在連接條件中使用等于(=)運算符比較被連接列的列值,但它使用選擇列表指出查詢(xún)
結果集合中所包括的列,并刪除連接表中的重復列。
例,下面使用等值連接列出authors和publishers表中位于同一城市的作者和出版社:
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
又如使用自然連接,在選擇列表中刪除authors 和publishers 表中重復列(city和state):
SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
(二)外連接
內連接時(shí),返回查詢(xún)結果集合中的僅是符合查詢(xún)條件( WHERE 搜索條件或 HAVING 條件)和連接條件
的行。而采用外連接時(shí),它返回到查詢(xún)結果集合中的不僅包含符合連接條件的行,而且還包括左表(左外
連接時(shí))、右表(右外連接時(shí))或兩個(gè)邊接表(全外連接)中的所有數據行。
如下面使用左外連接將論壇內容和作者信息連接起來(lái):
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
ON a.username=b.username
下面使用全外連接將city表中的所有作者以及user表中的所有作者,以及他們所在的城市:
SELECT a.*,b.*
FROM city as a FULL OUTER JOIN user as b
ON a.username=b.username

(三)交叉連接
交叉連接不帶WHERE 子句,它返回被連接的兩個(gè)表所有數據行的笛卡爾積,返回到結果集合中的數
據行數等于第一個(gè)表中符合查詢(xún)條件的數據行數乘以第二個(gè)表中符合查詢(xún)條件的數據行數。
例,titles表中有6類(lèi)圖書(shū),而publishers表中有8家出版社,則下列交叉連接檢索到的記錄數將等
于6*8=48行。
SELECT type,pub_name
FROM titles CROSS JOIN publishers
ORDER BY type


SQL查詢(xún)語(yǔ)句精華大全

 

一、 簡(jiǎn)單查詢(xún)
簡(jiǎn)單的Transact-SQL查詢(xún)只包括選擇列表、FROM子句和WHERE子句。它們分別說(shuō)明所查詢(xún)列、查詢(xún)的
表或視圖、以及搜索條件等。
例如,下面的語(yǔ)句查詢(xún)testtable表中姓名為“張三”的nickname字段和email字段。
SELECT nickname,email
FROM testtable
WHERE name='張三'

(一) 選擇列表
選擇列表(select_list)指出所查詢(xún)列,它可以是一組列名列表、星號、表達式、變量(包括局部變
量和全局變量)等構成。

1、選擇所有列
例如,下面語(yǔ)句顯示testtable表中所有列的數據:
SELECT *
FROM testtable

2、選擇部分列并指定它們的顯示次序
查詢(xún)結果集合中數據的排列順序與選擇列表中所指定的列名排列順序相同。
例如:
SELECT nickname,email
FROM testtable

3、更改列標題
在選擇列表中,可重新指定列標題。定義格式為:
列標題=列名
列名 列標題
如果指定的列標題不是標準的標識符格式時(shí),應使用引號定界符,例如,下列語(yǔ)句使用漢字顯示列
標題:
SELECT 昵稱(chēng)=nickname,電子郵件=email
FROM testtable

4、刪除重復行
SELECT語(yǔ)句中使用ALL或DISTINCT選項來(lái)顯示表中符合條件的所有行或刪除其中重復的數據行,默認
為ALL。使用DISTINCT選項時(shí),對于所有重復的數據行在SELECT返回的結果集合中只保留一行。

5、限制返回的行數
使用TOP n [PERCENT]選項限制返回的數據行數,TOP n說(shuō)明返回n行,而TOP n PERCENT時(shí),說(shuō)明n是
表示一百分數,指定返回的行數等于總行數的百分之幾。
例如:
SELECT TOP 2 *
FROM testtable
SELECT TOP 20 PERCENT *
FROM testtable

(二) FROM子句
FROM子句指定SELECT語(yǔ)句查詢(xún)及與查詢(xún)相關(guān)的表或視圖。在FROM子句中最多可指定256個(gè)表或視圖,
它們之間用逗號分隔。
在FROM子句同時(shí)指定多個(gè)表或視圖時(shí),如果選擇列表中存在同名列,這時(shí)應使用對象名限定這些列
所屬的表或視圖。例如在usertable和citytable表中同時(shí)存在cityid列,在查詢(xún)兩個(gè)表中的cityid時(shí)應
使用下面語(yǔ)句格式加以限定:
SELECT username,citytable.cityid
FROM usertable,citytable
WHERE usertable.cityid=citytable.cityid
在FROM子句中可用以下兩種格式為表或視圖指定別名:
表名 as 別名
表名 別名
例如上面語(yǔ)句可用表的別名格式表示為:
SELECT username,b.cityid
FROM usertable a,citytable b
WHERE a.cityid=b.cityid
SELECT不僅能從表或視圖中檢索數據,它還能夠從其它查詢(xún)語(yǔ)句所返回的結果集合中查詢(xún)數據。
例如:
SELECT a.au_fname+a.au_lname
FROM authors a,titleauthor ta
(SELECT title_id,title
FROM titles
WHERE ytd_sales>10000
) AS t
WHERE a.au_id=ta.au_id
AND ta.title_id=t.title_id
此例中,將SELECT返回的結果集合給予一別名t,然后再從中檢索數據。

(三) 使用WHERE子句設置查詢(xún)條件
WHERE子句設置查詢(xún)條件,過(guò)濾掉不需要的數據行。例如下面語(yǔ)句查詢(xún)年齡大于20的數據:
SELECT *
FROM usertable
WHERE age>20
WHERE子句可包括各種條件運算符:
比較運算符(大小比較):>、>=、=、<、<=、<>、!>、!<
范圍運算符(表達式值是否在指定的范圍):BETWEEN…AND…
NOT BETWEEN…AND…
列表運算符(判斷表達式是否為列表中的指定項):IN (項1,項2……)
NOT IN (項1,項2……)
模式匹配符(判斷值是否與指定的字符通配格式相符):LIKE、NOT LIKE
空值判斷符(判斷表達式是否為空):IS NULL、NOT IS NULL
邏輯運算符(用于多條件的邏輯連接):NOT、AND、OR
1、范圍運算符例:age BETWEEN 10 AND 30相當于age>=10 AND age<=30
2、列表運算符例:country IN ('Germany','China')
3、模式匹配符例:常用于模糊查找,它判斷列值是否與指定的字符串格式相匹配??捎糜赾har、
varchar、text、ntext、datetime和smalldatetime等類(lèi)型查詢(xún)。
可使用以下通配字符:
百分號%:可匹配任意類(lèi)型和長(cháng)度的字符,如果是中文,請使用兩個(gè)百分號即%%。
下劃線(xiàn)_:匹配單個(gè)任意字符,它常用來(lái)限制表達式的字符長(cháng)度。
方括號[]:指定一個(gè)字符、字符串或范圍,要求所匹配對象為它們中的任一個(gè)。
[^]:其取值也[] 相同,但它要求所匹配對象為指定字符以外的任一個(gè)字符。
例如:
限制以Publishing結尾,使用LIKE '%Publishing'
限制以A開(kāi)頭:LIKE '[A]%'
限制以A開(kāi)頭外:LIKE '[^A]%'
4、空值判斷符例WHERE age IS NULL
5、邏輯運算符:優(yōu)先級為NOT、AND、OR
(四)查詢(xún)結果排序
使用ORDER BY子句對查詢(xún)返回的結果按一列或多列排序。ORDER BY子句的語(yǔ)法格式為:
ORDER BY {column_name [ASC|DESC]} [,…n]
其中ASC表示升序,為默認值,DESC為降序。ORDER BY不能按ntext、text和image數據類(lèi)型進(jìn)行排
序。
例如:
SELECT *
FROM usertable
ORDER BY age desc,userid ASC
另外,可以根據表達式進(jìn)行排序。

二、 聯(lián)合查詢(xún)
UNION運算符可以將兩個(gè)或兩個(gè)以上上SELECT語(yǔ)句的查詢(xún)結果集合合并成一個(gè)結果集合顯示,即執行聯(lián)
合查詢(xún)。UNION的語(yǔ)法格式為:
select_statement
UNION [ALL] selectstatement
[UNION [ALL] selectstatement][…n]
其中selectstatement為待聯(lián)合的SELECT查詢(xún)語(yǔ)句。
ALL選項表示將所有行合并到結果集合中。不指定該項時(shí),被聯(lián)合查詢(xún)結果集合中的重復行將只保留一
行。
聯(lián)合查詢(xún)時(shí),查詢(xún)結果的列標題為第一個(gè)查詢(xún)語(yǔ)句的列標題。因此,要定義列標題必須在第一個(gè)查詢(xún)語(yǔ)
句中定義。要對聯(lián)合查詢(xún)結果排序時(shí),也必須使用第一查詢(xún)語(yǔ)句中的列名、列標題或者列序號。
在使用UNION 運算符時(shí),應保證每個(gè)聯(lián)合查詢(xún)語(yǔ)句的選擇列表中有相同數量的表達式,并且每個(gè)查詢(xún)選
擇表達式應具有相同的數據類(lèi)型,或是可以自動(dòng)將它們轉換為相同的數據類(lèi)型。在自動(dòng)轉換時(shí),對于數值類(lèi)
型,系統將低精度的數據類(lèi)型轉換為高精度的數據類(lèi)型。
在包括多個(gè)查詢(xún)的UNION語(yǔ)句中,其執行順序是自左至右,使用括號可以改變這一執行順序。例如:
查詢(xún)1 UNION (查詢(xún)2 UNION 查詢(xún)3)

三、連接查詢(xún)
通過(guò)連接運算符可以實(shí)現多個(gè)表查詢(xún)。連接是關(guān)系數據庫模型的主要特點(diǎn),也是它區別于其它類(lèi)型
數據庫管理系統的一個(gè)標志。
在關(guān)系數據庫管理系統中,表建立時(shí)各數據之間的關(guān)系不必確定,常把一個(gè)實(shí)體的所有信息存放在
一個(gè)表中。當檢索數據時(shí),通過(guò)連接操作查詢(xún)出存放在多個(gè)表中的不同實(shí)體的信息。連接操作給用戶(hù)帶
來(lái)很大的靈活性,他們可以在任何時(shí)候增加新的數據類(lèi)型。為不同實(shí)體創(chuàng )建新的表,爾后通過(guò)連接進(jìn)行
查詢(xún)。
連接可以在SELECT 語(yǔ)句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出連接時(shí)有助于
將連接操作與WHERE子句中的搜索條件區分開(kāi)來(lái)。所以,在Transact-SQL中推薦使用這種方法。
SQL-92標準所定義的FROM子句的連接語(yǔ)法格式為:
FROM join_table join_type join_table
[ON (join_condition)]
其中join_table指出參與連接操作的表名,連接可以對同一個(gè)表操作,也可以對多表操作,對同一
個(gè)表操作的連接又稱(chēng)做自連接。
join_type 指出連接類(lèi)型,可分為三種:內連接、外連接和交叉連接。內連接(INNER JOIN)使用比
較運算符進(jìn)行表間某(些)列數據的比較操作,并列出這些表中與連接條件相匹配的數據行。根據所使用
的比較方式不同,內連接又分為等值連接、自然連接和不等連接三種。
外連接分為左外連接(LEFT OUTER JOIN或LEFT JOIN)、右外連接(RIGHT OUTER JOIN或RIGHT JOIN)
和全外連接(FULL OUTER JOIN或FULL JOIN)三種。與內連接不同的是,外連接不只列出與連接條件相匹
配的行,而是列出左表(左外連接時(shí))、右表(右外連接時(shí))或兩個(gè)表(全外連接時(shí))中所有符合搜索條件的
數據行。
交叉連接(CROSS JOIN)沒(méi)有WHERE 子句,它返回連接表中所有數據行的笛卡爾積,其結果集合中的
數據行數等于第一個(gè)表中符合查詢(xún)條件的數據行數乘以第二個(gè)表中符合查詢(xún)條件的數據行數。
連接操作中的ON (join_condition) 子句指出連接條件,它由被連接表中的列和比較運算符、邏輯
運算符等構成。
無(wú)論哪種連接都不能對text、ntext和image數據類(lèi)型列進(jìn)行直接連接,但可以對這三種列進(jìn)行間接
連接。例如:
SELECT p1.pub_id,p2.pub_id,p1.pr_info
FROM pub_info AS p1 INNER JOIN pub_info AS p2
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)

(一)內連接
內連接查詢(xún)操作列出與連接條件匹配的數據行,它使用比較運算符比較被連接列的列值。內連接分
三種:
1、等值連接:在連接條件中使用等于號(=)運算符比較被連接列的列值,其查詢(xún)結果中列出被連接
表中的所有列,包括其中的重復列。
2、不等連接: 在連接條件使用除等于運算符以外的其它比較運算符比較被連接的列的列值。這些
運算符包括>、>=、<=、<、!>、!<和<>。
3、自然連接:在連接條件中使用等于(=)運算符比較被連接列的列值,但它使用選擇列表指出查詢(xún)
結果集合中所包括的列,并刪除連接表中的重復列。
例,下面使用等值連接列出authors和publishers表中位于同一城市的作者和出版社:
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
又如使用自然連接,在選擇列表中刪除authors 和publishers 表中重復列(city和state):
SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
(二)外連接
內連接時(shí),返回查詢(xún)結果集合中的僅是符合查詢(xún)條件( WHERE 搜索條件或 HAVING 條件)和連接條件
的行。而采用外連接時(shí),它返回到查詢(xún)結果集合中的不僅包含符合連接條件的行,而且還包括左表(左外
連接時(shí))、右表(右外連接時(shí))或兩個(gè)邊接表(全外連接)中的所有數據行。
如下面使用左外連接將論壇內容和作者信息連接起來(lái):
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
ON a.username=b.username
下面使用全外連接將city表中的所有作者以及user表中的所有作者,以及他們所在的城市:
SELECT a.*,b.*
FROM city as a FULL OUTER JOIN user as b
ON a.username=b.username

(三)交叉連接
交叉連接不帶WHERE 子句,它返回被連接的兩個(gè)表所有數據行的笛卡爾積,返回到結果集合中的數
據行數等于第一個(gè)表中符合查詢(xún)條件的數據行數乘以第二個(gè)表中符合查詢(xún)條件的數據行數。
例,titles表中有6類(lèi)圖書(shū),而publishers表中有8家出版社,則下列交叉連接檢索到的記錄數將等
于6*8=48行。
SELECT type,pub_name
FROM titles CROSS JOIN publishers
ORDER BY typeSQL核心語(yǔ)句(非常實(shí)用的幾個(gè)技巧)插入數據

向表中添加一個(gè)新記錄,你要使用SQL INSERT 語(yǔ)句。這里有一個(gè)如何使用這種語(yǔ)句的例子:

INSERT mytable (mycolumn) VALUES (‘some data’)

這個(gè)語(yǔ)句把字符串’some data’插入表mytable的mycolumn字段中。將要被插入數據的字段的名字在第一個(gè)括號中指定,實(shí)際的數據在第二個(gè)括號中給出。

INSERT 語(yǔ)句的完整句法如下:

INSERT [INTO] {table_name|view_name} [(column_list)] {DEFAULT VALUES |

Values_list | select_statement}

如果一個(gè)表有多個(gè)字段,通過(guò)把字段名和字段值用逗號隔開(kāi),你可以向所有的字段中插入數據。假設表mytable有三個(gè)字段first_column,second_column,和third_column。下面的INSERT語(yǔ)句添加了一條三個(gè)字段都有值的完整記錄:

INSERT mytable (first_column,second_column,third_column)

VALUES (‘some data’,’some more data’,’yet more data’)

注意

你可以使用INSERT語(yǔ)句向文本型字段中插入數據。但是,如果你需要輸入很長(cháng)的字符串,你應該使用WRITETEXT語(yǔ)句。這部分內容對本書(shū)來(lái)說(shuō)太高級了,因此不加討論。要了解更多的信息,請參考Microsoft SQL Sever 的文檔。

如果你在INSERT 語(yǔ)句中只指定兩個(gè)字段和數據會(huì )怎么樣呢?換句話(huà)說(shuō),你向一個(gè)表中插入一條新記錄,但有一個(gè)字段沒(méi)有提供數據。在這種情況下,有下面的四種可能:

如果該字段有一個(gè)缺省值,該值會(huì )被使用。例如,假設你插入新記錄時(shí)沒(méi)有給字段third_column提供數據,而這個(gè)字段有一個(gè)缺省值’some value’。在這種情況下,當新記錄建立時(shí)會(huì )插入值’some value’。

如果該字段可以接受空值,而且沒(méi)有缺省值,則會(huì )被插入空值。

如果該字段不能接受空值,而且沒(méi)有缺省值,就會(huì )出現錯誤。你會(huì )收到錯誤信息:

The column in table mytable may not be null.

最后,如果該字段是一個(gè)標識字段,那么它會(huì )自動(dòng)產(chǎn)生一個(gè)新值。當你向一個(gè)有標識字段的表中插入新記錄時(shí),只要忽略該字段,標識字段會(huì )給自己賦一個(gè)新值。

注意

向一個(gè)有標識字段的表中插入新記錄后,你可以用SQL變量@@identity來(lái)訪(fǎng)問(wèn)新記錄

的標識字段的值??紤]如下的SQL語(yǔ)句:

INSERT mytable (first_column) VALUES(‘some value’)

INSERT anothertable(another_first,another_second)

VALUES(@@identity,’some value’)

如果表mytable有一個(gè)標識字段,該字段的值會(huì )被插入表anothertable的another_first字段。這是因為變量@@identity總是保存最后一次插入標識字段的值。

字段another_first應該與字段first_column有相同的數據類(lèi)型。但是,字段another_first不能是應該標識字段。Another_first字段用來(lái)保存字段first_column的值。

刪除記錄

要從表中刪除一個(gè)或多個(gè)記錄,需要使用SQL DELETE語(yǔ)句。你可以給DELETE 語(yǔ)句提供WHERE 子句。WHERE子句用來(lái)選擇要刪除的記錄。例如,下面的這個(gè)DELETE語(yǔ)句只刪除字段first_column的值等于’Delete Me’的記錄:

DELETE mytable WHERE first_column=’Deltet Me’

DELETE 語(yǔ)句的完整句法如下:

DELETE [FROM] {table_name|view_name} [WHERE clause]

在SQL SELECT 語(yǔ)句中可以使用的任何條件都可以在DELECT 語(yǔ)句的WHERE子句中使用。例如,下面的這個(gè)DELETE語(yǔ)句只刪除那些first_column字段的值為’goodbye’或second_column字段的值為’so long’的記錄:

DELETE mytable WHERE first_column=’goodby’ OR second_column=’so long’

如果你不給DELETE 語(yǔ)句提供WHERE 子句,表中的所有記錄都將被刪除。你不應該有這種想法。如果你想刪除應該表中的所有記錄,應使用第十章所講的TRUNCATE TABLE語(yǔ)句。

注意

為什么要用TRUNCATE TABLE 語(yǔ)句代替DELETE語(yǔ)句?當你使用TRUNCATE TABLE語(yǔ)句時(shí),記錄的刪除是不作記錄的。也就是說(shuō),這意味著(zhù)TRUNCATE TABLE 要比DELETE快得多。

更新記錄

要修改表中已經(jīng)存在的一條或多條記錄,應使用SQL UPDATE語(yǔ)句。同DELETE語(yǔ)句一樣,UPDATE語(yǔ)句可以使用WHERE子句來(lái)選擇更新特定的記錄。請看這個(gè)例子:

UPDATE mytable SET first_column=’Updated!’ WHERE second_column=’Update Me!’

這個(gè)UPDATE 語(yǔ)句更新所有second_column字段的值為’Update Me!’的記錄。對所有被選中的記錄,字段first_column的值被置為’Updated!’。

下面是UPDATE語(yǔ)句的完整句法:

UPDATE {table_name|view_name} SET [{table_name|view_name}]

{column_list|variable_list|variable_and_column_list}

[,{column_list2|variable_list2|variable_and_column_list2}…

[,{column_listN|variable_listN|variable_and_column_listN}]]

[WHERE clause]

注意

你可以對文本型字段使用UPDATE語(yǔ)句。但是,如果你需要更新很長(cháng)的字符串,應使用UPDATETEXT語(yǔ)句。這部分內容對本書(shū)來(lái)說(shuō)太高級了,因此不加討論。要了解更多的信息,請參考Microsoft SQL Sever 的文檔。

如果你不提供WHERE子句,表中的所有記錄都將被更新。有時(shí)這是有用的。例如,如果你想把表titles中的所有書(shū)的價(jià)格加倍,你可以使用如下的UPDATE 語(yǔ)句:

你也可以同時(shí)更新多個(gè)字段。例如,下面的UPDATE語(yǔ)句同時(shí)更新first_column,second_column,和third_column這三個(gè)字段:

UPDATE mytable SET first_column=’Updated!’

Second_column=’Updated!’

Third_column=’Updated!’

WHERE first_column=’Update Me1’

技巧

SQL忽略語(yǔ)句中多余的空格。你可以把SQL語(yǔ)句寫(xiě)成任何你最容易讀的格式。

用SELECT 創(chuàng )建記錄和表

你也許已經(jīng)注意到,INSERT 語(yǔ)句與DELETE語(yǔ)句和UPDATE語(yǔ)句有一點(diǎn)不同,它一次只操作一個(gè)記錄。然而,有一個(gè)方法可以使INSERT 語(yǔ)句一次添加多個(gè)記錄。要作到這一點(diǎn),你需要把INSERT 語(yǔ)句與SELECT 語(yǔ)句結合起來(lái),象這樣:

INSERT mytable (first_column,second_column)

SELECT another_first,another_second

FROM anothertable

WHERE another_first=’Copy Me!’

這個(gè)語(yǔ)句從anothertable拷貝記錄到mytable.只有表anothertable中字段another_first的值為’Copy Me!’的記錄才被拷貝。

當為一個(gè)表中的記錄建立備份時(shí),這種形式的INSERT 語(yǔ)句是非常有用的。在刪除一個(gè)表中的記錄之前,你可以先用這種方法把它們拷貝到另一個(gè)表中。

如果你需要拷貝整個(gè)表,你可以使用SELECT INTO 語(yǔ)句。例如,下面的語(yǔ)句創(chuàng )建了一個(gè)名為newtable的新表,該表包含表mytable的所有數據:

SELECT * INTO newtable FROM mytable

你也可以指定只有特定的字段被用來(lái)創(chuàng )建這個(gè)新表。要做到這一點(diǎn),只需在字段列表中指定你想要拷貝的字段。另外,你可以使用WHERE 子句來(lái)限制拷貝到新表中的記錄。下面的例子只拷貝字段second_columnd的值等于’Copy Me!’的記錄的first_column字段。

SELECT first_column INTO newtable

FROM mytable

WHERE second_column=’Copy Me!’

使用SQL修改已經(jīng)建立的表是很困難的。例如,如果你向一個(gè)表中添加了一個(gè)字段,沒(méi)有容易的辦法來(lái)去除它。另外,如果你不小心把一個(gè)字段的數據類(lèi)型給錯了,你將沒(méi)有辦法改變它。但是,使用本節中講述的SQL語(yǔ)句,你可以繞過(guò)這兩個(gè)問(wèn)題。

例如,假設你想從一個(gè)表中刪除一個(gè)字段。使用SELECT INTO 語(yǔ)句,你可以創(chuàng )建該表的一個(gè)拷貝,但不包含要刪除的字段。這使你既刪除了該字段,又保留了不想刪除的數據。

如果你想改變一個(gè)字段的數據類(lèi)型,你可以創(chuàng )建一個(gè)包含正確數據類(lèi)型字段的新表。創(chuàng )建好該表后,你就可以結合使用UPDATE語(yǔ)句和SELECT 語(yǔ)句,把原來(lái)表中的所有數據拷貝到新表中。通過(guò)這種方法,你既可以修改表的結構,又能保存原有的數據。

jsp連接數據庫:
<%@ page language="java" import="java.util.*, java.sql.*" pageEncoding="GB18030"%>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
String password2 = request.getParameter("password2");
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/bishe", "root", "admin");

String sqlQuery = "select count(*) from user where username = ?";
PreparedStatement psQuery = conn.prepareStatement(sqlQuery);
psQuery.setString(1, username);
ResultSet rs = psQuery.executeQuery();
rs.next();
int count = rs.getInt(1);
if(count > 0) {
response.sendRedirect("registerFail.jsp");
psQuery.close();
conn.close();
return;
}

String sql = "insert into user values (null, ?, ?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, username);
ps.setString(2, password);
ps.executeUpdate();
ps.close();
conn.close();

response.sendRedirect("registerSuccess.jsp");
%>
javaBean數據庫連接:
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/spring", "root", "bjsxt");

String sql = "insert into user values (null, ?, ?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, u.getUsername());
ps.setString(2, u.getPassword());
ps.executeUpdate();
ps.close();
conn.close();
hibernate 數據操作
Configuration cfg = new Configuration().configure();
factory = cfg.buildSessionFactory().openSession();
Session session = HibernateUtil.getSession();
//開(kāi)啟事務(wù)
session.beginTransaction();
//保存數據
session.save(p);
//事務(wù)提交
session.getTransaction().commit();
//關(guān)閉session
HibernateUtil.closeSession(session);

 

 

 

 

 


select(選擇) 字段 from (表名) where(篩選條件)
group by(字段名,按什么分組) having (條件,在每組中篩選)
order by (排序)

----------------局部變量--------------
聲明:
  declare @name varchar(30)--聲明一個(gè)存放學(xué)生名稱(chēng)的變量,最多存放30個(gè)字符

 

 declare @age int
---------------全局變量-----------------
輸出:
  print '服務(wù)器的名稱(chēng):'+@@servername
  select @@servername as '是服務(wù)器的名稱(chēng)'
   print '當前錯誤號:'+@@error(錯誤的:將 varchar 值 '當前錯誤號:' 轉換為數據類(lèi)型為 int 的列時(shí)發(fā)生語(yǔ)法錯誤。)
   print '當前錯誤號: '+convert(varchar(5),@@error)(正確)
---------------if-else語(yǔ)句----------------
   declare @myavg float
   select @myavg=AVG(writtenExam) from stuMarks
   print '本班平均分'+convert(varchar(5),@myavg)
   if(@myavg>70) ---(begin-end相當于java中的{})
      begin
    print '本班筆試成績(jì)優(yōu)秀,前三名的成績(jì)?yōu)椋?
    select top 3 * from stuMarks order by writtenExam desc
      end
   else
      begin
    print '本班筆試成績(jì)較差,后三名的成績(jì)?yōu)? '
    select top 3 * from stuMarks order by writtenExam [asc]
      end
----------------while循環(huán)語(yǔ)句-------------
declare @n int
while(1=1)--條件永遠成立
   begin
 select @n=count(*) from stuMarks where writtenExam<60 --統計不及格的人數
 if(@n>0)
    update stuMarks set writtenExam=writtenExam+2 --每人加2分
 else
    break --退出循環(huán)
   end
print '加分后的成績(jì)如下:'
select * from stuMarks
-----------------case多分支語(yǔ)句-------------
select * from stuMarks --原始數據
print 'ABCDE五級顯示成績(jì)如下:'
select stuNo,成績(jì)=case
       when writtenExam<60 then 'E'
       when writtenExam between 60 and 69 then 'D'
       when writtenExam between 70 and 79 then 'C'
       when writtenExam between 80 and 89 then 'B'
       else 'A'
   end
 from stuMarks
-----------------go批處理語(yǔ)句------------------
use Master
go
 create table stuInfo
 (
 id int not null,
 name varchar(20)
 )
go
-----------------in和not in子查詢(xún)--------------------
in查詢(xún):
   select stuName from stuInfo
    where stuNo in (select stuNo from stuMarks where writtenExam=60)
not in查詢(xún):
   select stuName from stuInfo
 where stuNo not in (select stuNo from stuMarks)
   go
------------------exists和not exists子查詢(xún)------------
exists子查詢(xún):
  1、if exists(select * from sysdatabases where name='stuDB')
 drop database stuDB
     go
  2、if exists(select * from stuMarks where writtenExam>80)
 begin
    print '本班有人筆試成績(jì)高于80分,每人只加2分,加分后的成績(jì)如下:'
    update stuMarks set writtenExam=writtenExam+2
    select * from stuMarks
 end
     else
 begin
   print '本班無(wú)人筆試成績(jì)高于80分,每人可以加5分,加分后的成績(jì)如下:'
    update stuMarks set writtenExam=writtenExam+5
    select * from stuMarks
 end
     go
not exists子查詢(xún):
   if not exists(select * from stuMarks where writtenExam>60 and labExam>60)
 begin
    print '本班無(wú)人通過(guò)考試,試題偏難,每人加3分,加分后的成績(jì)如下:'
    update stuMarks set writtenExam=writtenExam+3,labExam=labExam+3
    select * from stuMarks
 end
   else
 begin
    print '本班考試成績(jì)一般,每人只加1分,加分后的成績(jì)如下:'
    update stuMarks set writtenExam=writtenExam+1,labExam=labExam+1
    select * from stuMarks
 end


本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
常用的SQL語(yǔ)句
SQL查詢(xún)語(yǔ)句 select 詳解
SQL語(yǔ)法簡(jiǎn)介
SQL語(yǔ)言的組成一、SQL語(yǔ)言有命令動(dòng)詞、子句、運算符和統計函數構成。這些元素結合起來(lái)組成語(yǔ)句,用
MySQL多表查詢(xún)
MySQL 常用SQL語(yǔ)句
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久