當前位置:首頁 » 編程語言 » sql的用法

sql的用法

發布時間: 2022-07-24 06:14:29

① 關於sql語句的用法

--Z的欄位類型要和table2中的Z欄位一樣,這里只用int演示
alter table table1 add Z int(5) unsigned default 0;
update table1 set z= (select table2.Z from table2 left jion talble1 where table2.X=table1.X AND table2.Y=table1.Y)

② SQL語句中所有的用法誰會!!

sp_helpdb ----------查本伺服器中所有資料庫 可跟庫名
例:sp_helpdb 庫名
-------------------------------------------------------------
sp_databases -------------查看本伺服器中可用的資料庫
--------------------------------------------------------------------
sp_helpfile -------------------查看當前工作著的資料庫
-----------------------------------------------------------
sp_helpfilegroup ---------------查看當前工作著的組的信息。可加參數,跟組名
例:sp_helpdb 庫名
----------------------------------------------------------------
sp_renamedb -----------改資料庫名
例:sp_renamedb 舊庫名,新庫名
----------------------------------------------------------------
select groupname from sysfilegroups where status=24
---------查看文件組 =8是查只讀文件組 =16是查默認文件組 =24是查即只讀又默認
---------------------------------------------------------------------------
sp_dboption ----------修改資料庫選項值
例:sp_dboption 庫名 選項 值
值決定真假 一般用:true/faule 或off/on表示
選項一般常用為:use only(資料庫擁有者)single user(單一用戶)read only(只讀)
--------------------------------------------------------------------------
dbcc shrinkdatabase ---------收縮資料庫
例:dbcc shrinkdatabase (庫名,10)
收縮庫,剩餘空間保留10%,後面如果不加notruncate,則釋放空間操作系統,
加truncateonly,歸還空間給操作系統,但忽略所給的百分比數值。
----------------------------------------------------------------------
dbcc shrinkfile ---------收縮文件
用法與ddcc shrinkdatabase相同。
----------------------------------------------------------------------
alter database ---------------修改資料庫
用法:這是起始句,告訴要做的是修改資料庫,然後再接要做什麼工作。每次只做一項工作
alter database 庫名
add file 文件名....to filegroup 文件組名
----------------增加庫文件,格式與建庫時括弧里指定大小時的格式一樣
add log file 文件名 -------------增加日誌文件
remove file 文件名 ---------刪除庫內的文件
add filegroup 文件組名 -----------增加一個文件組
modify file 文件名 -------------修改文件屬性
modify filegroup 組名 ------------修改文件組屬性
---------------------------------------------------------------------------
drop database --------------刪除資料庫
例:drop database 庫名1,庫名2 ---------可同時刪除兩個庫
------------------------------------------------------------------------
create table 表名
(列名 類型,
列名 類型) -------------------建立表
--------------------------------------------------------------------
select * from 表名 ---------查詢表結構
--------------------------------------------------------------------
select @@dbts ----------查詢最後一次操作
--------------------------------------------------------------------
insert into 表名
(列名,列名)
values (變數,變數.....) ------------向表中插入數據
如省略列名,則必須把每列的變數填全,不可缺少。可以省略 into
--------------------------------------------------------------------
sp_addtype 自定義類型名 系統類型名 -------用戶自定義類型
--------------------------------------------------------------------
sp_droptype 自定義類型名 -----------刪除自定義類型
如有資料庫正在使用該自定義類型,則不能刪除
--------------------------------------------------------------------
alter table ---------修改表結構
用法: alter table 表名
alter column 列名 類型 ---------修改列的類型
drop column 列名 --------刪除列
add (column) 列名 --------增加列,實際用時不加 column
-----------------------------------------------------------------
sp_help -------------查看資料庫中對象信息
用法: sp_help 表名 ---------------查表的信息
或 sp_help 庫名 --------------查庫信息
後面可以跟庫名或者表名,是查資料庫或者表的信息
-----------------------------------------------------------------
sp_spaceused --------查看對象佔用的空間信息
用法: sp_spaceused ----------查當前庫佔用空間信息
或 sp_spaceused 表名 ----------查指定表佔用空間信息
後面可以加表名查看錶占空間信息。如不加,則查看當前資料庫。
------------------------------------------------------------------
sp_depends ------------查看對象的相關性
用法: sp_depends 表名 -----------後面加表名
------------------------------------------------------------------
sp_rename ---------------重新命名
用法: sp_rename 舊表名,新表名 ---------改表名
或 sp_rename '表名.舊列名','新列名' 'column' -------修改列名
--------------------------------------------------------------------
create index --------------創建索引
用法: create index 索引名 on 表名 (列名) ------創建索引
或: create unique clustered index 索引名 on 表名 (列名)
------創建簇集唯一索引 unique是建唯一索引 clustered是建簇集索引
---非簇集索引用:nonclustered
----------------------------------------------------------------------
select top ---------查表中前幾行
用法: select top 3 * from 表名 -------查表中前三行
或: select top 10 percent * from 表名 -------顯示表中前10%數據
------------加入percent是百分比的意思。只以大於的最小整數,無小數
----------------------------------------------------------------------
select 列名,列名,列名 from 表名 -------顯示表中特定的列
----------------------------------------------------------------------
select *,列名 from 表名 ----------查詢表中所有,後面再加一列
----------------------------------------------------------------------
select distinct ----------查詢不重復數據 distinct用於去掉重復數據
用法: select distinct * from 表名 ---------查表中不重復數據
或: select distinct * into 新表名 from 舊表名 ------查舊表中不重復數據同時生成新表
-------------------------------------------------------------------------------------
select 列名+列名 from 表名 -------允許有計算式出現,顯示無列名的計算結果
如想加列名,則: select 列名+列名 as 新列名 from 表名
-------------------------------------------------------------------------
select 年齡,聯系電話,cast (年齡 as varchar(2))+聯系電話 from 表名
--------把整型數據年齡轉化為字元型與字元型數據聯系電話相加

