- SQL SELECT 語句
SELECT 語句用于從表中選取數據。
結果被存儲在一個結果表中(稱為結果集)。
SQL SELECT 語法
SELECT 列名稱 FROM 表名稱
以及:
SELECT * FROM 表名稱
注釋:SQL 語句對大小寫不敏感。SELECT 等效于 select。
SQL SELECT 實例
如需獲取名為 "LastName" 和 "FirstName" 的列的內容(從名為 "Persons" 的數據庫表),請使用類似這樣的 SELECT 語句:
SELECT LastName,FirstName FROM Persons
"Persons" 表:
Id |
LastName |
FirstName |
Address |
City |
1 |
Adams |
John |
Oxford Street |
London |
2 |
Bush |
George |
Fifth Avenue |
New York |
3 |
Carter |
Thomas |
Changan Street |
Beijing |
結果:
LastName |
FirstName |
Adams |
John |
Bush |
George |
Carter |
Thomas |
SQL SELECT * 實例
現在我們希望從 "Persons" 表中選取所有的列。
請使用符號 * 取代列的名稱,就像這樣:
SELECT * FROM Persons
提示:星號(*)是選取所有列的快捷方式。
結果:
Id |
LastName |
FirstName |
Address |
City |
1 |
Adams |
John |
Oxford Street |
London |
2 |
Bush |
George |
Fifth Avenue |
New York |
3 |
Carter |
Thomas |
Changan Street |
Beijing |
- SQL SELECT DISTINCT 語句
在表中,可能會包含重復值。這并不成問題,不過,有時您也許希望僅僅列出不同(distinct)的值。
關鍵詞 DISTINCT 用于返回唯一不同的值。
語法:
SELECT DISTINCT 列名稱 FROM 表名稱
使用 DISTINCT 關鍵詞
如果要從 "Company" 列中選取所有的值,我們需要使用 SELECT 語句:
SELECT Company FROM Orders
"Orders"表:
Company |
OrderNumber |
IBM |
3532 |
W3School |
2356 |
Apple |
4698 |
W3School |
6953 |
結果:
Company |
IBM |
W3School |
Apple |
W3School |
請注意,在結果集中,W3School 被列出了兩次。
如需從 Company" 列中僅選取唯一不同的值,我們需要使用 SELECT DISTINCT 語句:
SELECT DISTINCT Company FROM Orders
結果:
Company |
IBM |
W3School |
Apple |
- WHERE 子句
如需有條件地從表中選取數據,可將 WHERE 子句添加到 SELECT 語句。
語法
SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值
下面的運算符可在 WHERE 子句中使用:
操作符 |
描述 |
= |
等于 |
<> |
不等于 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
BETWEEN |
在某個范圍內 |
LIKE |
搜索某種模式 |
注釋:在某些版本的 SQL 中,操作符 <> 可以寫為 !=。
使用 WHERE 子句
如果只希望選取居住在城市 "Beijing" 中的人,我們需要向 SELECT 語句添加 WHERE 子句:
SELECT * FROM Persons WHERE City='Beijing'
"Persons" 表
LastName |
FirstName |
Address |
City |
Year |
Adams |
John |
Oxford Street |
London |
1970 |
Bush |
George |
Fifth Avenue |
New York |
1975 |
Carter |
Thomas |
Changan Street |
Beijing |
1980 |
Gates |
Bill |
Xuanwumen 10 |
Beijing |
1985 |
結果:
LastName |
FirstName |
Address |
City |
Year |
Carter |
Thomas |
Changan Street |
Beijing |
1980 |
Gates |
Bill |
Xuanwumen 10 |
Beijing |
1985 |
引號的使用
請注意,我們在例子中的條件值周圍使用的是單引號。
SQL 使用單引號來環繞文本值(大部分數據庫系統也接受雙引號)。如果是數值,請不要使用引號。
文本值:
這是正確的:
SELECT * FROM Persons WHERE FirstName='Bush'
這是錯誤的:
SELECT * FROM Persons WHERE FirstName=Bush
數值:
這是正確的:
SELECT * FROM Persons WHERE Year>1965
這是錯誤的:
SELECT * FROM Persons WHERE Year>'1965'
- ORDER BY 語句
ORDER BY 語句用于根據指定的列對結果集進行排序。
ORDER BY 語句默認按照升序對記錄進行排序。
如果您希望按照降序對記錄進行排序,可以使用 DESC 關鍵字。
原始的表 (用在例子中的):
Orders 表:
Company |
OrderNumber |
IBM |
3532 |
W3School |
2356 |
Apple |
4698 |
W3School |
6953 |
實例 1
以字母順序顯示公司名稱:
SELECT Company, OrderNumber FROM Orders ORDER BY Company
結果:
Company |
OrderNumber |
Apple |
4698 |
IBM |
3532 |
W3School |
6953 |
W3School |
2356 |
實例 2
以字母順序顯示公司名稱(Company),并以數字順序顯示順序號(OrderNumber):
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
結果:
Company |
OrderNumber |
Apple |
4698 |
IBM |
3532 |
W3School |
2356 |
W3School |
6953 |
實例 3
以逆字母順序顯示公司名稱:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
結果:
Company |
OrderNumber |
W3School |
6953 |
W3School |
2356 |
IBM |
3532 |
Apple |
4698 |
實例 4
以逆字母順序顯示公司名稱,并以數字順序顯示順序號:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
結果:
Company |
OrderNumber |
W3School |
2356 |
W3School |
6953 |
IBM |
3532 |
Apple |
4698 |
注意:在以上的結果中有兩個相等的公司名稱 (W3School)。只有這一次,在第一列中有相同的值時,第二列是以升序排列的。如果第一列中有些值為 nulls 時,情況也是這樣的
-
LIKE 操作符
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
SQL LIKE 操作符語法
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
原始的表 (用在例子中的):
Persons 表:
Id |
LastName |
FirstName |
Address |
City |
1 |
Adams |
John |
Oxford Street |
London |
2 |
Bush |
George |
Fifth Avenue |
New York |
3 |
Carter |
Thomas |
Changan Street |
Beijing |
LIKE 操作符實例
例子 1
現在,我們希望從上面的 "Persons" 表中選取居住在以 "N" 開始的城市里的人:
我們可以使用下面的 SELECT 語句:
SELECT * FROM Persons
WHERE City LIKE 'N%'
提示:"%" 可用于定義通配符(模式中缺少的字母)。
結果集:
Id |
LastName |
FirstName |
Address |
City |
2 |
Bush |
George |
Fifth Avenue |
New York |
例子 2
接下來,我們希望從 "Persons" 表中選取居住在以 "g" 結尾的城市里的人:
我們可以使用下面的 SELECT 語句:
SELECT * FROM Persons
WHERE City LIKE '%g'
結果集:
Id |
LastName |
FirstName |
Address |
City |
3 |
Carter |
Thomas |
Changan Street |
Beijing |
例子 3
接下來,我們希望從 "Persons" 表中選取居住在包含 "lon" 的城市里的人:
我們可以使用下面的 SELECT 語句:
SELECT * FROM Persons
WHERE City LIKE '%lon%'
結果集:
Id |
LastName |
FirstName |
Address |
City |
1 |
Adams |
John |
Oxford Street |
London |
例子 4
通過使用 NOT 關鍵字,我們可以從 "Persons" 表中選取居住在不包含 "lon" 的城市里的人:
我們可以使用下面的 SELECT 語句:
SELECT * FROM Persons
WHERE City NOT LIKE '%lon%'
結果集:
Id |
LastName |
FirstName |
Address |
City |
2 |
Bush |
George |
Fifth Avenue |
New York |
3 |
Carter |
Thomas |
Changan Street |
Beijing |
- INSERT INTO 語句
INSERT INTO 語句用于向表格中插入新的行。
語法
INSERT INTO 表名稱 VALUES (值1, 值2,....)
我們也可以指定所要插入數據的列:
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
插入新的行
"Persons" 表:
LastName |
FirstName |
Address |
City |
Carter |
Thomas |
Changan Street |
Beijing |
SQL 語句:
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
結果:
LastName |
FirstName |
Address |
City |
Carter |
Thomas |
Changan Street |
Beijing |
Gates |
Bill |
Xuanwumen 10 |
Beijing |
在指定的列中插入數據
"Persons" 表:
LastName |
FirstName |
Address |
City |
Carter |
Thomas |
Changan Street |
Beijing |
Gates |
Bill |
Xuanwumen 10 |
Beijing |
SQL 語句:
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
結果:
LastName |
FirstName |
Address |
City |
Carter |
Thomas |
Changan Street |
Beijing |
Gates |
Bill |
Xuanwumen 10 |
Beijing |
Wilson |
|
Champs-Elysees |
|
- Update 語句
Update 語句用于修改表中的數據。
語法:
UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值
Person:
LastName |
FirstName |
Address |
City |
Gates |
Bill |
Xuanwumen 10 |
Beijing |
Wilson |
|
Champs-Elysees |
|
更新某一行中的一個列
我們為 lastname 是 "Wilson" 的人添加 firstname:
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'
結果:
LastName |
FirstName |
Address |
City |
Gates |
Bill |
Xuanwumen 10 |
Beijing |
Wilson |
Fred |
Champs-Elysees |
|
更新某一行中的若干列
我們會修改地址(address),并添加城市名稱(city):
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'
WHERE LastName = 'Wilson'
結果:
LastName |
FirstName |
Address |
City |
Gates |
Bill |
Xuanwumen 10 |
Beijing |
Wilson |
Fred |
Zhongshan 23 |
Nanjing |
- DELETE 語句
DELETE 語句用于刪除表中的行。
語法
DELETE FROM 表名稱 WHERE 列名稱 = 值
Person:
LastName |
FirstName |
Address |
City |
Gates |
Bill |
Xuanwumen 10 |
Beijing |
Wilson |
Fred |
Zhongshan 23 |
Nanjing |
刪除某行
"Fred Wilson" 會被刪除:
DELETE FROM Person WHERE LastName = 'Wilson'
結果:
LastName |
FirstName |
Address |
City |
Gates |
Bill |
Xuanwumen 10 |
Beijing |
刪除所有行
可以在不刪除表的情況下刪除所有的行。這意味著表的結構、屬性和索引都是完整的:
DELETE FROM table_name
或者:
DELETE * FROM table_name
用SQL語句添加刪除修改字段
1.增加字段
alter table docdsp add dspcode
char(200)
2.刪除字段
ALTER TABLE table_NAME DROP COLUMN
column_NAME
3.修改字段類型
ALTER TABLE table_name ALTER COLUMN
column_name new_data_type
4.sp_rename 改名
更改當前數據庫中用戶創建對象(如表、列或用戶定義數據類型)的名稱。
語法
sp_rename [ @objname = ]
'object_name' ,
[ @newname = ] 'new_name'
[ , [ @objtype =
] 'object_type' ]
如:EXEC sp_rename
'newname','PartStock'
5.sp_help 顯示表的一些基本情況
sp_help 'object_name'
如:EXEC sp_help 'PartStock'
6.判斷某一表PartStock中字段PartVelocity是否存在
if
exists (select * from syscolumns where
id=object_id('PartStock') and name='PartVelocity')
print
'PartVelocity exists'
else print 'PartVelocity not
exists'
另法:
判斷表的存在性:
select count(*) from sysobjects where type='U'
and name='你的表名'
判斷字段的存在性:
select count(*) from syscolumns
where
id = (select id from sysobjects where type='U' and name='你的表名')
and name = '你要判斷的字段名'
一個小例子
--假設要處理的表名為:
tb
--判斷要添加列的表中是否有主鍵
if exists(select 1 from sysobjects where
parent_obj=object_id('tb') and xtype='PK')
begin
print
'表中已經有主鍵,列只能做為普通列添加'
--添加int類型的列,默認值為0
alter table tb add 列名 int default
0
end
else
begin
print '表中無主鍵,添加主鍵列'
--添加int類型的列,默認值為0
alter
table tb add 列名 int primary key default 0
end
7.隨機讀取若干條記錄
Access語法:SELECT top 10 * From 表名 ORDER BY
Rnd(id)
Sql server:select top n * from 表名 order by newid()
mysql select * From 表名 Order By rand() Limit n
8.說明:日程安排提前五分鐘提醒
SQL:
select * from 日程安排 where datediff(minute,f開始時間,getdate())>5
9.前10條記錄
select top 10 * form table1 where 范圍
10.包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重復行而派生出一個結果表
(select a
from tableA ) except (select a from tableB) except (select a from tableC)
11.說明:隨機取出10條數據
select top 10 * from tablename order by newid()
12.列出數據庫里所有的表名
select name from sysobjects where type=U
13.列出表里的所有的字段名
select name from syscolumns where
id=object_id(TableName)
14.說明:列示type、vender、pcs字段,以type字段排列,case可以方便地實現多重選擇,類似select
中的case。
select type,sum(case vender when A then pcs else 0
end),sum(case vender when C then pcs else 0 end),sum(case vender when B then pcs
else 0 end) FROM tablename group by type
15.說明:初始化表table1
TRUNCATE
TABLE table1
16.說明:幾個高級查詢運算詞
A: UNION 運算符
UNION 運算符通過組合其他兩個結果表(例如
TABLE1 和 TABLE2)并消去表中任何重復行而派生出一個結果表。當 ALL 隨 UNION 一起使用時(即 UNION
ALL),不消除重復行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
B: EXCEPT 運算符
EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2
中的行并消除所有重復行而派生出一個結果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復行。
C: INTERSECT 運算符
INTERSECT 運算符通過只包括 TABLE1 和 TABLE2
中都有的行并消除所有重復行而派生出一個結果表。當 ALL 隨 INTERSECT 一起使用時 (INTERSECT
ALL),不消除重復行。
注:使用運算詞的幾個查詢結果行必須是一致的。
17.說明:在線視圖查詢(表名1:a )
select * from (SELECT a,b,c FROM a) T where
t.a > 1;
18.說明:between的用法,between限制查詢數據范圍時包括了邊界值,not between不包括
select * from
table1 where time between time1 and time2
select a,b,c, from table1
where a not between 數值1 and 數值2
19.說明:in 的使用方法
select * from table1 where a [not] in
('值1','值2','值4','值6')
20.說明:兩張關聯表,刪除主表中已經在副表中沒有的信息
delete from table1 where not exists (
select * from table2 where table1.field1=table2.field1
)
21. 說明:復制表(只復制結構,源表名:a 新表名:b) (Access可用)
法一:select * into b from a
where 1<>1
法二:select top 0 * into b from a
22.說明:拷貝表(拷貝數據,源表名:a 目標表名:b) (Access可用)
insert into b(a, b, c)
select d,e,f from b;
23.說明:跨數據庫之間表的拷貝(具體數據使用絕對路徑) (Access可用)
insert into b(a, b, c)
select d,e,f from b in '具體數據庫' where 條件
例子:..from b in
"&Server.MapPath(".")&"/data.mdb" &" where..
24.創建數據庫
CREATE DATABASE database-name
25.說明:刪除數據庫
drop database dbname
26.說明:備份sql server
--- 創建
備份數據的 device
USE master
EXEC sp_addumpdevice disk, testBack,
c:/mssql7backup/MyNwind_1.dat
--- 開始備份
BACKUP DATABASE pubs TO testBack
27.說明:創建新表
create table tabname(col1 type1 [not null] [primary
key],col2 type2 [not null],..)
根據已有的表創建新表:
A:create table tab_new
like tab_old (使用舊表創建新表)
B:create table tab_new as select col1,col2…
from tab_old definition only
28.說明:
刪除新表:drop table tabname
29.說明:
增加一個列:Alter table tabname add column col
type
注:列增加后將不能刪除。DB2中列加上后數據類型也不能改變,唯一能改變的是增加varchar類型的長度。
30.說明:
添加主鍵:Alter table tabname add primary key(col)
說明:
刪除主鍵:Alter table tabname drop primary key(col)
31.說明:
創建索引:create [unique] index idxname on tabname(col….)
刪除索引:drop index idxname
注:索引是不可更改的,想更改必須刪除重新建。
32.說明:
創建視圖:create view viewname as select statement
刪除視圖:drop view
viewname
33.說明:幾個簡單的基本的sql語句
選擇:select * from table1 where 范圍
插入:insert into
table1(field1,field2) values(value1,value2)
刪除:delete from table1 where
范圍
更新:update table1 set field1=value1 where 條件
查找:select * from table1
where field1 like '%value1%' ---like的語法很精妙,查資料!
排序:select * from table1
order by field1,field2 [desc]
總數:select count * as totalcount from
table1
求和:select sum(field1) as sumvalue from table1
平均:select
avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from
table1
最小:select min(field1) as minvalue from table1
文章列表