第一篇:SQL語(yǔ)句學(xué)習(xí)總結(jié)
SQL 快速參考
?
? Previous PageNext Page
來(lái)自 W3School 的 SQL 快速參考??梢源蛴∷?,以備日常使用。SQL 語(yǔ)句
語(yǔ)句
AND / OR 語(yǔ)法 SELECT column_name(s)
FROM table_name
WHERE condition
AND|OR condition
ALTER TABLE(add column)ALTER TABLE table_name
ADD column_name datatype
ALTER TABLE(drop column)ALTER TABLE table_name
DROP COLUMN column_name
AS(alias for column)SELECT column_name AS column_alias
FROM table_name
AS(alias for table)SELECT column_name
FROM table_name AS table_alias
BETWEEN SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
CREATE DATABASE
CREATE INDEX CREATE DATABASE database_name CREATE INDEX index_name
ON table_name(column_name)
CREATE TABLE CREATE TABLE table_name
(column_name1 data_type,column_name2 data_type,.......)
CREATE UNIQUE INDEX CREATE UNIQUE INDEX index_name
ON table_name(column_name)
CREATE VIEW CREATE VIEW view_name AS SELECT column_name(s)
FROM table_name WHERE condition
DELETE FROM DELETE FROM table_name(Note: Deletes the entire table!)
or
DELETE FROM table_name
WHERE condition
DROP DATABASE DROP INDEX DROP TABLE GROUP BY
DROP DATABASE database_name DROP INDEX table_name.index_name
DROP TABLE table_name
SELECT column_name1,SUM(column_name2)
FROM table_name GROUP BY column_name1
HAVING SELECT column_name1,SUM(column_name2)
FROM table_name GROUP BY column_name1
HAVING SUM(column_name2)condition value
IN SELECT column_name(s)
FROM table_name WHERE column_name IN(value1,value2,..)
INSERT INTO INSERT INTO table_name VALUES(value1, value2,....)
or
INSERT INTO table_name(column_name1, column_name2,...)
VALUES(value1, value2,....)
LIKE SELECT column_name(s)
FROM table_name
WHERE column_name
LIKE pattern
ORDER BY
SELECT column_name(s)
FROM table_name
ORDER BY column_name [ASC|DESC]
SELECT
SELECT column_name(s)
FROM table_name
SELECT *
SELECT * FROM table_name
SELECT DISTINCT
SELECT DISTINCT column_name(s)
FROM table_name
SELECT INTO
(used to create backup copies of tables)
SELECT * INTO new_table_name FROM original_table_name
or
SELECT column_name(s)INTO new_table_name FROM original_table_name
TRUNCATE TABLE
(deletes only the data inside the table)
UPDATE
UPDATE table_name SET column_name=new_value [, column_name=new_value] WHERE column_name=some_value
WHERE
SELECT column_name(s)
FROM table_name WHERE condition
TRUNCATE TABLE table_name
? ?
Previous PageNext Page
我們已經(jīng)學(xué)習(xí)了 SQL,下一步學(xué)習(xí)什么呢?
? ?
Previous PageNext Page
SQL 概要
本教程已經(jīng)向您講解了用來(lái)訪問(wèn)和處理數(shù)據(jù)庫(kù)系統(tǒng)的標(biāo)準(zhǔn)計(jì)算機(jī)語(yǔ)言。
我們已經(jīng)學(xué)習(xí)了如何使用 SQL 在數(shù)據(jù)庫(kù)中執(zhí)行查詢(xún)、獲取數(shù)據(jù)、插入新的紀(jì)錄、刪除記錄以及更新記錄。SQL 是一種與數(shù)據(jù)庫(kù)程序協(xié)同工作的標(biāo)準(zhǔn)語(yǔ)言,這些數(shù)據(jù)庫(kù)程序包括 MS Access、DB2、Informix、MS SQL Server、Oracle、MySQL、Sybase 等等。
我們已經(jīng)學(xué)習(xí)了 SQL,下一步學(xué)習(xí)什么呢?
下一步應(yīng)該學(xué)習(xí)ADO。
ADO 是一種從網(wǎng)站訪問(wèn)數(shù)據(jù)庫(kù)中數(shù)據(jù)的編程接口。ADO 使用 SQL 來(lái)查詢(xún)數(shù)據(jù)庫(kù)中的數(shù)據(jù)。
如果您需要學(xué)習(xí)更多關(guān)于 ADO 的知識(shí),請(qǐng)?jiān)L問(wèn)我們的《ADO 教程》。
? ?
Previous PageNext Page
第二篇:sql語(yǔ)句學(xué)習(xí)
一、選擇題
1、SQL語(yǔ)言是()語(yǔ)言?!⊿QL特點(diǎn))(易)
A)層次數(shù)據(jù)庫(kù) B)網(wǎng)絡(luò)數(shù)據(jù)庫(kù) C)關(guān)系數(shù)據(jù)庫(kù)D)非數(shù)據(jù)庫(kù)
答案:C2、SQL語(yǔ)言具有兩種使用方式,分別稱(chēng)為交互式SQL和()。
——(SQL語(yǔ)言使用方式)(易)
A)提示式SQLB)多用戶(hù)SQLC)嵌入式SQLD)解釋式SQL
答案:C
3-4-5()包括數(shù)據(jù)庫(kù)模式定義和數(shù)據(jù)庫(kù)存儲(chǔ)結(jié)構(gòu)與存取方法定義。()實(shí)現(xiàn)對(duì)DB的操作,包括查詢(xún)、插入、刪除、修改數(shù)據(jù)庫(kù)中的數(shù)據(jù)。()用于數(shù)據(jù)保護(hù),包括數(shù)據(jù)的安全性,完整性,并發(fā)控制和恢復(fù)等。——(數(shù)據(jù)庫(kù)語(yǔ)言DDLDMLDCL)(中)
A)數(shù)據(jù)控制子語(yǔ)言 B)數(shù)據(jù)定義子語(yǔ)言 C)數(shù)據(jù)操縱子語(yǔ)言 D)數(shù)據(jù)庫(kù)語(yǔ)言
答案:B C A
6-7-8-9-
10、下列SQL語(yǔ)句中,實(shí)現(xiàn)數(shù)據(jù)檢索的語(yǔ)句是(),修改表結(jié)構(gòu)的是(),修改屬性值的是(),刪除表結(jié)構(gòu)的是(),刪除表記錄的是()。
——(DROP TABLE, ALTER TABLE,UPDATE, DELETE,SELECT 語(yǔ)句)(易)
A)SELECTB)DROPC)UPDATED)ALTERE)DELETE
答案:A D C B E
二、用關(guān)系代數(shù)表達(dá)式及SQL語(yǔ)句描述關(guān)系查詢(xún)
1、設(shè)有如下關(guān)系表R、S和T:——(易)R(BH,XM,XB,DWH)
S(DWH,DWM)
T(BH,XM,XB,DWH)
寫(xiě)出實(shí)現(xiàn)下列關(guān)系代數(shù)的SQL語(yǔ)句:
1)?DWH?'100'(R)σDWH=’100’(R)
2)?XM,XB(R)∏xM,XB(R)
3)?XM,DWH(?
4)R?S R∞S
5)?XM,XB,DWH(?
解:
1)SELECT * FROM R WHERE DWH=’100’;
2)SELECT XM,XB FROM R;
3)SELECT XM,DWH FROM R WHERE XB=’女’;
4)SELECT R.*,S.DWM FROM R, S WHERE R.DWH=S.DWH;
5)SELECT XM,XB,DWH FROM R,S WHERE R.DWH=S.DWH AND XB=’男’;XB?'男'XB?'女'(R))∏XM,DWH(σXB=’女’(R))(R?S))∏XM,XB,DWH(σXB=’男’(R∞S))
2、設(shè)有如下三個(gè)關(guān)系:——(易-易)
A(A#,ANAME,WQTY,CITY): A#:商店代號(hào);ANAME:商店名;WQTY:店員人數(shù)
B(B#,BNAME,PRICE):B#:商品號(hào);BNAME:商品名稱(chēng);
AB(A#,B#,QTY):QTY:商品數(shù)量
試用關(guān)系代數(shù)和SQL語(yǔ)言寫(xiě)出下列查詢(xún)。
1)找出店員人數(shù)不超過(guò)100人或者在長(zhǎng)沙市的所有商店的代號(hào)和商店名;
2)找出供應(yīng)書(shū)包的商店名;
解:
1)?A#,ANAME(?WQTY??100 ? CITY?'長(zhǎng)沙'(A))∏A#,ANAME(σWQTY<=100ⅤCITY=’長(zhǎng)沙’(A))
SELECT A#,ANAME FROM A WHERE WQTY<=100 OR CITY=’長(zhǎng)沙’;
2)?ANAME((?BNAME?'書(shū)包'(B))?AB?A)∏ANAME((σBNAME=’書(shū)包’(B))∞AB∞(A))
SELECT ANAME FROM A,B,AB
WHERE BNAME=’書(shū)包’ AND B.B#=AB.B# AND AB.A#=A.A#;
3.設(shè)有如下關(guān)系模式:
student(NO, NAME , SEX ,BIRTHDAY, CLASS)
teacher(NO,NAME,SEX,BIRTHDAY,PROF,DEPART)PROF為職稱(chēng),DEPART為系別
course(CNO, CNAME, TNO)
score(NO, CNO, DEGREE)DEGREE 為成績(jī)
寫(xiě)出實(shí)現(xiàn)以下各題功能的SQL語(yǔ)句:
(1)查詢(xún)至少有2名男生的班號(hào);——(難)
(2)查詢(xún)不姓“王”的同學(xué)記錄;——(易)
(3)查詢(xún)每個(gè)學(xué)生的姓名和年齡;——(難)
(4)查詢(xún)學(xué)生中最大和最小的birthday日期值;——(中)
(5)查詢(xún)學(xué)生表的全部記錄并按班號(hào)和年齡從大到小的順序;——(中)
(6)查詢(xún)男教師及其所上的課程;——(中)
(7)查詢(xún)最高分同學(xué)的學(xué)號(hào),課程號(hào)和成績(jī);——(中)
(8)查詢(xún)和“李軍”同性別并同班的所有同學(xué)的姓名;——(中)
(9)查詢(xún)選修“數(shù)據(jù)庫(kù)系統(tǒng)概論”課程的男同學(xué)的成績(jī)表;——(中)
(10)查詢(xún)所有未講課的教師的姓名和所在系別;——(難)
(11)查詢(xún)“計(jì)算機(jī)系”教師所教課程的成績(jī)表;——(難)
(12)查詢(xún)選修“3-105”課程的成績(jī)高于“109”號(hào)同學(xué)成績(jī)的所有同學(xué)的記錄;——(難)
(13)查詢(xún)最低分大于70,最高分小于90的學(xué)生的學(xué)號(hào);——(中)
(14)查詢(xún)成績(jī)?cè)?0到80之間的所有記錄;——(中)
(15)查詢(xún)成績(jī)比該課程平均成績(jī)低的同學(xué)的成績(jī)表;——(相關(guān)子查詢(xún))(難)
(16)查詢(xún)所有女教師和女同學(xué)的姓名、性別和生日;——(中)
(17)查詢(xún)“計(jì)算機(jī)系”和“無(wú)線(xiàn)電系”不同職稱(chēng)的教師的姓名和職稱(chēng);——(中)
解:(1)SELECT CLASS FROM student WHERE SEX=‘男’
GROUP BY CLASS HAVING COUNT(*)>=2;
(2)SELECT * FROM student WHERE NAME NOT LIKE ‘王%’;
(3)SELECT NAME,year(date())-year(birthday)as age FROM student;
(4)SELECT MAX(BIRTHDAY), MIN(BIRTHDAY)FROM student;
(5)SELECT * FROM student ORDER BY CLASS,BIRTHDAY DESC;
(6)SELECT x.name, y.cname FROM teacher x, course y WHERE x.no=y.tno and x.sex=’男’;
(7)SELECT * FROM score WHERE degree=(SELECT max(degree)FROM score);
(8)SELECT name FROM student WHERE sex=(SELECT sex FROM student WHEREname=’
李軍’)and class=(SELECT class FROM student WHERE name=’李軍’);
(9)SELECT * FROM score WHERE no IN(SELECT no FROM student WHERE sex=‘男’)and
cno=(SELECT cno FROM course WHERE cname=‘?dāng)?shù)據(jù)庫(kù)系統(tǒng)概論’);
(10)SELECT name, depart FROM teacher t WHERE NOT EXIST(SELECT * FROM course c
WHERE c.tno=t.no);
(11)SELECT * FROM score s, teacher t, course c WHERE t.depart=’計(jì)算機(jī)系’ and t.no=c.tno
and c.cno=score.cno;
(12)SELECT * FROM student s, score sc WHERE s.no=sc.no and cno=’3-105’ and
degree>(SELECT degree FROMsc WHERE no=’109’ and cno=’3-105’);
(13)SELECT no FROM score GROUP BY no HAVING min(degree)>70 and max(degree)<90;
(14)SELECT * FROM score WHERE degree BETWEEN 60 AND 80;
(15)SELECT * FROM score a WHERE degree <(SELECT avg(degree)FROM score b WHERE b.cno=a.cno group by b.cno);
(16)SELECT name, sex, birthday FROM teacher WHERE sex=‘女’UNION SELECT name, sex,birthday FROM student WHERE sex=‘女’;
(17)SELECT name, prof FROM teacher WHERE depart=’計(jì)算機(jī)系’ OR depart=’無(wú)線(xiàn)電系’
order by prof;
4、設(shè)有圖書(shū)登記表TS,具有屬性:BNO(圖書(shū)編號(hào)),BC(圖書(shū)類(lèi)別),BNA(書(shū)名),AU(著者),PUB(出版社)。按下列要求用SQL語(yǔ)言進(jìn)行設(shè)計(jì)。——(易)
1)按圖書(shū)館編號(hào)BNO建立TS表的索引ITS;
2)查詢(xún)按出版社統(tǒng)計(jì)其出版圖書(shū)總數(shù)。
3)刪除索引。
解:1)CREATE INDEX ITSON TS(BNO);
2)SELECT PUB,COUNT(BNO)FROM TS GROUP BY PUB;
3)DROP INDEXITS;
5、已知三個(gè)關(guān)系R、S和T——(中)
R(A,B,C)S(A,D,E)T(D,F)
試用SQL語(yǔ)句實(shí)現(xiàn)如下操作:
1)R、S和T三個(gè)關(guān)系按關(guān)聯(lián)屬性建立一個(gè)視圖R-S-T;
2)對(duì)視圖R-S-T按屬性A分組后,求屬性C和E的平均值。
解:1)CREATE VIEW R-S-T(A,B,C,D,E,F)AS
SELECT R.A , B, C ,S.D, E, F FROM R, S, T
WHERE R.A=S.A AND S.D=T.D;
2)SELECT AVG(C), AVG(E)FROM R-S-T GOUPY BY A;
6、設(shè)有學(xué)生表S(SNO, SN)(SNO為學(xué)生號(hào),SN為姓名)和學(xué)生選修課程表SC(SNO,CNO,CN,G)
(CNO為課程號(hào),CN為課程名,G為成績(jī)),試用SQL語(yǔ)言完成以下各題:——(易)
a)建立一個(gè)視圖V-SSC(SNO, SN, CNO, CN, G);
b)從視圖V-SSC上查詢(xún)平均成績(jī)?cè)?0分以上的SN, CN 和G。
解:
1)CREATE VIEW V-SSC(SNO , SN, CNO, CN, G)AS
SELECT S.SNO, SN, CNO, CN, GFROM S, SC WHERE S.SNO=SC.SNO
2)SELECT SN, CN, G FROM V-SSC GROUP BY SNO HAVING AVG(G)>907、設(shè)有關(guān)系模式: 其中SB表示供應(yīng)商,SN為供應(yīng)商號(hào),SNAME為供應(yīng)商名字,CITY
為供應(yīng)商所在城市; PB(PN, PNAME, COLOR, WEIGHT)其中PB表示零件,PN為零件代號(hào),PANME為零件名
字,COLOR為零件顏色,WEIGHT為零件重量; JB(JN, JNAME, CITY)其中JB表示工程,JN為工程編號(hào),JNAME為工程名字,CITY為工
程所在城市;
SPJB()其中SPJB表示供應(yīng)關(guān)系,QTY表示提供的零件數(shù)量。
寫(xiě)出實(shí)現(xiàn)以下各題功能的SQL語(yǔ)句:
(1)取出所有工程的全部細(xì)節(jié);——(易)
(2)取出所在城市為上海的所有工程的全部細(xì)節(jié);——(易)
(3)取出重量最輕的零件代號(hào);——(難)
(4)取出為工程J1提供零件的供應(yīng)商代號(hào);——(易)
(5)取出為工程J1提供零件P1的供應(yīng)商代號(hào);——(易)
(6)取出由供應(yīng)商S1提供零件的工程名稱(chēng);——(易)
(7)取出供應(yīng)商S1提供的零件的顏色;——(易)
(8)取出為工程J1或J2提供零件的供應(yīng)商代號(hào);——(中)
(9)取出為工程J1提供紅色零件的供應(yīng)商代號(hào);——(易)
(10)取出為所在城市為上海的工程提供零件的供應(yīng)商代號(hào);——(易)
(11)取出為所在城市為上海或北京的工程提供紅色零件的供應(yīng)商代號(hào);——(中)
(12)取出供應(yīng)商與工程所在城市相同的供應(yīng)商提供的零件代號(hào);——(中)
(13)取出上海的供應(yīng)商提供給上海的任一工程的零件的代號(hào);——(難)
(14)取出至少有一個(gè)和工程不在同一城市的供應(yīng)商提供零件的工程代號(hào);——(難)
(15)取出上海供應(yīng)商不提供任何零件的工程的代號(hào);——(難)
(16)取出這樣一些供應(yīng)商代號(hào),它們能夠提供至少一種由紅色零件的供應(yīng)商提供的零件;
——(難)
(17)取出由供應(yīng)商S1提供零件的工程的代號(hào);——(易)
(18)取出所有這樣的一些 市的工程提供零件;——(難) (19)取出所有這樣的三元組 市的工程提供指定的零件;——(難) (20)重復(fù)(19)題,但不檢索兩個(gè)CITY值相同的三元組。——(難) 解: (1)SELECT * FROM JB; (2)SELECT * FROM JB WHERE CITY=‘上?!? (3)SELECT PN FROM PB WHERE WEIGHT=(SELECT MIN(WEIGHT)FROM PB); (4)SELECT SN FORM SPJB WHERE JN=‘J1’; (5)SELECT SN FORM SPJB WHERE JN=‘J1’AND PN=‘P1’; (6)SELECT JNAME FROM JB,SPJB WHERE SN=‘S1’AND SPJB.JN=JB.JN; (7)SELECT DISTINCT COLOR FROM PB,SPJB WHERE SN=‘S1’AND SPJB.JN=JB.JN' (8)SELECT SN FROM SPJB WHERE JN IN {J1, J2}; 或者 SELECT SN FROM SPJB WHERE JN=’J1’ OR JN=’J2’; (9)SELECT SN FROM SPJB,PB WHERE COLOR=‘紅色’AND PB.PN=SPJB.PN AND JN=’J1’; (10)SELECT DISTINCT SN FROM SPJB,JB WHERE CITY=‘上海’AND JB.JN=SPJB.JN; (11)SELECT SN FROM PB, JB, SPJB WHERE COLOR=‘紅色’AND CITY IN {‘上?!?,‘北京’} AND PB.PN=SPJB.PN AND JB.JN=SPJB.JN; (12)SELECT PN FROM SB, JB , SPJB WEHRE SB.CITY=JB.CITY AND SB.SN=SPJB.SN AND JB.JN=SPJB.JN; (13)SELECT PN FROM SB, SPJB, JB WEHRE SB.CITY=‘上?!疉ND JB.CITY=‘上?!?/p> AND SB.SN=SPJB.SN AND JB.JN=SPJB.JN; (14)SELECT JN FROM JB WHERE EXISTS(SELECT * FROM SB WHERE EXISTS(SELECT * FROM SPJB WHERE SB.CITY<>JB.CITY AND SPJB.SN= SB.SN AND SPJB.JN= JB.JN)); (15)SELECT DISTINCT JN FROM SPJB WHERE JN NOT IN(SELECT DISTINCT SPJB.JN FROM SB,SPJB WHERE SB.SN=SPJB.SN AND SB.CITY=‘上海’); (16)SELECT DISTINCT SPJB.SN FROM SB,SPJB WHERE SPJB.PN IN(SELECT SPJB.PN FROM SPJB,PB WHEREPB.PN=SPJB.PN AND PB.COLOR=‘紅色’; (17)SELECTJN FROM SPJB WHERE SN=’S1’; (18)SELECT DINSINCT SB.CITY , JB.CITY FROM SB, JB, SPJB WHERE SB.SN=SPJB.SN AND JB.JN=SPJB.SN; (19)SELECT SB.CITY, SPJB.PN, JB.CITY FROM SB,JB,SPJB WHERE SB.SN=SPJB.SN AND JB.JN=SPJB.JN; (20)SELECT DISTINCT SB.CITY, SPJB.PN, JB.CITY FROM SB,JB,SPJB WHERE SB.SN=SPJB.SN AND JB.JN=SPJB.JN AND SB.CITY<>JB.CITY; 8、設(shè)有如下關(guān)系模式:——(中) 圖書(shū)關(guān)系B(圖書(shū)編號(hào)B#,圖書(shū)名T,作者A,出版社P); 讀者關(guān)系R(借書(shū)證號(hào)C#,讀者名N,讀者地址D); 借閱關(guān)系L(C#,B#,借書(shū)日期E,還書(shū)標(biāo)志BZ); BZ=‘1’表示已還; BZ=‘0’ 表示未還; 寫(xiě)出實(shí)現(xiàn)以下各題功能的SQL語(yǔ)句: (1)查詢(xún)“工業(yè)出版社”出版的圖書(shū)名 (2)將書(shū)號(hào)為B5的圖書(shū)的出版社改為“工業(yè)出版社” (3)查詢(xún)99年12月31日以前借書(shū)未還的讀者名與書(shū)名 (4)查所借的書(shū)包含借書(shū)證號(hào)為C1的讀者借出未還的所有書(shū)的讀者名與借書(shū)證號(hào)。 (5)刪去“工業(yè)出版社”出版的所有圖書(shū)及相關(guān)的借閱信息。 解: (1)SelectTfromBWhereP = ’工業(yè)出版社’ (2)UpdateBSetP=’工業(yè)出版社’ WhereB# = ’B5’ (3)SelectN , TFrom B, R , L WhereE <’99/12/31’ AND BZ=’0’ AND L.C#=R.C# AND L.B#=B.B# (4)select N,C# from R where not exists (select * from LL1 where L1.C#=’c1’ and BZ=‘0’ andnot exists (select * from L L2 where L2.c#=R.c# and L2.B#=L1.B#)) (6)Delete from LWhere B#IN(Select B#From B Where P=’工業(yè)出版社’); Delete from B Where P=’工業(yè)出版社’; sql語(yǔ)句學(xué)習(xí) ? 數(shù)據(jù)定義語(yǔ)言(DDL): 1)創(chuàng)建數(shù)據(jù)庫(kù)(create):create database database-name; eg.create database test; 2)刪除數(shù)據(jù)庫(kù):drop database dbname; eg.drop database test; 3)創(chuàng)建新表:create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..); eg.根據(jù)已有的表創(chuàng)建新表的例子:create table tab_new like tab_old;create table tab_new as select col1,col2… from tab_old definition only; 4)刪除表:drop table tabname; 5)增加列:alter table tabname add column col type; 6)添加主鍵: alter table tabname add primary key(col); 7)刪除主鍵:alter table tabname drop primary key(col); 8)創(chuàng)建索引:create [unique] index idxname on tabname(col….); 9)刪除索引:drop index idxname;注:索引是不可更改的,想更改必須刪除重新建; 10)創(chuàng)建視圖:create view viewname as select statement; 2.數(shù)據(jù)操縱語(yǔ)言(DML) 1)查詢(xún)語(yǔ)句(select) eg1.select * from table1 where field1 like '%value1%'; eg2.select * from table1 order by field1,field2 [desc]; eg3.select count as totalcount from table1; eg4.select sum(field1)as sumvalue from table1; eg5.select avg(field1)as avgvalue from table1; eg6.select max(field1)as maxvalue from table1; eg7.select min(field1)as minvalue from table1; eg8.select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c;(注:此為左外連接,結(jié)果集中包括連接表的匹配行,也包括左連接表的所有行) 2)插入語(yǔ)句(insert) insert into table1(field1,field2)values(value1,value2); 3)刪除語(yǔ)句(delete) delete from table1 where 范圍; 4)更新語(yǔ)句(update) update table1 set field1=value1 where 范圍; 3.數(shù)據(jù)控制語(yǔ)言(DCL) 1)授予權(quán)限語(yǔ)句(GRANT) GRANT privileges(columns)ON what TO user IDENTIFIED BY “password” WITH GRANT OPTION; 其中:privileges可為如下限定符:ALTER 修改表和索引、CREATE(創(chuàng)建數(shù)據(jù)庫(kù)和表)、DELETE(刪除表中已有的記錄)、DROP(刪除數(shù)據(jù)庫(kù)和表)、INDEX(創(chuàng)建或刪除索引)、INSERT(向表中插入新行)、REFERENCE(未用)、SELECT(檢索表中的記錄)、UPDATE(修改現(xiàn)存表記錄)、FILE(讀或?qū)懛?wù)器上的文件)、PROCESS(查看服務(wù)器中執(zhí)行的線(xiàn)程信息或殺死線(xiàn)程)、RELOAD(重載授權(quán)表或清空日志、主機(jī)緩存或表緩存)、SHUTDOWN(關(guān)閉服務(wù)器)、ALL 所 有;ALL PRIVILEGES同義詞、USAGE(特殊的“無(wú)權(quán)限”權(quán)限) columns:權(quán)限運(yùn)用的列,它是可選的,并且你只能設(shè)置列特定的權(quán)限。如果命令有多于一個(gè)列,應(yīng)該用逗號(hào)分開(kāi)它們; what:權(quán)限運(yùn)用的級(jí)別。權(quán)限可以是全局的(適用于所有數(shù)據(jù)庫(kù)和所有表)、特定數(shù)據(jù)庫(kù)(適用于一個(gè)數(shù)據(jù)庫(kù)中的所有表)或特定表的。可以通過(guò)指定一個(gè)columns字句是權(quán)限是列特定的。 user :權(quán)限授予的用戶(hù),它由一個(gè)用戶(hù)名和主機(jī)名組成。MySQL中的一個(gè)用戶(hù)名就?悄懔臃衿魘敝付ǖ撓沒(méi)?該名字不必與你的Unix登錄名或Windows名聯(lián)系起來(lái)。缺省地,如果你不明確指定一個(gè)名字,客戶(hù)程序?qū)⑹褂?/p> 你的登錄名作為MySQL用戶(hù)名。這只是一個(gè)約定。你可以在授權(quán)表中將該名字改為nobody,然后以nobody連接 執(zhí)行需要超級(jí)用戶(hù)權(quán)限的操作。 password:賦予用戶(hù)的口令,它是可選的。如果你對(duì)新用戶(hù)沒(méi)有指定IDENTIFIED BY子句,該用戶(hù)不賦給口令(不安全)。對(duì)現(xiàn)有用戶(hù),任何你指定的口令將代替老口令。如果你不指定口令,老口令保持不變,當(dāng)你用IDENTIFIED BY 時(shí),口令字符串用改用口令的字面含義,GRANT將為你編碼口令,不要象你用SET PASSWORD 那樣使用password() 函數(shù)。 WITH GRANT OPTION子句是可選的。如果你包含它,用戶(hù)可以授予權(quán)限通過(guò)GRANT語(yǔ)句授權(quán)給其它用戶(hù)。你可以用該子句給與其它用戶(hù)授權(quán)的能力。 用戶(hù)名、口令、數(shù)據(jù)庫(kù)和表名在授權(quán)表記錄中是大小寫(xiě)敏感的,主機(jī)名和列名不是。 eg1.創(chuàng)建一個(gè)超級(jí)用戶(hù)test1 grant all privilleges on *.* to test1@localhost identified by '123456' with grant option;eg2.創(chuàng)建一個(gè)只能查詢(xún)的用戶(hù) test2 mysql> grant select on *.* to test2@localhost identified by '9876543'; 2)撤權(quán)并刪除用戶(hù)(revoke) 要取消一個(gè)用戶(hù)的權(quán)限,使用REVOKE語(yǔ)句。REVOKE的語(yǔ)法非常類(lèi)似于GRANT語(yǔ)句,除了TO用FROM取代并且沒(méi)有INDETIFED BY和WITH GRANT OPTION子句: revoke privileges(columns)ON what FROM user user部分必須匹配原來(lái)GRANT語(yǔ)句的你想撤權(quán)的用戶(hù)的user部分。privileges部分不需匹配,你可以用GRANT 語(yǔ)句授權(quán),然后用REVOKE語(yǔ)句只撤銷(xiāo)部分權(quán)限。REVOKE語(yǔ)句只刪除權(quán)限,而不刪除用戶(hù)。即使你撤銷(xiāo)了所有 權(quán)限,在user表中的用戶(hù)記錄依然保留,這意味著用戶(hù)仍然可以連接服務(wù)器。要完全刪除一個(gè)用戶(hù),你必須 用一條DELETE語(yǔ)句明確從user表中刪除用戶(hù)記錄: #mysql-u root mysql DELETE FROM user WHERE User=“user_name” and Host=“host_name”; FLUSH PRIVILEGES; DELETE語(yǔ)句刪除用戶(hù)記錄,而FLUSH語(yǔ)句告訴服務(wù)器重載授權(quán)表。(當(dāng)你使用GRANT和REVOKE語(yǔ)句時(shí),表自動(dòng)重載,而你直接修改授權(quán)表時(shí)不是。) eg.刪除用戶(hù)test1 revoke all on *.* from; use mysql; delete from user where user='test' and host='localhost';flush privileges; 3)提交語(yǔ)句(commit) 4)回滾語(yǔ)句(rollback) SQL語(yǔ)句經(jīng)典總結(jié) 一、入門(mén) 1、說(shuō)明:創(chuàng)建數(shù)據(jù)庫(kù) CREATE DATABASE database-name2、說(shuō)明:刪除數(shù)據(jù)庫(kù) drop database dbname 3、說(shuō)明:備份sql server---創(chuàng)建 備份數(shù)據(jù)的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_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],..)根據(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、說(shuō)明:刪除新表 drop table tabname 6、說(shuō)明:增加一個(gè)列 Alter table tabname add column col type 注:列增加后將不能刪除。DB2中列加上后數(shù)據(jù)類(lèi)型也不能改變,唯一能改變的是增加varchar類(lèi)型的長(zhǎ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] 總數(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 最?。簊elect min(field1)as minvalue from table1 11、說(shuō)明:幾個(gè)高級(jí)查詢(xún)運(yùn)算詞 A: UNION 運(yùn)算符 UNION 運(yùn)算符通過(guò)組合其他兩個(gè)結(jié)果表(例如 TABLE1 和 TABLE2)并消去表中任何重復(fù)行而派生出一個(gè)結(jié)果表。當(dāng) ALL 隨 UNION 一起使用時(shí)(即 UNION ALL),不消除重復(fù)行。兩種情況下,派生表的每一行不是來(lái)自 TABLE1 就是來(lái)自 TABLE2。B: EXCEPT 運(yùn)算符 EXCEPT 運(yùn)算符通過(guò)包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重復(fù)行而派生出一個(gè)結(jié)果表。當(dāng) ALL 隨 EXCEPT 一起使用時(shí)(EXCEPT ALL),不消除重復(fù)行。 C: INTERSECT 運(yùn)算符 INTERSECT 運(yùn)算符通過(guò)只包括 TABLE1 和 TABLE2 中都有的行并消除所有重復(fù)行而派生出一個(gè)結(jié)果表。當(dāng) ALL 隨 INTERSECT 一起使用時(shí)(INTERSECT ALL),不消除重復(fù)行。注:使用運(yùn)算詞的幾個(gè)查詢(xún)結(jié)果行必須是一致的。 12、說(shuō)明:使用外連接 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/cross(outer)join: 全外連接:不僅包括符號(hào)連接表的匹配行,還包括兩個(gè)連接表中的所有記錄。 12、分組:Group by: 一張表,一旦分組 完成后,查詢(xún)后只能得到組相關(guān)的信息。 組相關(guān)的信息:(統(tǒng)計(jì)信息)count,sum,max,min,avg 分組的標(biāo)準(zhǔn)) 在SQLServer中分組時(shí):不能以text,ntext,image類(lèi)型的字段作為分組依據(jù) 在selecte統(tǒng)計(jì)函數(shù)中的字段,不能和普通的字段放在一起; 13、對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作: 分離數(shù)據(jù)庫(kù): sp_detach_db;附加數(shù)據(jù)庫(kù):sp_attach_db 后接表明,附加需要完整的路徑名 14.如何修改數(shù)據(jù)庫(kù)的名稱(chēng): sp_renamedb 'old_name', 'new_name' 二、提升 1、說(shuō)明:復(fù)制表(只復(fù)制結(jié)構(gòu),源表名:a 新表名:b)(Access可用)法一:select * into b from a where 1<>1(僅用于SQlServer)法二:select top 0 * into b from a 2、說(shuō)明:拷貝表(拷貝數(shù)據(jù),源表名:a 目標(biāo)表名:b)(Access可用)insert into b(a, b, c)select d,e,f from b; 3、說(shuō)明:跨數(shù)據(jù)庫(kù)之間表的拷貝(具體數(shù)據(jù)使用絕對(duì)路徑)(Access可用)insert into b(a, b, c)select d,e,f from b in ‘具體數(shù)據(jù)庫(kù)’ where 條件 例子:..from b in '“&Server.MapPath(”.“)&”data.mdb“ &”' where..2 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ō)明:顯示文章、提交人和最后回復(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、說(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ù)據(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、說(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ǔ)句搞定數(shù)據(jù)庫(kù)分頁(yè) select top 10 b.* from(select top 20 主鍵字段,排序字段 from 表名 order by 排序字段 desc)a,表名 b where b.主鍵字段 = a.主鍵字段 order by a.排序字段 具體實(shí)現(xiàn): 關(guān)于數(shù)據(jù)庫(kù)分頁(yè): declare @start int,@end int @sql nvarchar(600)set @sql=’select top’+str(@end-@start+1)+’+from top’+str(@str-1)+’Rid from T where Rid>-1)’ exec sp_executesql @sql 注意:在top后不能直接跟一個(gè)變量,所以在實(shí)際應(yīng)用中只有這樣的進(jìn)行特殊的處理。Rid為一個(gè)標(biāo)識(shí)列,如果top后還有具體的字段,這樣做是非常有好處的。因?yàn)檫@樣可以避免 top的字段如果是邏輯索引的,查詢(xún)的結(jié)果后實(shí)際表中的不一致(邏輯索引中的數(shù)據(jù)有可能和數(shù)據(jù)表中的不一致,而查詢(xún)時(shí)如果處在索引則首先查詢(xún)索引) T where rid not in(select 14、說(shuō)明:前10條記錄 select top 10 * form table1 where 范圍 15、說(shuō)明:選擇在每一組b值相同的數(shù)據(jù)中對(duì)應(yīng)的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 中的行并消除所有重復(fù)行而派生出一個(gè)結(jié)果表 (select a from tableA)except(select a from tableB)except(select a from tableC) 17、說(shuō)明:隨機(jī)取出10條數(shù)據(jù) select top 10 * from tablename order by newid() 18、說(shuō)明:隨機(jī)選擇記錄 select newid() 19、說(shuō)明:刪除重復(fù)記錄 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 評(píng)價(jià): 這種操作牽連大量的數(shù)據(jù)的移動(dòng),這種做法不適合大容量但數(shù)據(jù)操作 3),例如:在一個(gè)外部表中導(dǎo)入數(shù)據(jù),由于某些原因第一次只導(dǎo)入了一部分,但很難判斷具體位置,這樣只有在下一次全部導(dǎo)入,這樣也就產(chǎn)生好多重復(fù)的字段,怎樣刪除重復(fù)字段 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ō)明:列出數(shù)據(jù)庫(kù)里所有的表名 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í)現(xiàn)多重選擇,類(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 顯示結(jié)果: type vender pcs 電腦 A 1 電腦 A 1 光盤(pán) B 2 光盤(pán) A 2 手機(jī) B 3 手機(jī) 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ě)成 錯(cuò)誤!未找到目錄項(xiàng)。 set @strSQL = 'select count(*)as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere 2、收縮數(shù)據(jù)庫(kù)--重建索引 DBCC REINDEX DBCC INDEXDEFRAG--收縮數(shù)據(jù)和日志 DBCC SHRINKDB DBCC SHRINKFILE 3、壓縮數(shù)據(jù)庫(kù) dbcc shrinkdatabase(dbname) 4、轉(zhuǎn)移數(shù)據(jù)庫(kù)給新用戶(hù)以已存在用戶(hù)權(quán)限 exec sp_change_users_login 'update_one','newname','oldname' go 5、檢查備份集 RESTORE VERIFYONLY from disk='E:dvbbs.bak' 6、修復(fù)數(shù)據(jù)庫(kù) 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--要操作的數(shù)據(jù)庫(kù)名 SELECT @LogicalFileName = 'tablename_log',--日志文件名 @MaxMinutes = 10,--Limit on time allowed to wrap log.@NewSize = 1--你想設(shè)定的日志文件的大小(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、存儲(chǔ)更改全部表 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ě)入數(shù)據(jù) declare @i int set @i=1 while @i<30 begin insert into test(userid)values(@i)set @i=@i+1 end 案例: 有如下表,要求就裱中所有沒(méi)有及格的成績(jī),在每次增長(zhǎng)0.1的基礎(chǔ)上,使他們剛好及格: 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 數(shù)據(jù)開(kāi)發(fā)-經(jīng)典 1.按姓氏筆畫(huà)排序: Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as //從少到多2.數(shù)據(jù)庫(kù)加密: 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)分區(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.記錄搜索: 開(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到結(jié)尾記錄 Select Top N * From 表 Order by ID Desc 案例 例如1:一張表有一萬(wàn)多條記錄,表的第一個(gè)字段 RecID 是自增長(zhǎ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則在數(shù)據(jù)表中查找,這樣由于索引中的順序有可能和數(shù)據(jù)表中的不一致,這樣就導(dǎo)致查詢(xún)到的不是本來(lái)的欲得到的數(shù)據(jù)。解決方案 1,用order by select top 30 recid from A order by ricid 如果該字段不是自增長(zhǎng),就會(huì)出現(xiàn)問(wèn)題 2,在那個(gè)子查詢(xún)中也加條件:select top 30 recid from A where recid>-1 例2:查詢(xún)表中的最后以條記錄,并不知道這個(gè)表共有多少數(shù)據(jù),以及表結(jié)構(gòu)。 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:獲取當(dāng)前數(shù)據(jù)庫(kù)中的所有用戶(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)的視圖、存儲(chǔ)過(guò)程、函數(shù) select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%' 12:查看當(dāng)前數(shù)據(jù)庫(kù)中所有存儲(chǔ)過(guò)程 select name as 存儲(chǔ)過(guò)程名稱(chēng) from sysobjects where xtype='P' 13:查詢(xún)用戶(hù)創(chuàng)建的所有數(shù)據(jù)庫(kù) 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è)表的字段和數(shù)據(jù)類(lèi)型 select column_name,data_type from information_schema.columns where table_name = '表名' 15:不同服務(wù)器數(shù)據(jù)庫(kù)之間的數(shù)據(jù)操作--創(chuàng)建鏈接服務(wù)器 exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '遠(yuǎn)程服務(wù)器名或ip地址 ' exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用戶(hù)名 ', '密碼 '--查詢(xún)示例 select * from ITSV.數(shù)據(jù)庫(kù)名.dbo.表名--導(dǎo)入示例 select * into 表 from ITSV.數(shù)據(jù)庫(kù)名.dbo.表名--以后不再使用時(shí)刪除鏈接服務(wù)器 exec sp_dropserver 'ITSV ', 'droplogins ' --連接遠(yuǎn)程/局域網(wǎng)數(shù)據(jù)(openrowset/openquery/opendatasource)-- 1、openrowset--查詢(xún)示例 select * from openrowset('SQLOLEDB ', 'sql服務(wù)器名 ';'用戶(hù)名 ';'密碼 ',數(shù)據(jù)庫(kù)名.dbo.表名) --生成本地表 select * into 表 from openrowset('SQLOLEDB ', 'sql服務(wù)器名 ';'用戶(hù)名 ';'密碼 ',數(shù)據(jù)庫(kù)名.dbo.表名) --把本地表導(dǎo)入遠(yuǎn)程表 insert openrowset('SQLOLEDB ', 'sql服務(wù)器名 ';'用戶(hù)名 ';'密碼 ',數(shù)據(jù)庫(kù)名.dbo.表名)select *from 本地表--更新本地表 update b set b.列A=a.列A from openrowset('SQLOLEDB ', 'sql服務(wù)器名 ';'用戶(hù)名 ';'密碼 ',數(shù)據(jù)庫(kù)名.dbo.表名)as a inner join 本地表 b on a.column1=b.column1--openquery用法需要?jiǎng)?chuàng)建一個(gè)連接--首先創(chuàng)建一個(gè)連接創(chuàng)建鏈接服務(wù)器 exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '遠(yuǎn)程服務(wù)器名或ip地址 '--查詢(xún) select * FROM openquery(ITSV, 'SELECT * FROM 數(shù)據(jù)庫(kù).dbo.表名 ')--把本地表導(dǎo)入遠(yuǎn)程表 insert openquery(ITSV, 'SELECT * FROM 數(shù)據(jù)庫(kù).dbo.表名 ')select * from 本地表--更新本地表 update b set b.列B=a.列B FROM openquery(ITSV, 'SELECT * FROM 數(shù)據(jù)庫(kù).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--把本地表導(dǎo)入遠(yuǎn)程表 insert opendatasource('SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陸名;Password=密碼 ').數(shù)據(jù)庫(kù).dbo.表名 select * from 本地表 SQL Server基本函數(shù) SQL Server基本函數(shù) 1.字符串函數(shù) 長(zhǎng)度與分析用 1,datalength(Char_expr)返回字符串包含字符數(shù),但不包含后面的空格 2,substring(expression,start,length)取子串,字符串的下標(biāo)是從“1”,start為起始位置,length為字符串長(zhǎng)度,實(shí)際應(yīng)用中以len(expression)取得其長(zhǎ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 自定義數(shù)據(jù)類(lèi)型 例如:EXEC sp_addtype birthday, datetime, 'NULL' 6,set nocount {on|off} 使返回的結(jié)果中不包含有關(guān)受 Transact-SQL 語(yǔ)句影響的行數(shù)的信息。如果存儲(chǔ)過(guò)程中包含的一些語(yǔ)句并不返回許多實(shí)際的數(shù)據(jù),則該設(shè)置由于大量減少了網(wǎng)絡(luò)流量,因此可顯著提高性能。SET NOCOUNT 設(shè)置是在執(zhí)行或運(yùn)行時(shí)設(shè)置,而不是在分析時(shí)設(shè)置。 SET NOCOUNT 為 ON 時(shí),不返回計(jì)數(shù)(表示受 Transact-SQL 語(yǔ)句影響的行數(shù))。SET NOCOUNT 為 OFF 時(shí),返回計(jì)數(shù) 常識(shí) 在SQL查詢(xún)中:from后最多可以跟多少?gòu)埍砘蛞晥D:256 在SQL語(yǔ)句中出現(xiàn) Order by,查詢(xún)時(shí),先排序,后取 在SQL中,一個(gè)字段的最大容量是8000,而對(duì)于nvarchar(4000),由于nvarchar是Unicode碼。 SQLServer2000同步復(fù)制技術(shù)實(shí)現(xiàn)步驟 一、預(yù)備工作 1.發(fā)布服務(wù)器,訂閱服務(wù)器都創(chuàng)建一個(gè)同名的windows用戶(hù),并設(shè)置相同的密碼,做為發(fā)布快照文件夾的有效訪問(wèn)用戶(hù)--管理工具--計(jì)算機(jī)管理--用戶(hù)和組--右鍵用戶(hù) --新建用戶(hù) --建立一個(gè)隸屬于administrator組的登陸windows的用戶(hù)(SynUser)2.在發(fā)布服務(wù)器上,新建一個(gè)共享目錄,做為發(fā)布的快照文件的存放目錄,操作: 我的電腦--D: 新建一個(gè)目錄,名為: PUB--右鍵這個(gè)新建的目錄--屬性--共享 --選擇“共享該文件夾”--通過(guò)“權(quán)限”按紐來(lái)設(shè)置具體的用戶(hù)權(quán)限,保證第一步中創(chuàng)建的用戶(hù)(SynUser)具有對(duì)該文件夾的所有權(quán)限 --確定 3.設(shè)置SQL代理(SQLSERVERAGENT)服務(wù)的啟動(dòng)用戶(hù)(發(fā)布/訂閱服務(wù)器均做此設(shè)置)開(kāi)始--程序--管理工具--服務(wù)--右鍵SQLSERVERAGENT--屬性--登陸--選擇“此賬戶(hù)”--輸入或者選擇第一步中創(chuàng)建的windows登錄用戶(hù)名(SynUser)--“密碼”中輸入該用戶(hù)的密碼 4.設(shè)置SQL Server身份驗(yàn)證模式,解決連接時(shí)的權(quán)限問(wèn)題(發(fā)布/訂閱服務(wù)器均做此設(shè)置)企業(yè)管理器 --右鍵SQL實(shí)例--屬性 --安全性--身份驗(yàn)證 --選擇“SQL Server 和 Windows” --確定 5.在發(fā)布服務(wù)器和訂閱服務(wù)器上互相注冊(cè) 企業(yè)管理器 --右鍵SQL Server組 --新建SQL Server注冊(cè)...--下一步--可用的服務(wù)器中,輸入你要注冊(cè)的遠(yuǎn)程服務(wù)器名--添加--下一步--連接使用,選擇第二個(gè)“SQL Server身份驗(yàn)證”--下一步--輸入用戶(hù)名和密碼(SynUser) --下一步--選擇SQL Server組,也可以創(chuàng)建一個(gè)新組--下一步--完成 6.對(duì)于只能用IP,不能用計(jì)算機(jī)名的,為其注冊(cè)服務(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ò)庫(kù)選擇“tcp/ip”--服務(wù)器別名輸入SQL服務(wù)器名 --連接參數(shù)--服務(wù)器名稱(chēng)中輸入SQL服務(wù)器ip地址 --如果你修改了SQL的端口,取消選擇“動(dòng)態(tài)決定端口”,并輸入對(duì)應(yīng)的端口號(hào) 二、正式配置 1、配置發(fā)布服務(wù)器 打開(kāi)企業(yè)管理器,在發(fā)布服務(wù)器(B、C、D)上執(zhí)行以下步驟:(1)從[工具]下拉菜單的[復(fù)制]子菜單中選擇[配置發(fā)布、訂閱服務(wù)器和分發(fā)]出現(xiàn)配置發(fā)布和分發(fā)向?qū)?2)[下一步] 選擇分發(fā)服務(wù)器 可以選擇把發(fā)布服務(wù)器自己作為分發(fā)服務(wù)器或者其他sql的服務(wù)器(選擇自己) (3)[下一步] 設(shè)置快照文件夾 采用默認(rèn)servernamePub(4)[下一步] 自定義配置 可以選擇:是,讓我設(shè)置分發(fā)數(shù)據(jù)庫(kù)屬性啟用發(fā)布服務(wù)器或設(shè)置發(fā)布設(shè)置 否,使用下列默認(rèn)設(shè)置(推薦) (5)[下一步] 設(shè)置分發(fā)數(shù)據(jù)庫(kù)名稱(chēng)和位置 采用默認(rèn)值(6)[下一步] 啟用發(fā)布服務(wù)器 選擇作為發(fā)布的服務(wù)器(7)[下一步] 選擇需要發(fā)布的數(shù)據(jù)庫(kù)和發(fā)布類(lèi)型(8)[下一步] 選擇注冊(cè)訂閱服務(wù)器(9)[下一步] 完成配置 2、創(chuàng)建出版物 發(fā)布服務(wù)器B、C、D上 (1)從[工具]菜單的[復(fù)制]子菜單中選擇[創(chuàng)建和管理發(fā)布]命令(2)選擇要?jiǎng)?chuàng)建出版物的數(shù)據(jù)庫(kù),然后單擊[創(chuàng)建發(fā)布](3)在[創(chuàng)建發(fā)布向?qū)的提示對(duì)話(huà)框中單擊[下一步]系統(tǒng)就會(huì)彈出一個(gè)對(duì)話(huà)框。對(duì)話(huà)框上的內(nèi)容是復(fù)制的三個(gè)類(lèi)型。我們現(xiàn)在選第一個(gè)也就是默認(rèn)的快照發(fā)布(其他兩個(gè)大家可以去看看幫助)(4)單擊[下一步]系統(tǒng)要求指定可以訂閱該發(fā)布的數(shù)據(jù)庫(kù)服務(wù)器類(lèi)型, SQLSERVER允許在不同的數(shù)據(jù)庫(kù)如 orACLE或ACCESS之間進(jìn)行數(shù)據(jù)復(fù)制。但是在這里我們選擇運(yùn)行“SQL SERVER 2000”的數(shù)據(jù)庫(kù)服務(wù)器 (5)單擊[下一步]系統(tǒng)就彈出一個(gè)定義文章的對(duì)話(huà)框也就是選擇要出版的表 注意: 如果前面選擇了事務(wù)發(fā)布 則再這一步中只能選擇帶有主鍵的表(6)選擇發(fā)布名稱(chēng)和描述 (7)自定義發(fā)布屬性 向?qū)峁┑倪x擇: 是 我將自定義數(shù)據(jù)篩選,啟用匿名訂閱和或其他自定義屬性 否 根據(jù)指定方式創(chuàng)建發(fā)布(建議采用自定義的方式)(8)[下一步] 選擇篩選發(fā)布的方式 (9)[下一步] 可以選擇是否允許匿名訂閱 1)如果選擇署名訂閱,則需要在發(fā)布服務(wù)器上添加訂閱服務(wù)器 方法: [工具]->[復(fù)制]->[配置發(fā)布、訂閱服務(wù)器和分發(fā)的屬性]->[訂閱服務(wù)器] 中添加 否則在訂閱服務(wù)器上請(qǐng)求訂閱時(shí)會(huì)出現(xiàn)的提示:改發(fā)布不允許匿名訂閱 如果仍然需要匿名訂閱則用以下解決辦法 [企業(yè)管理器]->[復(fù)制]->[發(fā)布內(nèi)容]->[屬性]->[訂閱選項(xiàng)] 選擇允許匿名請(qǐng)求訂閱 2)如果選擇匿名訂閱,則配置訂閱服務(wù)器時(shí)不會(huì)出現(xiàn)以上提示(10)[下一步] 設(shè)置快照 代理程序調(diào)度(11)[下一步] 完成配置 當(dāng)完成出版物的創(chuàng)建后創(chuàng)建出版物的數(shù)據(jù)庫(kù)也就變成了一個(gè)共享數(shù)據(jù)庫(kù) 有數(shù)據(jù) srv1.庫(kù)名..author有字段:id,name,phone, srv2.庫(kù)名..author有字段:id,name,telphone,adress 要求: srv1.庫(kù)名..author增加記錄則srv1.庫(kù)名..author記錄增加 srv1.庫(kù)名..author的phone字段更新,則srv1.庫(kù)名..author對(duì)應(yīng)字段telphone更新--*/ --大致的處理步驟 --1.在 srv1 上創(chuàng)建連接服務(wù)器,以便在 srv1 中操作 srv2,實(shí)現(xiàn)同步 exec sp_addlinkedserver 'srv2','','SQLOLEDB','srv2的sql實(shí)例名或ip' exec sp_addlinkedsrvlogin 'srv2','false',null,'用戶(hù)名','密碼' go--2.在 srv1 和 srv2 這兩臺(tái)電腦中,啟動(dòng) msdtc(分布式事務(wù)處理服務(wù)),并且設(shè)置為自動(dòng)啟動(dòng) 。我的電腦--控制面板--管理工具--服務(wù)--右鍵 Distributed Transaction Coordinator--屬性--啟動(dòng)--并將啟動(dòng)類(lèi)型設(shè)置為自動(dòng)啟動(dòng) go --然后創(chuàng)建一個(gè)作業(yè)定時(shí)調(diào)用上面的同步處理存儲(chǔ)過(guò)程就行了 企業(yè)管理器--管理 --SQL Server代理--右鍵作業(yè)--新建作業(yè) --“常規(guī)”項(xiàng)中輸入作業(yè)名稱(chēng)--“步驟”項(xiàng) --新建 --“步驟名”中輸入步驟名 --“類(lèi)型”中選擇“Transact-SQL 腳本(TSQL)”--“數(shù)據(jù)庫(kù)”選擇執(zhí)行命令的數(shù)據(jù)庫(kù) --“命令”中輸入要執(zhí)行的語(yǔ)句: exec p_process--確定--“調(diào)度”項(xiàng)--新建調(diào)度 --“名稱(chēng)”中輸入調(diào)度名稱(chēng) --“調(diào)度類(lèi)型”中選擇你的作業(yè)執(zhí)行安排--如果選擇“反復(fù)出現(xiàn)”--點(diǎn)“更改”來(lái)設(shè)置你的時(shí)間安排 然后將SQL Agent服務(wù)啟動(dòng),并設(shè)置為自動(dòng)啟動(dòng),否則你的作業(yè)不會(huì)被執(zhí)行 設(shè)置方法: 我的電腦--控制面板--管理工具--服務(wù)--右鍵 SQLSERVERAGENT--屬性--啟動(dòng)類(lèi)型--選擇“自動(dòng)啟動(dòng)”--確定.--3.實(shí)現(xiàn)同步處理的方法2,定時(shí)同步 --在srv1中創(chuàng)建如下的同步處理存儲(chǔ)過(guò)程 create proc p_process as--更新修改過(guò)的數(shù)據(jù) update b set name=i.name,telphone=i.telphone from srv2.庫(kù)名.dbo.author b,author i where b.id=i.id and(b.name <> i.name or b.telphone <> i.telphone) --插入新增的數(shù)據(jù) insert srv2.庫(kù)名.dbo.author(id,name,telphone)select id,name,telphone from author i where not exists(select * from srv2.庫(kù)名.dbo.author where id=i.id) --刪除已經(jīng)刪除的數(shù)據(jù)(如果需要的話(huà))delete b from srv2.庫(kù)名.dbo.author b where not exists(select * from author where id=b.id)go 經(jīng)典實(shí)用SQL語(yǔ)句大全總結(jié) [編輯語(yǔ)言]2015-05-26 19:56 本文導(dǎo)航 1、首頁(yè)2、11、說(shuō)明:四表聯(lián)查問(wèn)題: 本文是經(jīng)典實(shí)用SQL語(yǔ)句大全的介紹,下面是該介紹的詳細(xì)信息。下列語(yǔ)句部分是Mssql語(yǔ)句,不可以在access中使用。SQL分類(lèi): DDL—數(shù)據(jù)定義語(yǔ)言(CREATE,ALTER,DROP,DECLARE)DML—數(shù)據(jù)操縱語(yǔ)言(SELECT,DELETE,UPDATE,INSERT)DCL—數(shù)據(jù)控制語(yǔ)言(GRANT,REVOKE,COMMIT,ROLLBACK)首先,簡(jiǎn)要介紹基礎(chǔ)語(yǔ)句: 1、說(shuō)明:創(chuàng)建數(shù)據(jù)庫(kù) CREATE DATABASE database-name 2、說(shuō)明:刪除數(shù)據(jù)庫(kù) drop database dbname 3、說(shuō)明:備份sql server---創(chuàng)建 備份數(shù)據(jù)的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_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],..)根據(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、說(shuō)明: 刪除新表:drop table tabname 6、說(shuō)明: 增加一個(gè)列:Alter table tabname add column col type 注:列增加后將不能刪除。DB2中列加上后數(shù)據(jù)類(lèi)型也不能改變,唯一能改變的是增加varchar類(lèi)型的長(zhǎ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] 總數(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 最?。簊elect min(field1)as minvalue from table1 11、說(shuō)明:幾個(gè)高級(jí)查詢(xún)運(yùn)算詞 A: UNION 運(yùn)算符 UNION 運(yùn)算符通過(guò)組合其他兩個(gè)結(jié)果表(例如 TABLE1 和 TABLE2)并消去表中任何重復(fù)行而派生出一個(gè)結(jié)果表。當(dāng) ALL 隨 UNION 一起使用時(shí)(即 UNION ALL),不消除重復(fù)行。兩種情況下,派生表的每一行不是來(lái)自 TABLE1 就是來(lái)自 TABLE2。 B: EXCEPT 運(yùn)算符 EXCEPT 運(yùn)算符通過(guò)包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重復(fù)行而派生出一個(gè)結(jié)果表。當(dāng) ALL 隨 EXCEPT 一起使用時(shí)(EXCEPT ALL),不消除重復(fù)行。 C: INTERSECT 運(yùn)算符 INTERSECT 運(yùn)算符通過(guò)只包括 TABLE1 和 TABLE2 中都有的行并消除所有重復(fù)行而派生出一個(gè)結(jié)果表。當(dāng) ALL 隨 INTERSECT 一起使用時(shí)(INTERSECT ALL),不消除重復(fù)行。 注:使用運(yùn)算詞的幾個(gè)查詢(xún)結(jié)果行必須是一致的。 12、說(shuō)明:使用外連接 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è)連接表中的所有記錄。其次,大家來(lái)看一些不錯(cuò)的sql語(yǔ)句 1、說(shuō)明:復(fù)制表(只復(fù)制結(jié)構(gòu),源表名:a 新表名:b)(Access可用)法一:select * into b from a where 1<>1 法二:select top 0 * into b from a 2、說(shuō)明:拷貝表(拷貝數(shù)據(jù),源表名:a 目標(biāo)表名:b)(Access可用)insert into b(a, b, c)select d,e,f from b; 3、說(shuō)明:跨數(shù)據(jù)庫(kù)之間表的拷貝(具體數(shù)據(jù)使用絕對(duì)路徑)(Access可用)insert into b(a, b, c)select d,e,f from b in ‘具體數(shù)據(jù)庫(kù)’ 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ō)明:顯示文章、提交人和最后回復(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、說(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ù)據(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、說(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ǔ)句搞定數(shù)據(jù)庫(kù)分頁(yè) select top 10 b.* from(select top 20 主鍵字段,排序字段 from 表名 order by 排序字段 desc)a,表名 b where b.主鍵字段 = a.主鍵字段 order by a.排序字段 14、說(shuō)明:前10條記錄 select top 10 * form table1 where 范圍 15、說(shuō)明:選擇在每一組b值相同的數(shù)據(jù)中對(duì)應(yīng)的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 中的行并消除所有重復(fù)行而派生出一個(gè)結(jié)果表(select a from tableA)except(select a from tableB)except(select a from tableC) 17、說(shuō)明:隨機(jī)取出10條數(shù)據(jù) select top 10 * from tablename order by newid() 18、說(shuō)明:隨機(jī)選擇記錄 select newid() 19、說(shuō)明:刪除重復(fù)記錄 Delete from tablename where id not in(select max(id)from tablename group by col1,col2,...)20、說(shuō)明:列出數(shù)據(jù)庫(kù)里所有的表名 select name from sysobjects where type='U' 21、說(shuō)明:列出表里的所有的 select name from syscolumns where id=object_id('TableName') 22、說(shuō)明:列示type、vender、pcs字段,以type字段排列,case可以方便地實(shí)現(xiàn)多重選擇,類(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 顯示結(jié)果: type vender pcs 電腦 A 1 電腦 A 1 光盤(pán) B 2 光盤(pán) A 2 手機(jī) B 3 手機(jī) 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 隨機(jī)選擇數(shù)據(jù)庫(kù)記錄的方法(使用Randomize函數(shù),通過(guò)SQL語(yǔ)句實(shí)現(xiàn))對(duì)存儲(chǔ)在數(shù)據(jù)庫(kù)中的數(shù)據(jù)來(lái)說(shuō),隨機(jī)數(shù)特性能給出上面的效果,但它們可能太慢了些。你不能要求ASP“找個(gè)隨機(jī)數(shù)”然后打印出來(lái)。實(shí)際上常見(jiàn)的解決方案是建立如下所示的循環(huán): Randomize RNumber = Int(Rnd*499)+1 While Not objRec.EOF If objRec(“ID”)= RNumber THEN...這里是執(zhí)行腳本...end if objRec.MoveNext Wend 這很容易理解。首先,你取出1到500范圍之內(nèi)的一個(gè)隨機(jī)數(shù)(假設(shè)500就是數(shù)據(jù)庫(kù)內(nèi)記錄的總數(shù))。然后,你遍歷每一記錄來(lái)測(cè)試ID 的值、檢查其是否匹配RNumber。滿(mǎn)足條件的話(huà)就執(zhí)行由THEN 關(guān)鍵字開(kāi)始的那一塊代碼。假如你的RNumber 等于495,那么要循環(huán)一遍數(shù)據(jù)庫(kù)花的時(shí)間可就長(zhǎng)了。雖然500這個(gè)數(shù)字看起來(lái)大了些,但相比更為穩(wěn)固的企業(yè)解決方案這還是個(gè)小型數(shù)據(jù)庫(kù)了,后者通常在一個(gè)數(shù)據(jù)庫(kù)內(nèi)就包含了成千上萬(wàn)條記錄。這時(shí)候不就死定了? 采用SQL,你就可以很快地找出準(zhǔn)確的記錄并且打開(kāi)一個(gè)只包含該記錄的 recordset,如下所示: Randomize RNumber = Int(Rnd*499)+ 1 SQL = “SELECT * FROM Customers WHERE ID = ” & RNumber set objRec = ObjConn.Execute(SQL)Response.WriteRNumber & “ = ” & objRec(“ID”)& “ ” & objRec(“c_email”)不必寫(xiě)出RNumber 和ID,你只需要檢查匹配情況即可。只要你對(duì)以上代碼的工作滿(mǎn)意,你自可按需操作“隨機(jī)”記錄。Recordset沒(méi)有包含其他內(nèi)容,因此你很快就能找到你需要的記錄這樣就大大降低了處理時(shí)間。 再談隨機(jī)數(shù) 現(xiàn)在你下定決心要榨干Random 函數(shù)的最后一滴油,那么你可能會(huì)一次取出多條隨機(jī)記錄或者想采用一定隨機(jī)范圍內(nèi)的記錄。把上面的標(biāo)準(zhǔn)Random 示例擴(kuò)展一下就可以用SQL應(yīng)對(duì)上面兩種情況了。為了取出幾條隨機(jī)選擇的記錄并存放在同一recordset內(nèi),你可以存儲(chǔ)三個(gè)隨機(jī)數(shù),然后查詢(xún)數(shù)據(jù)庫(kù)獲得匹配這些數(shù)字的記錄: SQL = “SELECT * FROM Customers WHERE ID = ” & RNumber & “ OR ID = ” & RNumber2 & “ OR ID = ” & RNumber3 假如你想選出10條記錄(也許是每次頁(yè)面裝載時(shí)的10條鏈接的列表),你可以用BETWEEN 或者數(shù)學(xué)等式選出第一條記錄和適當(dāng)數(shù)量的遞增記錄。這一操作可以通過(guò)好幾種方式來(lái)完成,但是 SELECT 語(yǔ)句只顯示一種可能(這里的ID 是自動(dòng)生成的號(hào)碼): SQL = “SELECT * FROM Customers WHERE ID BETWEEN ” & RNumber & “ AND ” & RNumber & “+ 9” 注意:以上代碼的執(zhí)行目的不是檢查數(shù)據(jù)庫(kù)內(nèi)是否有9條并發(fā)記錄。隨機(jī)讀取若干條記錄,測(cè)試過(guò) Access語(yǔ)法: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 Access左連接語(yǔ)法(最近開(kāi)發(fā)要用左連接,Access幫助什么都沒(méi)有,網(wǎng)上沒(méi)有Access的SQL說(shuō)明,只有自己測(cè)試, 現(xiàn)在記下以備后查)語(yǔ)法 select table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where...使用SQL語(yǔ)句 用...代替過(guò)長(zhǎng)的字符串顯示 語(yǔ)法: SQL數(shù)據(jù)庫(kù):select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename Access數(shù)據(jù)庫(kù):SELECT iif(len(field)>2,left(field,2)+'...',field)FROM tablename;Conn.Execute說(shuō)明 Execute方法 該方法用于執(zhí)行SQL語(yǔ)句。根據(jù)SQL語(yǔ)句執(zhí)行后是否返回記錄集,該方法的使用格式分為以下兩種: 1.執(zhí)行SQL查詢(xún)語(yǔ)句時(shí),將返回查詢(xún)得到的記錄集。用法為: Set 對(duì)象變量名=連接對(duì)象.Execute(“SQL 查詢(xún)語(yǔ)言”)Execute方法調(diào)用后,會(huì)自動(dòng)創(chuàng)建記錄集對(duì)象,并將查詢(xún)結(jié)果存儲(chǔ)在該記錄對(duì)象中,通過(guò)Set方法,將記錄集賦給指定的對(duì)象保存,以后對(duì)象變量就代表了該記錄集對(duì)象。 2.執(zhí)行SQL的操作性語(yǔ)言時(shí),沒(méi)有記錄集的返回。此時(shí)用法為: 連接對(duì)象.Execute “SQL 操作性語(yǔ)句” [, RecordAffected][, Option] ·RecordAffected 為可選項(xiàng),此出可放置一個(gè)變量,SQL語(yǔ)句執(zhí)行后,所生效的記錄數(shù)會(huì)自動(dòng)保存到該變量中。通過(guò)訪問(wèn)該變量,就可知道SQL語(yǔ)句隊(duì)多少條記錄進(jìn)行了操作。 ·Option 可選項(xiàng),該參數(shù)的取值通常為adCMDText,它用于告訴ADO,應(yīng)該將Execute方法之后的第一個(gè)字符解釋為命令文本。通過(guò)指定該參數(shù),可使執(zhí)行更高效。 ·BeginTrans、RollbackTrans、CommitTrans方法 這三個(gè)方法是連接對(duì)象提供的用于事務(wù)處理的方法。BeginTrans用于開(kāi)始一個(gè)事物;RollbackTrans用于回滾事務(wù);CommitTrans用于提交所有的事務(wù)處理結(jié)果,即確認(rèn)事務(wù)的處理。 事務(wù)處理可以將一組操作視為一個(gè)整體,只有全部語(yǔ)句都成功執(zhí)行后,事務(wù)處理才算成功;若其中有一個(gè)語(yǔ)句執(zhí)行失敗,則整個(gè)處理就算失敗,并恢復(fù)到處里前的狀態(tài)。 BeginTrans和CommitTrans用于標(biāo)記事務(wù)的開(kāi)始和結(jié)束,在這兩個(gè)之間的語(yǔ)句,就是作為事務(wù)處理的語(yǔ)句。判斷事務(wù)處理是否成功,可通過(guò)連接對(duì)象的Error集合來(lái)實(shí)現(xiàn),若Error集合的成員個(gè)數(shù)不為0,則說(shuō)明有錯(cuò)誤發(fā)生,事務(wù)處理失敗。Error集合中的每一個(gè)Error對(duì)象,代表一個(gè)錯(cuò)誤信息。 SQL語(yǔ)句大全精要 2006/10/26 13:46 DELETE 語(yǔ)句 DELETE語(yǔ)句:用于創(chuàng)建一個(gè)刪除查詢(xún),可從列在 FROM 子句之中的一個(gè)或多個(gè)表中刪除記錄,且該子句滿(mǎn)足 WHERE 子句中的條件,可以使用DELETE刪除多個(gè)記錄。 語(yǔ)法:DELETE [table.*] FROM table WHERE criteria 語(yǔ)法:DELETE * FROM table WHERE criteria='查詢(xún)的字' 說(shuō)明:table參數(shù)用于指定從其中刪除記錄的表的名稱(chēng)。 criteria參數(shù)為一個(gè)表達(dá)式,用于指定哪些記錄應(yīng)該被刪除的表達(dá)式。可以使用 Execute 方法與一個(gè) DROP 語(yǔ)句從數(shù)據(jù)庫(kù)中放棄整個(gè)表。不過(guò),若用這種方法刪除表,將會(huì)失去表的結(jié)構(gòu)。不同的是當(dāng)使用 DELETE,只有數(shù)據(jù)會(huì)被刪除;表的結(jié)構(gòu)以及表的所有屬性仍然保留,例如字段屬性及索引。 以上就是精品學(xué)習(xí)網(wǎng)提供的關(guān)于經(jīng)典實(shí)用SQL語(yǔ)句大全的內(nèi)容,希望對(duì)大家有所幫助。第三篇:sql語(yǔ)句學(xué)習(xí)_經(jīng)典_推薦
第四篇:SQL語(yǔ)句經(jīng)典總結(jié)
第五篇:經(jīng)典實(shí)用SQL語(yǔ)句總結(jié)