③ sql語句用法

having子句與where有相似之處但也有區別,都是設定條件的語句。
在查詢過程中聚合語句(sum,min,max,avg,count)要比having子句優先執行.而where子句在查詢過程中執行優先順序別優先於聚合語句(sum,min,max,avg,count)

簡單說來:where子句:
selectsum(num)asrmbfromorderwhereid>10//只有先查詢出id大於10的記錄才能進行聚合語句

having子句:
selectreportstoasmanager,count(*)(*)>4

通過使用GROUPBY子句,可以讓SUM和COUNT這些函數對屬於一組的數據起作用。
當你指定GROUPBYregion時,屬於同一個region(地區)的一組數據將只能返回一行值.也就是說,表中所有除region(地區)外的欄位,只能通過SUM,COUNT等聚合函數運算後返回一個值.
HAVING子句可以讓我們篩選成組後的各組數據.HAVING子句在聚合後對組記錄進行篩選
而WHERE子句在聚合前先篩選記錄.也就是說作用在GROUPBY子句和HAVING子句前
看下面這幾個例子吧:
顯示每個地區的總人口數和總面積.
SELECTregion,SUM(population),SUM(area)FROMbbcGROUPBYregion
先以region把返回記錄分成多個組,這就是GROUPBY的字面含義。分完組後,然後用聚合函數對每組中的不同欄位(一或多條記錄)作運算。
--顯示每個地區的總人口數和總面積.僅顯示那些面積超過1000000的地區。
SELECTregion,SUM(population),SUM(area)FROMbbcGROUPBYregion
HAVINGSUM(area)>1000000

④ sql語句用法

哈,因為資料庫修改數據時用的命令是update,所以都叫做更新了,其實和修改是一個意思來的......但是為了規范,還是叫更新數據比較好。

update mytable set first_column='update!' where second_column='update me!'
一步一步看啦
update mytable -- 要更新mytable表

set first_column='update!' -- 更新 first_column列的內容為'update!'

where second_column='update me!' --限制條件只有 second_column列內容為'update me!' 的才進行更新

⑤ SQL 一個% 和多個% 的用法

1、在SQL語句中一個% ,代表任意個字元

select * from emp where name like 'K%';
即表示查詢 emp表中 以K開頭姓名的數據;
2、兩個% 代表兩段內容是任意的

select * from emp where name like '%OK%';
即表示查詢emp 表中 姓名包含OK的數據

⑥ SQL語句中查詢的用法

distinct的作用就是去除重復的列。比如
一張表student(姓名,年級)然後裡面有許多數據,例如:
姓名
年級
張三
大一
張三
大二
李四
大三
王五
大一
讓你查詢出
student表中,有幾種姓名?
如果你寫成:
select
姓名
from
student
那麼結果是:
姓名
張三
張三
李四
王五
這樣的話,就會出現兩個張三
這樣既佔用空間,又不符合常理,這時候
如果你用distinct關鍵字的話,則:
select
distinct
姓名
from
student
結果是:
姓名
張三
李四
王五
總之,一句話,distinct就是去除重復列的。
明白了把?看在我寫那麼多的費上,給我分吧~~(*^__^*)

