1. 程式人生 > >Day2(11.1):(3)插入、更新和刪除資料

Day2(11.1):(3)插入、更新和刪除資料

-- 3 ****************************************************
-- 插入、更新和刪除資料


-- 3.1 --------------------------------------------------
-- INSERT 插入資料


-- 方法一:在“結果”窗格中新增記錄
-- 方法二:使用INSERT語句插入資料


-- INSERT [INTO] <表名>[(列名,...)] VALUES <表中列的值>   標準方式
-- INSERT ... SELECT ...       插入的資料來源於其他表
-- 插入部分資料
-- 使用列預設屬性插入資料
-- SELECT ... INTO             使用 SELECT 產生的結果集來建立新的表(多用於臨時表的建立) 
-- 特殊字元的插入與查詢


use Test
create table namecard
(
name    varchar(20),
company varchar(20),
mobile  varchar(20)
)


insert namecard values ('Tom','ITANY','64693647')
insert namecard select au_fname,'Microsoft',phone from Pubs..authors where au_id = '172-32-1176'


-- 插入部分資料
insert namecard (name,company) values ('Marie','Oracle')
insert namecard (name,mobile) select au_fname,phone from Pubs..authors where au_id = '267-41-2394'


-- 使用列預設屬性
create table emp
(
name    char(20),
gender  char(1) default('M')
)


insert emp (name) values ('Tom Sawyer')
select * from emp


insert emp values ('Celine Dion','F')
select * from emp


-- 使用 SELECT ... INTO 


select * into t_temp from namecard


select * from t_temp


select * into t_temp from namecard


select * into #temp from namecard 


select * from #temp


/*
建立和使用臨時表的方法與建立普通表一樣;
臨時表的名稱以 # 開頭;
臨時表存在於 tempdb 資料庫中;
在批處理結束時,系統會自動刪除臨時表
*/


-- 特殊字元的插入與查詢
use Test
create table book
(
bookid int identity(1,1),
title  nvarchar(50)
)
insert book (title) values ('example 1')
insert book (title) values ('contains % simbol')
insert book (title) values ('I''m Tom')
insert book (title) values ('''')


select * from book


-- 查詢字元 %
select * from book where title like '%/%%' escape '/'
-- 查詢英文單引號
select * from book where title like '%''%'


-- 3.2 --------------------------------------------------
-- DELETE     刪除資料
-- DELETE [FROM] table_name WHERE 條件子句


-- TRUNCATE   清除表中所有資料,實際上是刪掉對錶中資料頁的連結,因而速度很快;
--            truncate 不產生事務日至,因此不能使用 rollback 命令進行恢復。
--            如果表有 identity 列,在使用 truncate 後,會重新設定計數器。


-- TRUNCATE TABLE table_name


-- 刪除部分資料
delete book where bookid = 3


-- 刪除全部資料
delete book


-- 使用 truncate
truncate table book


-- 3.3 --------------------------------------------------
-- UPDATE  更新資料


-- UPDATE table_name SET column_name = new_value WHERE <search_condition> 


--new_value可以為value default null


-- !! 千萬不要忘了 WHERE !!


update book set title = 'I''m Tom Sawyer' where bookid= 7 




-- 練習 --------------------------------------------------
-- 1
/*
use Test
create table maillist (idx int identity(100,2),email nvarchar(100))


插入一條記錄,郵件名為 '
[email protected]
'
*/
-- 2
/*
在剛才生成的表中:
生成 9999 條郵件記錄,郵件名要求以 '[email protected]' 的格式出現,
其中,'_'代表一個數字,郵件名不能重複。


幫助: 可以考慮使用 REPLICATE 系統函式
*/
-- 3 使用 while 迴圈來生成批量測試資料
/*


use Test
create table t_online(area int,counter int,create_time datetime)


假設有3個遊戲專區,生成每分鐘一次的線上人數的取樣資料,要最近3天的
並且,查詢 t_online 中,每分鐘各個專區的線上人數總數


*/
-- 4 下表記錄了磁碟上的檔案目錄,包括資料夾、上層資料夾,要求填寫每個資料夾的完整路徑
/*


create table directory
(
idx  int identity(1,1),
folder varchar(50),
parent varchar(50),
path   varchar(2000)
)


insert directory (folder,parent) values('software',null)
insert directory (folder,parent) values('game',null)
insert directory (folder,parent) values('music',null)
insert directory (folder,parent) values('movie',null)
insert directory (folder,parent) values('realplayer','software')
insert directory (folder,parent) values('nero','software')
insert directory (folder,parent) values('winning_eleven','game')
insert directory (folder,parent) values('roxette','music')
insert directory (folder,parent) values('celine_dion','music')
insert directory (folder,parent) values('matrix','movie')
insert directory (folder,parent) values('the_ballad_hits','roxette')
insert directory (folder,parent) values('a_thing_about_you','the_ballad_hits')


*/