⑦ SQL語言的用法

有關資料庫的一寫操作:
創建表項就不說了.
CREATE TABLE Student
(Sno CHAR(5) NOT NULL UNIQUE,
Sname CHAR(20),
Ssex CHAR(1),
Sage INT,
Sdept CHAR(15));
插入記錄:
insert into Student (Sno,Sname,Ssex,Sdept) values('aaa','mary','f','172');
刪除記錄:
delete from Student where Sno = 'aaa';
註:只需要刪除一個主鍵就可以了。其他的記錄會相應的刪除掉。
刪除表中一個欄位:
ALTER TABLE Student DROP column Ssex; 列名;
修改表中的那一行數據:
原來的記錄:
Sno Sname Ssex Sdept
aaa mary f 172
update Student set Sname='mary1', Ssex='m' where Sno='aaa';
修改後:
Sno Sname Ssex Sdept
aaa mary1 m 172

desc倒敘排列:
建立索引:
create unique index Sno on Student(Sno);
索引的一點好處:在查詢時候比較方便,在存在的所有記錄中查找一個Sno=1的時候!建立索引的表中就直接查找Sno項比較它是否=1找到後查相關的記錄就比較快。沒有建立索引的需要把所有信息都查找一遍,再在其中找Sno欄位,再比較其值=1的相關記錄。

默認是ASC。
按表中哪個欄位倒敘排序:
select * from Student order by Sno desc;
注意:要排序的欄位必須是int型。

設置成自增長的欄位在插入數據的時候不需要插入該欄位的值:
select * from Student order by Sno desc;
原來沒有設置成自增長插入數據命令:
insert into Student (Sno,Sname,Ssex,Sdept) values('aaa','mary','f','172');
將int型的Sno欄位設置成自增長後
insert into Student (Sname,Ssex,Sdept) values('mary1','f','172');
insert into Student (Sname,Ssex,Sdept) values('mar1y','f','172');
insert into Student (Sname,Ssex,Sdept) values('ma1ry','f','172');
insert into Student (Sname,Ssex,Sdept) values('m1ary','f','172');

在表中的排序如下:
Sno Sname Ssex Sdept
1 mary1 f 172
2 mar1y f 172
3 ma1ry f 172
4 m1ary f 172
/*********************************************************************************
2006.7.20
*********************************************************************************/
查詢表中記錄總數:(無欄位名字)
select count() from usertable;
或:(userid 為欄位名字,結果是欄位的總行數)
select count(*) userid from Student;

查詢欄位的平均值:
selecet avg(Sno) from Student;
select avg(欄位名)from 表名;

給出查詢的欄位的平均值取別名:
select avg(欄位名) as (別名) from (表名);

查找指定的欄位的其他欄位
select Sdept,Ssex,Sname
from Student
where Sno=3;
(where Sname='mary1';或則where Sname like 'mary1';)

在between語句查詢的都是在and之間的所有值而IN語句則必須是in括弧裡面的值.
select Sno,Ssex,Sname from Student where Sdept between 180 and 190;

select Sno,Ssex,Sname from Student where Sdept in (172,190);

查詢Student表中的所有的名字中的Sno和Ssex值.
select Sno,Ssex from Student where Sdept >= 170 and Sname like '%%';
注:%%之間是把所有的String類型的值

like和where條件查詢
select last_name,salsry,department_id from employees where last_name like 'G%' and salary>3000;

查詢Student表中的所有的名字中間有mary的所有名字對應的的Sno和Ssex值.
select Sno,Ssex from Student where Sdept >= 170 and Sname like '%mary%';
注:mary1,1mary,marydsajdh,等.

注意:and or not 用的時候,and是用在連接並列條件的2個不同的欄位
or是用在選擇的2個不同的欄位之間,not一般用於not in(180,190)之間.
order by 和asc|desc的一點不同:
order by是按先進先排,desc是先進後排,asc和desc是排列順序不一樣.

disctinct條件查詢
distinct 這個關鍵字來過濾掉多餘的重復記錄只保留一條,

select distinct name from table 表示將返回table表中name欄位不重復的所有欄位的集合。

註:distinct必須放在開頭,select id distinct name from table 是錯誤的!

-------------------------------------------------------------------------------------
表TEST_1:
id name1 name2
9 aaa 11
8 bbb 22
3 ccc 33
4 ccc 44
5 bbb 55
6 ddd 66
7 eee 77
-------------------------------------------------------------------------------------

select distinct(name1) from test_1

結果:
name1
aaa
bbb
ccc
ddd
eee
distinct這個關鍵字來過濾掉多餘的重復記錄只保留一條,但往往只用它來返回不重復記錄的集合,而不是用它來返回不重記錄的所有值。其原因是distinct只能返回它的目標欄位,而無法返回其它欄位,即上表中只能返回name1欄位的所有不重復記錄集合。

-------------------------------------------------------------------------------------
如果現在想查詢出表test_1中所有name1不重復的id和name1欄位的記錄呢?

select distinct name, id from table

結果:
name1 id
aaa 9
bbb 5
bbb 8
ccc 3
ccc 4
ddd 6
eee 7

並不是我們所想要的結果

select distinct name,id from table 作用了兩個欄位,也就是必須得id與name都相同的才會被排除,即返回去除table表中id和name兩個欄位同時相同情況下所有集合。
-------------------------------------------------------------------------------------

如果現在想查詢出表test_1中所有name1不重復的所有欄位的記錄呢?

對於
select * from test_1 where name1 in (select distinct name1 from tablename)
等價於
select * from test_1 where name1 in ('aaa','bbb','ccc','ddd','eee')
我們很可能認為它是可行的,但實際上結果卻是:

id name1 name2
9 aaa 11
8 bbb 22
3 ccc 33
4 ccc 44
5 bbb 55
6 ddd 66
7 eee 77

正確sql應該是:
select * from test_1 inner join (select min(id) as id from test_1 group by name1 order by id ) T on test_1.id = T.id

min(id)或max(id)都行,order by id 可要可不要.這里用內連接實現聯合查詢,也可以用where語句

select * from test_1 ,(select min(id) as id from test_1 group by name1 order by id ) where test_1.id = T.id

-------------------------------------------------------------------------------------

**********************************************************************************
聯合查詢
**********************************************************************************
查詢表中的各個欄位的值
select Sno,Sname,Ssex,Sdept from Student;

多表查詢(2個表,publishtable和publishtable,給表起了別名)
select u.userid,u.age,u.username,p.publishname from usertable u,publishtable p where u.userid = p.publishid;

多表查詢(3個表employees,departments和locations表,給表起別名)
(從多表中查詢出所有姓smith的雇員的名字,所在部門以及部門所在的城市)
select e.first_name,e.last_name,d.department_name,l.city from employees e,departments d,locations l where e.department_id = d.department_id and d.location_id = l.location_id and e.last_name = 'smith';

***********************************************************************************
聯合查詢
***********************************************************************************

等值連接
/*將books表和表bookstype中的信息聯合查詢,條件是聯系鍵相等*/
select * from books,bookstype where bookstype.typeid = books.typeid

內連接
/*將books表和表bookstype中的信息聯合查詢,條件是聯系鍵相等,和等值連接等價*/
select * from books inner join bookstype on books.typeid = bookstype.typeid

左外連接

/*將books表和表bookstype中的信息聯合查詢,包括在books表中沒有和bookstype表關聯的信息*/
select * from books left outer join bookstype on bookstype.typeid = books.typeid

右外連接

/*將bookstype表和books表中的信息聯合查詢,包括在bookstype表中沒有和books表關聯的信息*/
select * from books right outer join bookstype on bookstype.typeid = books.typeid

全連接

/*將bookstype表和books表中的信息聯合查詢,包括在books表中沒有和bookstype表關聯的信息以及在bookstype表中沒有和books表關聯的信息*/

select * from books full outer join bookstype on bookstype.typeid = books.typeid

***********************************************************************************
聯合查詢
***********************************************************************************
多表查詢應該注意的幾點:
多表查詢和單表查詢的不同在於多表查詢在查詢某個欄位的時候應該帶上表名
格式是:表名.欄位名,表名.欄位名
select bbs.id,bbs.name,bbs.dep,bbsr.id,bbsr.name
from bbs,bbsr
where bbs.id=bbsr.id;
一般的在多表查詢中的表名取的麻煩用別名來代替
如下:
select b.id,b.name,b.dep,c.id,c.name
from bbs as b ,bbsr as c // from bbs b,bbsr c***注意取別名也可以用空格或則用as.
where b.id=c.id;

*************************************************************************************
分組查詢
*************************************************************************************

在select 語句中可以使用group by 子句將行劃分成較小的組,然後,使用聚組函數返回每一個組的匯總信息,另外,可以使用having子句限制返回的結果集。group by 子句可以將查詢結果分組,並返回行的匯總信息SQLServer 按照group by 子句中指定的表達式的值分組查詢結果。

-------------------------------------------------------------------------------------
分組查詢一般是用來進行統計需求的,要進行分組查詢必須使用group by子句或having子句,在分組統計時要用到SQL的多行存儲函數。在where條件中不能使用多行存儲函數.

查詢語句的select 和group by ,having 子句是聚組函數唯一出現的地方,在where 子句中不能使用聚組函數。

在帶有group by 子句的查詢語句中,在select 列表中指定的列要麼是group by 子句中指定的列,要麼包含聚組函數.
------------------------------------------------------------------------------------

部門表department:

department_id department_name
10 開發部
20 測試部
30 用服部
40 財務部
50 培訓部

雇員表employees:(department_id為外鍵)

id employees_name department_id
1 cheng 10
2 zhou 50
3 liguo 10
4 wang 20
5 feng 30
6 ling 30
7 wu 20
8 tang 20
9 yang 40
10 tan 50
------------------------------------------------------------------------------------

按部門編號統計出表employees中的每個部門的人數(group by分組查詢)
select department_id, count(*) from employees
group by department_id;

顯示出部門人數少於5人的部門編號以及人數( 按照department_id來分組,having count(*)<5做為限制條件 )
select department_id 部門號, count(*) 部門人數 from employees
group by department_id
having count(*)<5;
--------------------------------------
(注意:having必須在group by子句的後面)
--------------------------------------
圖:
部門號 部門人數
------------------------------
10 2
20 3
30 2
40 1
50 2
-------------------------------------------------------------------------------------
where子句和having子句可以同時使用,where子句是對要分組的行進行過濾,即選擇要分組的行;
而having子句是對分組後的數據進行過濾。此時where子句必須在group by...having子句之前
-------------------------------------------------------------------------------------
顯示出所有工資大於5000,且部門人數大於5個的部門號,部門最低工資和部門人數

select department_id 部門號(記住department_id 和部門號之間要空格), min(salary) 最低工資,count(*) 部門人數 from employees
where salary >5000
group by department_id
having count(*)>5;

圖:
--------------------------------------
部門號 最低工資 部門人數
80 6100 34
100 6800 6

group by 按照哪個欄位來排序查詢,一般的group by和having一起使用,注意在查詢中只能查詢與group by和having有關的欄位。
--------------------------------------

where 子句的作用是在對查詢結果進行分組前,將不符合where條件的行去掉,即在分組之前過濾數據,條件中不能包含聚組函數,使用where條件顯示特定的行。

having 子句的作用是篩選滿足條件的組,即在分組之後過濾數據,條件中經常包含聚組函數,使用having 條件顯示特定的組,也可以使用多個分組標准進行分組。

查詢每個部門的每種職位的雇員數(待測試...)
select deptno,job,count(*) from emp group by deptno,job;

*********************************************************************************
數據排序
*********************************************************************************

order by子句中可以用asc(升序)和desc(降序)來完成相應的排序,默認時是按找asc(升序)。
---------------------------------------------------------------------------------
顯示出所有工資大於5000,且部門人數大於5個的部門號,部門最低工資和部門人數,並要求按照部門人數降序排序.

select department_id 部門號(記住department_id 和部門號之間要空格), min(salary) 最低工資,count(*) 部門人數 from employees
where salary >5000
group by department_id
having count(*)>5
order by count(*)desc
-------------------------------------------------------------------
(注意:當對分組查詢後的結果進行排序時,order by 必須在group by之後)
-------------------------------------------------------------------

圖:
--------------------------------------
部門號 最低工資 部門人數
80 6100 34
100 6800 30
90 6500 28
70 6300 25

*******************************************************************************
子查詢
*******************************************************************************

-----------------------------------------------------------------------------------------------------
子查詢是一個在select查詢中含有其他的select語句,子查詢通常用在where子句中,即將一個查詢結果做為查詢的條件.
-----------------------------------------------------------------------------------------------------
統計表employees中所有工資小於平均工資的人數
select count(*)工資 from employees
where salary <
(select avg(salary) from employees)
圖:
----------------
工資
56
49
36

Select MIN(Salary),Manager_id
from Employee
group by Manager_id
having MIN(Salary) >
(Select MIN(Salary)
From Employee
where Manager_id=004);

注意在多表查詢中返回的值應該是一個唯一確定的值,而不應該是多中值。
select Employee_id,Last_name,Salary,Manager_id
from Employee
WHERE Salary>
(select Salary
from Employee
where Manager_id=003)
and
Last_name= (select Last_name
from Employee
where Last_name like 'mary');

注意在any,or,all的區別:
Select Salary,Manager_id,Last_name,Employee_id
from Employee
where Salary < any
(Select Salary
From Employee
where Manager_id=005);

Select Salary
From Employee
where Manager_id=005;返回的是2000,2500
就是在工資中小於2000.2500其中一個就可以了,而ALL則必須是小於2000和2500其中任何一個
。而or則是和and用在一起的.

******************************************************************************************
集合運算
******************************************************************************************

---------------------------------------------------------------------------------
集合運算是將2個或多個子查詢結果進行(並union),交(intersect)和減(minus)
---------------------------------------------------------------------------------
(並union):
select employee_id,empname from emp1
union
select employee_id,name from emp2

圖:
-----------------
employee_id empname
100 king1
1000 king2
1000 king3
10000 king4
100000 king5
1000000 king6

注:使用union,重復行只包括一個,當使用union all時將包括重復行

交(intersect):2個或多個子查詢的公共行
select employee_id,empname from emp1
intersect
select employee_id,name from emp2

減(minus):從第一個查詢結果中去掉出現在第二個查詢結果中的行:
select employee_id,empname from emp1
minus
select employee_id,name from emp2

*****************************************************************************************
視圖,存儲過程和觸發器
*****************************************************************************************

創建視圖:(查詢數據,用於系統統計報表)
create view dept_sum_vu
(name,minsal,maxsal,avgsal)
as select d.department_name,min(e.salary),max(e.salary),avg(e.salary)
from employees e,departments d
where e.department_id = d.department_id
group by d.department_name;

存貯過程,觸發器和刪除外鍵

1).存貯過程:
存貯過程的路徑:打開Stored Proceres中new一個新的Stored Proceres,中間填寫代碼,代碼如下:
CREATE PROCEDURE sa.bbsTest AS

select Bbsid ,content , area_id , name FROM BBs a JOIN bbs_area b
on a.area_id = b.id

CREATE PROCEDURE bbsTest AS

select Bbsid ,content , area_id , name FROM BBs a JOIN bbs_area b
on a.area_id = b.id

2).觸發器

打開用戶表項,點設計表,選中其中一個欄位,右鍵task點manager triggers,在彈出的表單中寫代碼:
CREATE TRIGGER [tD_bbs_area] ON [dbo].[bbs_area]
FOR DELETE
AS
BEGIN
DELETE rebbs
FROM bbs, deleted
WHERE rebbs.bbs_id = bbs.bbsid
AND bbs.area_id = deleted.id

DELETE bbs
FROM deleted
WHERE bbs.area_id = deleted.id

END

3).刪除外鍵
打開用戶表項,點設計表,選中其中一個欄位,右鍵relationships,在彈出的主鍵和外鍵中選擇就可以了.
刪除外鍵,需要先刪除主鍵表裡面的有關外鍵的欄位,再來刪除外鍵的有關欄位.

⑧ SQL的基本操作

1.創建表

(1)用Create Table 命令創建表

語法:

Create Table tabl_name

({

}column_name As computed_column_expression

}

}[,...n]

)

[On {fiegroup | Default}]

[Textimage_On {fiegroup | Default}]

例子:

打開cust資料庫,創建一個表,該表包含了學生的有關信息,即有學號、姓名、性別、出生日期、籍貫、聯系電話、住址和備注信息。

Use cust

Create Table students

(

number int not null,

name varchar(10) not null,

sex char(2) null,

birthday datetime null,

hometown varchar(30) null,

telphone_no varchar(12) null,

address varchar(30) null,

others varchar(50) null

)

在這個表中number表示學生代號,數據類型為int,不允許為空;name表示學生姓名,數據類型為varchar,長度為10,不允許為空;sex表示學生的性別,數據類型為char,長度為2,允許為空;birthday表示學生的出生日期,數據類型為datetime,允許為空;hometown表示學生的籍貫,數據類型為varchar,長度為30,允許為空;telephone_no表示學生的聯系電腦,數據類型為varchar,長度為12,允許為空;address表示學生的住址,數據類型為varchar,長度為30,允許為空;others表示學生的備注信息,長度為50,允許為空。

2.修改表的結構

(1)使用T-SQL語句增加和刪除一個新列

語法:

Alter Table table

{

ADO

{[]

|colun_name As computed_column_expression

|[]

}[,...n]

|Drop

{Column column

}[,...n]

}

例子:打開cust資料庫,修改其中的表students的結構,增加一個新欄位,欄位名為ying,數據類型是varchar,長度是10,沒有默認值,充許為空。

Use cust

Alter Table students Add ying varchar(10) null

打開cust資料庫,修改其中的表students的結構,刪除一個欄位,欄位名為ying。

Use cust

Alter Table students Drop Column ying

3.向表中插入數據

(1)用 Insert 語句

語法如下:

Insert [Into]

{table_name|view_name}[(column_list)]

{Values|values_list|select_statement}

注意:在插入數據時,字元數據和日期數據要使用引號引起來。

例子:

Use cust

Insert Into students

Values (11,"影子","男","1999-12-12","湖北","83779805","武漢市橋口區","VB愛好者")

打開cust資料庫,向students表中插入數據

(2)用Default 選項

在插入數據時,可以使用Default選項。Default選項有兩種形式,一種形式是Default Values,另一種是Default。

Default Values 形式為表中的某一行的所有列插入默認值。使用這種形式的前提條件是表中的所有列必須是這四種類型之一:Identity屬性,Timestamp數據類型,允許為Null,或者有一個指定的默認值。否則,會錯誤信息。

例子:

Use cust

Insert Into students Default Values

這個例子會出現錯誤,因為students表的number欄位是設置為不允許為空的。

Default 形式是為表中的某一列插入默認值。要插入的該列必須具備一定的條件,即該列要麼是Timestamp 數據類型,要麼是允許為Null,要麼是有一個指定的默認值,否則,會出現錯誤信息。

例子:

Use cust

Insert Into students Values(11,"影子",Default,Default,Default,Default,Default,Default)

由天前2個欄位不能為空,所以要賦值,否則會出現錯誤,而後面的6個欄位允許為空,因此可以調用Default默認。

(3)插入部分數據

在使用Insert語句插入數據是,還可以插入部分數據,也就是可以為每一行的指定的部分列插入數據。在插入部分數據時,應該注意以下三個問題:

☆在 Insert 子句中,指定要插入數據的列名。

☆在 Values 子句中,列出與列名對應的數據。列名的順序和數據的順序應該完全對應。

☆在 Insert 子句中,沒有列出的列應該至少具有這四種類型之一:Identtty 屬性,Timestamp 數據類型,允許為 Null,或者有一個指定的默認值。否則,會出現錯誤信息。

例子:

Use cust

Insert Into students (number,name)

Values (110,"影子")

打開cust資料庫,向students表中插入一行數據

注意:如用下例語句將發生錯誤,因為name欄位是不允許為空的(在創建資料庫時設定的)

Insert Into students (number)

Values (110)

(4)用 Select 語句插入多條數據

Insert 語句插入數據的特點是每一次只能插入一行數據。相反,Select 也可以用在 Insert 語句中,並且可以一次插入多條數據。使用 Select 語句插入數據的語法形式如下:

Insert table_name

Select column_list

From table_list

Where search_conditions

在使用 Select 語句插入數據時,應該注意下面幾點:

☆在 Insert 語句中使用 Select 時,他們參考的表既可以是相同的,也可以是不同的。

☆要插入數據的表必須已經存在。

☆要插入數據的表必須和 Select 的結果集兼容。兼容的含義是列的數量和順序必須相同,列的數據類型或者相同,或者SQL Server 可以自動轉換。

例子:

Use cust

Insert students

Select number,name,sex,birthday,hometown,telphone_no,address,others

From students

注意:

Select 後面的欄位要輸完整,這個例子是自己向自己插入多條數據(自己向自己插入是被允許的)

補充:

你還可以「From students」後面加上「Where name="影子"」,只插入name等於影子的記錄,可以用And 和 Or 加上多個條件。

(5)使用 Select Into 插入數據到一個新表中

帶有 Into 子句的 Select 語句允許用戶定義一個新表並且把數據插入到新表中。這種方法不同於前面講述的那些方法。在前面的那些方法中,一個共同的特點,是在數據輸入之前表已經存在。而使用 Select Into 插入數據的方法,是在插入數據的過程中建立新表。

Select Into 語句的語法如下:

Select select_list

Into new_table_name

From table_list

Where search_conditions

在使用 Select Into 插入數據時,要注意下面幾點:

☆在某個資料庫中使用 Select Into 插入數據時,設置該資料庫的 Select Into/Bulk Copy 為真。

☆新表不能存在,否則會產生錯誤信息。

☆新表中的列和行是基於查詢結果集

☆要插入的數據不記錄在日誌中。

☆在select_list 中出現的列應該使用別名,否則,新表中的列沒有列名。沒列名的表只能通過 Select * From new_table_name 的形式查詢。因此,應該為列起個別名。

☆這種方法多用在對列進行各種計算的情況。

例子:

Select number,name

Into newcust1

From students

創建新的表newcust1,插入students表中的number和name欄位的所有數據。

補充:如果要插入所有欄位的記錄,則「Select *」,也可在「From students」後加條件,方法和上個例子一樣。

(6)用 UPdate 語句修改表中的數據

Update 語句用來修改表中已存在的數據。Update 語句既可以一次修改一行數據,也可以一次修改許多行,甚至可以一次修改表中的全部數據。Update 語句使用 Where 子句指定要修改的行,使用 Set 子句給出新的數據。新數據可以是常量,也可以是指定的表達式,還可以是使用 From 子句來自其他表的數據。

Update 語句的語法如下:

Update {table_name|view_name}

Set {column_list}=expression [,. . .]

[Where clause]

在使用 Update 語句時,如果沒有使用 Where 子句,那麼就對表中所有的行進行修改。如果使用Update 語句修改數據時與數據完整性約束有沖突,那麼修改就不會發生,整個修改事務全部滾回。例如,這種沖突可能是所輸入的值是錯誤的數據類型,或者所輸入的值違背了在該列定義的規則約束,等等。

例子:

Use cust

Update students

Set name=name+"007"

Where number>100

打開cust資料庫,修改students表,使number>100的數據的name的值全部加"007"。

4.用 Delete 語句刪除表中的數據

當資料庫中的數據不需要的進修可以刪除。一般情況下,刪除數據使用 Delete 語句。Delete 語句可以一次

⑨ SQL 中with的用法

SQL 中with的用法如下:

CTE 之後必須跟隨引用部分或全部 CTE 列的 SELECT、INSERT、UPDATE 或 DELETE 語句。也可以在 CREATE VIEW 語句中將 CTE 指定為視圖中 SELECT 定義語句的一部分。

可以在非遞歸 CTE 中定義多個 CTE 查詢定義。定義必須與以下集合運算符之一結合使用:UNION ALL、UNION、INTERSECT 或 EXCEPT。

CTE 可以引用自身,也可以引用在同一WITH子句中預先定義的 CTE。不允許前向引用。

不允許在一個 CTE 中指定多個WITH子句。例如,如果 CTE_query_definition 包含一個子查詢,則該子查詢不能包括定義另一個 CTE 的嵌套的WITH子句。

不能在 CTE_query_definition 中使用以下子句:

COMPUTE 或 COMPUTE BY

ORDER BY(除非指定了 TOP 子句)

INTO

帶有查詢提示的 OPTION 子句

FOR XML

FOR BROWSE

(9)sql的用法擴展閱讀

定義和使用遞歸 CTE 指南

下列指南適用於定義遞歸 CTE 的情況:

遞歸 CTE 定義至少必須包含兩個 CTE 查詢定義,一個定位點成員和一個遞歸成員。可以定義多個定位點成員和遞歸成員;但必須將所有定位點成員查詢定義置於第一個遞歸成員定義之前。所有 CTE 查詢定義都是定位點成員,但它們引用 CTE 本身時除外。

定位點成員必須與以下集合運算符之一結合使用:UNION ALL、UNION、INTERSECT 或 EXCEPT。在最後一個定位點成員和第一個遞歸成員之間,以及組合多個遞歸成員時,只能使用 UNION ALL 集合運算符。

定位點成員和遞歸成員中的列數必須一致。

遞歸成員中列的數據類型必須與定位點成員中相應列的數據類型一致。

遞歸成員的 FROM 子句只能引用一次 CTE expression_name。

在遞歸成員的 CTE_query_definition 中不允許出現下列項:

熱點內容
文件夾目錄鏈接 發布:2025-01-31 08:24:22 瀏覽:948
ftpdos命令上傳 發布:2025-01-31 08:14:44 瀏覽:105
intenumjava 發布:2025-01-31 08:14:37 瀏覽:802
android3x 發布:2025-01-31 08:13:03 瀏覽:600
如何購買安卓版live2d 發布:2025-01-31 08:13:01 瀏覽:279
python交互輸入 發布:2025-01-31 08:12:53 瀏覽:427
requestdatapython 發布:2025-01-31 08:02:01 瀏覽:44
javades加密工具 發布:2025-01-31 07:54:04 瀏覽:244
電話如何配置ip 發布:2025-01-31 07:48:48 瀏覽:300
2021賓士e300l哪個配置性價比高 發布:2025-01-31 07:47:14 瀏覽:656