sql語句集錦

SQL語句集錦


--語 句                                功 能
--數據操作
SELECT      --從數據庫表中檢索數據行和列
INSERT      --向數據庫表添加新數據行
DELETE      --從數據庫表中刪除數據行
UPDATE      --更新數據庫表中的數據
--數據定義
CREATE TABLE    --創建一個數據庫表
DROP TABLE     --從數據庫中刪除表
ALTER TABLE     --修改數據庫表結構
CREATE VIEW     --創建一個視圖
DROP VIEW     --從數據庫中刪除視圖
CREATE INDEX    --爲數據庫表創建一個索引
DROP INDEX     --從數據庫中刪除索引
CREATE PROCEDURE   --創建一個存儲過程
DROP PROCEDURE    --從數據庫中刪除存儲過程
CREATE TRIGGER    --創建一個觸發器
DROP TRIGGER    --從數據庫中刪除觸發器
CREATE SCHEMA    --向數據庫添加一個新模式
DROP SCHEMA     --從數據庫中刪除一個模式
CREATE DOMAIN    --創建一個數據值域
ALTER DOMAIN    --改變域定義
DROP DOMAIN     --從數據庫中刪除一個域
--數據控制
GRANT      --授予用戶訪問權限
DENY      --拒絕用戶訪問
REVOKE      --解除用戶訪問權限
--事務控制
COMMIT      --結束當前事務
ROLLBACK     --中止當前事務
SET TRANSACTION    --定義當前事務數據訪問特徵
--程序化SQL
DECLARE      --爲查詢設定遊標
EXPLAN      --爲查詢描述數據訪問計劃
OPEN      --檢索查詢結果打開一個遊標
FETCH      --檢索一行查詢結果
CLOSE      --關閉遊標
PREPARE      --爲動態執行準備SQL 語句
EXECUTE      --動態地執行SQL 語句
DESCRIBE     --描述準備好的查詢


 

---局部變量
declare @id char(10)
--set @id = '10010001'
select @id = '10010001'


 

---全局變量
---必須以@@開頭


 

--IF ELSE
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --打印字符串'x > y'
else if @y > @z
print 'y > z'
else print 'z > y'


 

--CASE
use pangu
update employee
set e_wage =
case
  when job_level = ’1’ then e_wage*1.08
  when job_level = ’2’ then e_wage*1.07
  when job_level = ’3’ then e_wage*1.06
  else e_wage*1.05
end


 

--WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
  print @x --打印變量x 的值
  while @y < 3
   begin
    select @c = 100*@x + @y
    print @c --打印變量c 的值
    select @y = @y + 1
   end
  select @x = @x + 1
  select @y = 1
end


 

--WAITFOR
--例 等待1 小時2 分零3 秒後才執行SELECT 語句
waitfor delay ’01:02:03’
select * from employee
--例 等到晚上11 點零8 分後才執行SELECT 語句
waitfor time ’23:08:00’
select * from employee


 

***SELECT***


 

   select *(列名) from table_name(表名) where column_name operator value
   ex:(宿主)
  select * from stock_information where stockid   = str(nid)
     stockname = 'str_name'
     stockname like '% find this %'
     stockname like '[a-zA-Z]%' --------- ([]指定值的範圍)
     stockname like '[^F-M]%'   --------- (^排除指定範圍)
     --------- 只能在使用like關鍵字的where子句中使用通配符)
     or stockpath = 'stock_path'
     or stocknumber < 1000
     and stockindex = 24
     not stock*** = 'man'
     stocknumber between 20 and 100
     stocknumber in(10,20,30)
     order by stockid desc(asc) --------- 排序,desc-降序,asc-升序
     order by 1,2 --------- by列號
     stockname = (select stockname from stock_information  where stockid  = 4)
     --------- 子查詢
     --------- 除非能確保內層select只返回一個行的值,
     --------- 否則應在外層where子句中用一個in限定符
  select distinct column_name form table_name --------- distinct指定檢索獨有的列值,不重複
  select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
  select stockname , "stocknumber" = count(*) from table_name group by stockname
                                      --------- group by 將表按行分組,指定列中有相同的值
          having count(*) = 2  ---------  having選定指定的組
       
  select *
  from table1, table2                 
  where table1.id *= table2.id -------- 左外部連接,table1中有的而table2中沒有得以null表示
     table1.id =* table2.id -------- 右外部連接


 

  select stockname from table1
  union [all]  -----  union合併查詢結果集,all-保留重複行
  select stockname from table2


 

***insert***


 

  insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")
              value (select Stockname , Stocknumber from Stock_table2)---value爲select語句


 

***update***


 

  update table_name set Stockname = "xxx" [where Stockid = 3]
         Stockname = default
         Stockname = null
         Stocknumber = Stockname + 4


 

***delete***


 

  delete from table_name where Stockid = 3
  truncate table_name ----------- 刪除表中所有行,仍保持表的完整性
  drop table table_name --------------- 完全刪除表


 

***alter table*** --- 修改數據庫表結構


 

  alter table database.owner.table_name add column_name char(2) null .....
  sp_help table_name ---- 顯示錶已有特徵
  create table table_name (name char(20), age smallint, lname varchar(30))
  insert into table_name select ......... ----- 實現刪除列的方法(創建新表)
  alter table table_name drop constraint Stockname_default ---- 刪除Stockname的default約束
   
***function(/*常用函數*/)***


 

----統計函數----
AVG    --求平均值
COUNT   --統計數目
MAX    --求最大值
MIN    --求最小值
SUM    --求和


 

--AVG
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id


 

--MAX
--求工資最高的員工姓名
use pangu
select e_name
from employee
where e_wage =
(select max(e_wage)
  from employee)


 

--STDEV()
--STDEV()函數返回表達式中所有數據的標準差


 

--STDEVP()
--STDEVP()函數返回總體標準差


 

--VAR()
--VAR()函數返回表達式中所有值的統計變異數


 

--VARP()
--VARP()函數返回總體變異數


 

----算術函數----


 

/***三角函數***/
SIN(float_expression) --返回以弧度表示的角的正弦
COS(float_expression) --返回以弧度表示的角的餘弦
TAN(float_expression) --返回以弧度表示的角的正切
COT(float_expression) --返回以弧度表示的角的餘切
/***反三角函數***/
ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
ACOS(float_expression) --返回餘弦是FLOAT 值的以弧度表示的角
ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角
ATAN2(float_expression1,float_expression2)
        --返回正切是float_expression1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
                       --把弧度轉換爲角度返回與表達式相同的數據類型可爲
        --INTEGER/MONEY/REAL/FLOAT 類型
RADIANS(numeric_expression) --把角度轉換爲弧度返回與表達式相同的數據類型可爲
        --INTEGER/MONEY/REAL/FLOAT 類型
EXP(float_expression)  --返回表達式的指數值
LOG(float_expression)  --返回表達式的自然對數值
LOG10(float_expression)--返回表達式的以10 爲底的對數值
SQRT(float_expression) --返回表達式的平方根
/***取近似值函數***/
CEILING(numeric_expression)  --返回>=表達式的最小整數返回的數據類型與表達式相同可爲
        --INTEGER/MONEY/REAL/FLOAT 類型
FLOOR(numeric_expression)    --返回<=表達式的最小整數返回的數據類型與表達式相同可爲
        --INTEGER/MONEY/REAL/FLOAT 類型
ROUND(numeric_expression)    --返回以integer_expression 爲精度的四捨五入值返回的數據
        --類型與表達式相同可爲INTEGER/MONEY/REAL/FLOAT 類型
ABS(numeric_expression)      --返回表達式的絕對值返回的數據類型與表達式相同可爲
        --INTEGER/MONEY/REAL/FLOAT 類型
SIGN(numeric_expression)     --測試參數的正負號返回0 零值1 正數或-1 負數返回的數據類型
        --與表達式相同可爲INTEGER/MONEY/REAL/FLOAT 類型
PI()       --返回值爲π 即3.1415926535897936
RAND([integer_expression])   --用任選的[integer_expression]做種子值得出0-1 間的隨機浮點數


 


----字符串函數----
ASCII()         --函數返回字符表達式最左端字符的ASCII 碼值
CHAR()   --函數用於將ASCII 碼轉換爲字符
    --如果沒有輸入0 ~ 255 之間的ASCII 碼值CHAR 函數會返回一個NULL 值
LOWER()   --函數把字符串全部轉換爲小寫
UPPER()   --函數把字符串全部轉換爲大寫
STR()   --函數把數值型數據轉換爲字符型數據
LTRIM()   --函數把字符串頭部的空格去掉
RTRIM()   --函數把字符串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING()  --函數返回部分字符串
CHARINDEX(),PATINDEX()  --函數返回字符串中某個指定的子串出現的開始位置
SOUNDEX()  --函數返回一個四位字符碼
    --SOUNDEX函數可用來查找聲音相似的字符串但SOUNDEX函數對數字和漢字均只返回0 值    
DIFFERENCE()    --函數返回由SOUNDEX 函數返回的兩個字符表達式的值的差異
    --0 兩個SOUNDEX 函數返回值的第一個字符不同
    --1 兩個SOUNDEX 函數返回值的第一個字符相同
    --2 兩個SOUNDEX 函數返回值的第一二個字符相同
    --3 兩個SOUNDEX 函數返回值的第一二三個字符相同
    --4 兩個SOUNDEX 函數返回值完全相同
                                      


 

QUOTENAME()  --函數返回被特定字符括起來的字符串
/*select quotename('abc', '{') quotename('abc')
運行結果如下
----------------------------------{
{abc} [abc]*/


 

REPLICATE()     --函數返回一個重複character_expression 指定次數的字符串
/*select replicate('abc', 3) replicate( 'abc', -2)
運行結果如下
----------- -----------
abcabcabc NULL*/


 

REVERSE()       --函數將指定的字符串的字符排列順序顛倒
REPLACE()       --函數返回被替換了指定子串的字符串
/*select replace('abc123g', '123', 'def')
運行結果如下
----------- -----------
abcdefg*/


 

SPACE()   --函數返回一個有指定長度的空白字符串
STUFF()   --函數用另一子串替換字符串指定位置長度的子串


 


----數據類型轉換函數----
CAST() 函數語法如下
CAST() (<expression> AS <data_ type>[ length ])
CONVERT() 函數語法如下
CONVERT() (<data_ type>[ length ], <expression> [, style])


 

select cast(100+99 as char) convert(varchar(12), getdate())
運行結果如下
------------------------------ ------------
199   Jan 15 2000


 

----日期函數----
DAY()   --函數返回date_expression 中的日期值
MONTH()   --函數返回date_expression 中的月份值
YEAR()   --函數返回date_expression 中的年份值
DATEADD(<datepart> ,<number> ,<date>)
    --函數返回指定日期date 加上指定的額外日期間隔number 產生的新日期
DATEDIFF(<datepart> ,<number> ,<date>)
    --函數返回兩個指定日期在datepart 方面的不同之處
DATENAME(<datepart> , <date>)  --函數以字符串的形式返回日期的指定部分
DATEPART(<datepart> , <date>)  --函數以整數值的形式返回日期的指定部分
GETDATE()  --函數以DATETIME 的缺省格式返回系統當前的日期和時間


 

----系統函數----
APP_NAME()      --函數返回當前執行的應用程序的名稱
COALESCE()  --函數返回衆多表達式中第一個非NULL 表達式的值
COL_LENGTH(<'table_name'>, <'column_name'>) --函數返回表中指定字段的長度值
COL_NAME(<table_id>, <column_id>)   --函數返回表中指定字段的名稱即列名
DATALENGTH() --函數返回數據表達式的數據的實際長度
DB_ID(['database_name']) --函數返回數據庫的編號
DB_NAME(database_id)  --函數返回數據庫的名稱
HOST_ID()     --函數返回服務器端計算機的名稱
HOST_NAME()     --函數返回服務器端計算機的名稱
IDENTITY(<data_type>[, seed increment]) [AS column_name])
--IDENTITY() 函數只在SELECT INTO 語句中使用用於插入一個identity column列到新表中
/*select identity(int, 1, 1) as column_name
into newtable
from oldtable*/
ISDATE()  --函數判斷所給定的表達式是否爲合理日期
ISNULL(<check_expression>, <replacement_value>) --函數將表達式中的NULL 值用指定值替換
ISNUMERIC()  --函數判斷所給定的表達式是否爲合理的數值
NEWID()   --函數返回一個UNIQUEIDENTIFIER 類型的數值
NULLIF(<expression1>, <expression2>)
--NULLIF 函數在expression1 與expression2 相等時返回NULL 值若不相等時則返回expression1 的值
精妙SQL語句
說明:複製表(只複製結構,源表名:a 新表名:b)
SQL: select * into b from a where 1<>1
說明:拷貝表(拷貝數據,源表名:a 目標表名:b)
SQL: insert into b(a, b, c) select d,e,f from b;
說明:顯示文章、提交人和最後回覆時間
SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
說明:外連接查詢(表名1:a 表名2:b)
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
說明:日程安排提前五分鐘提醒
SQL: select * from 日程安排 where datediff('minute',f開始時間,getdate())>5

說明:兩張關聯表,刪除主表中已經在副表中沒有的信息
SQL:
delete from info where not exists ( select * from infobz where info.infid=infobz.infid )
說明:--
SQL:
SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
FROM TABLE1,
(SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND
FROM TABLE2
WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X,
(SELECT NUM, UPD_DATE, STOCK_ONHAND
FROM TABLE2
WHERE TO_CHAR(UPD_DATE,'YYYY/MM') =
TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') || '/01','YYYY/MM/DD') - 1, 'YYYY/MM') ) Y,
WHERE X.NUM = Y.NUM (+)
AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B
WHERE A.NUM = B.NUM
說明:--
SQL:
select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名稱='"&strdepartmentname&"' and 專業名稱='"&strprofessionname&"' order by 性別,生源地,高考總成績
說明:
從數據庫中去一年的各單位電話費統計(電話費定額賀電化肥清單兩個表來源)
SQL:
SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FRI,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) AS MAY,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) AS JUL,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) AS AGU,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) AS OCT,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) AS NOV,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DEC
FROM (SELECT a.userper, a.tel, a.standfee, b.telfeedate, b.factration
FROM TELFEESTAND a, TELFEE b
WHERE a.tel = b.telfax) a
GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy')
說明:四表聯查問題:
SQL: 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 .....
說明:得到表中最小的未使用的ID號
SQL:
SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) as HandleID
FROM Handle
WHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)

: 我在ms sql中建了一個表,可由於種種原因有些記錄重複了
: 記錄完全的一模一樣。
: 現在我想把重複的都刪掉,只保留重複記錄中的第一條。
: 我在database好象看到有介紹oracle的,


select distinct * into #table_name from table_name
delete from table_name
select * into table_name from #table_name
drop table #table_name

與此相關的是“select into”選項,可以在數據庫屬性
對話框中,勾起來此項,或者在Query Analyzer中執行
execute sp_dboption 'db_name','select into','true'
開啓。默認值是關閉的。
 

======================================================
格式
說明:複製表(只複製結構,源表名:a 新表名:b)
SQL: select * into b from a where 1<>1

 

說明:拷貝表(拷貝數據,源表名:a 目標表名:b)
insert into b(a, b, c) select d,e,f from b;

 

說明:合併數據(表名1:a 表名2:b)
select a,b,c from a union select d,e,f from b;

 

說明:子查詢(表名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)

 

說明:顯示文章、提交人和最後回覆時間
sql:select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

 

說明:外連接查詢(表名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

 

說明:在線視圖查詢(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;

 

 

 

SQL:SELECT NEWID()

 

自連接取出榮於數據
把所有姓名相同的只取出一個
select a.name from table_name a where a.id in
(select b.id from table_name b where a.id<>b.id)
同理刪除榮譽數據
delete from table_name  where table_name.id in
(select b.id from table_name b where table_name.id<>b.id)

 

SELECT DISTINCT TSD.Time_Sheet_Dtl_Record_No,TSD.User_Record_No,TP.Period_Start_Date ,TP.Period_End_Date INTO #temp FROM Time_Sheet_Details TSD, Time_Sheet_Period TP ,User_Group_User_Relationship UGUR,User_Group_Master UGM ,User_Data_Access_Right UDAR WHERE TSD.status ='TS_WFMGRA' AND DATEDIFF(dd,TP.period_start_date,TSD.work_Date)>=0 AND DATEDIFF(dd,TP.period_end_date,TSD.work_Date)<=0 AND UGUR.User_Record_No = TSD.User_Record_No AND UGM.User_Group_Record_No=UGUR.User_Group_Record_No AND UGM.User_Group_Name IN('Technician','Engineer') AND UDAR.User_Record_No = TSD.User_Record_No AND UDAR.Division_Record_No IN(1) SELECT DISTINCT A.User_Record_No, B.Staff_No, B.Full_Name,B.Job_Title, SUM(working_hour) AS Working_Hours,SUM(ot) AS OT_HOURS, C.Period_Start_Date,C.Period_End_Date INTO #temp2 FROM Time_Sheet_Details A INNER JOIN User_Master B ON B.User_Record_No= A.User_Record_No INNER JOIN #temp C ON C.Time_Sheet_Dtl_Record_No = A.Time_Sheet_Dtl_Record_No GROUP BY A.User_Record_No, B.Staff_No,B.Full_Name,B.Job_Title, C.Period_Start_Date,C.Period_End_Date HAVING COUNT(*) = DATEDIFF(d,C.Period_Start_Date,C.Period_End_Date)+1 Select A.User_Record_No,A.Staff_No,A.Full_Name,A.Job_Title ,A.Working_Hours,A.OT_HOURS,A.Period_Start_Date,A.Period_End_Date ,DM.Division_Code INTO #temp3 FROM #temp2 AS A INNER JOIN User_Data_Access_Right UDAR ON UDAR.User_Record_No = A.User_Record_No INNER JOIN Division_Master DM ON DM.Division_Record_No = UDAR.Division_Record_No SELECT * From #temp3 order by 1,7,8; Select Count(Distinct User_Record_No+Period_Start_Date+Period_End_Date) From #temp3 DROP TABLE #temp ,#temp2,#temp3

 

select * from a where time between time1 and time2

 

http://expert.csdn.net/Expert/TopicView1.asp?id=928809

 

select isNull(A.name,B.name),isnull(a.code,B.code) from table1 A
full out join table2 B on
A.id = B.id

 

select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
選擇在每一組b值相同的數據中對應的a最大的(換成average或別的函數或子查詢,你會有意想不到的發現)記錄的所有信息.
類似這樣的用法可以用於論壇每月排行榜,每月熱銷產品分析,按科目成績排名,等等.
上面的許多同志對子查詢存在有偏見與誤解,其實在一個好的數據分析程序中,子查詢可以簡化很多程序邏輯.

 

上面select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
這種相關子查詢和delete(insert)等結合起來,可以用於消除數據庫中某個字段(或某些)的重複值

 

(select a from tableA ) except (select a from tableB) except (select a from tableC)

 

SELECT DISTINCT TSD.Time_Sheet_Dtl_Record_No,TSD.User_Record_No,TP.Period_Start_Date ,TP.Period_End_Date INTO #temp FROM Time_Sheet_Details TSD, Time_Sheet_Period TP ,User_Group_User_Relationship UGUR,User_Group_Master UGM ,User_Data_Access_Right UDAR WHERE TSD.status ='TS_WFMGRA' AND DATEDIFF(dd,TP.period_start_date,TSD.work_Date)>=0 AND DATEDIFF(dd,TP.period_end_date,TSD.work_Date)<=0 AND UGUR.User_Record_No = TSD.User_Record_No AND UGM.User_Group_Record_No=UGUR.User_Group_Record_No AND UGM.User_Group_Name IN('Technician','Engineer') AND UDAR.User_Record_No = TSD.User_Record_No AND UDAR.Division_Record_No IN(1) SELECT DISTINCT A.User_Record_No, B.Staff_No, B.Full_Name,B.Job_Title, SUM(working_hour) AS Working_Hours,SUM(ot) AS OT_HOURS, C.Period_Start_Date,C.Period_End_Date INTO #temp2 FROM Time_Sheet_Details A INNER JOIN User_Master B ON B.User_Record_No= A.User_Record_No INNER JOIN #temp C ON C.Time_Sheet_Dtl_Record_No = A.Time_Sheet_Dtl_Record_No GROUP BY A.User_Record_No, B.Staff_No,B.Full_Name,B.Job_Title, C.Period_Start_Date,C.Period_End_Date HAVING COUNT(*) = DATEDIFF(d,C.Period_Start_Date,C.Period_End_Date)+1 Select A.User_Record_No,A.Staff_No,A.Full_Name,A.Job_Title ,A.Working_Hours,A.OT_HOURS,A.Period_Start_Date,A.Period_End_Date ,DM.Division_Code INTO #temp3 FROM #temp2 AS A INNER JOIN User_Data_Access_Right UDAR ON UDAR.User_Record_No = A.User_Record_No INNER JOIN Division_Master DM ON DM.Division_Record_No = UDAR.Division_Record_No SELECT * From #temp3 order by 1,7,8; Select Count(Distinct User_Record_No+Period_Start_Date+Period_End_Date) From #temp3 DROP TABLE #temp ,#temp2,#temp3

SELECT DISTINCT TSD.Time_Sheet_Dtl_Record_No,TSD.User_Record_No,TP.Period_Start_Date ,TP.Period_End_Date INTO #temp FROM Time_Sheet_Details TSD, Time_Sheet_Period TP ,User_Group_User_Relationship UGUR,User_Group_Master UGM ,User_Data_Access_Right UDAR WHERE TSD.status ='TS_WFMGRA' AND DATEDIFF(dd,TP.period_start_date,TSD.work_Date)>=0 AND DATEDIFF(dd,TP.period_end_date,TSD.work_Date)<=0 AND UGUR.User_Record_No = TSD.User_Record_No AND UGM.User_Group_Record_No=UGUR.User_Group_Record_No AND UGM.User_Group_Name IN('Technician','Engineer') AND UDAR.User_Record_No = TSD.User_Record_No AND UDAR.Division_Record_No IN(1) SELECT DISTINCT A.User_Record_No, B.Staff_No, B.Full_Name,B.Job_Title, SUM(working_hour) AS Working_Hours,SUM(ot) AS OT_HOURS, C.Period_Start_Date,C.Period_End_Date INTO #temp2 FROM Time_Sheet_Details A INNER JOIN User_Master B ON B.User_Record_No= A.User_Record_No INNER JOIN #temp C ON C.Time_Sheet_Dtl_Record_No = A.Time_Sheet_Dtl_Record_No GROUP BY A.User_Record_No, B.Staff_No,B.Full_Name,B.Job_Title, C.Period_Start_Date,C.Period_End_Date HAVING COUNT(*) = DATEDIFF(d,C.Period_Start_Date,C.Period_End_Date)+1 Select A.User_Record_No,A.Staff_No,A.Full_Name,A.Job_Title ,A.Working_Hours,A.OT_HOURS,A.Period_Start_Date,A.Period_End_Date ,DM.Division_Code INTO #temp3 FROM #temp2 AS A INNER JOIN User_Data_Access_Right UDAR ON UDAR.User_Record_No = A.User_Record_No INNER JOIN Division_Master DM ON DM.Division_Record_No = UDAR.Division_Record_No SELECT * From #temp3 order by 1,7,8; Select Count(Distinct User_Record_No+Period_Start_Date+Period_End_Date) From #temp3 DROP TABLE #temp ,#temp2,#temp3

 

各種查詢技巧結合才能寫出最高效的查詢
在SQL中使用DISTINCT是代價比較高的查詢方式

 

微軟不公佈SQLserver2000中的函數:
print pwdcompare('helloworld', pwdencrypt('helloworld'))
print pwdcompare('hello', pwdencrypt('world'))

 

隨機取出10條數據
select top 10 * from tablename order by newid()

 

功能:
type   vender pcs
電腦   A        1
電腦   A        1
光盤   B        2
光盤   A        2
手機   B        3
手機   C        3
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

 

FUNCTION:DELELTE REPEAT RECORDS
DELETE  from tablename where id not in (select max(id) from tablename group by col1,col2,...)

 

Microsoft SQL Server是如何加密口令的?未公開的加密函數?
       
如果對MSSQL的用戶信息有興趣的,可能會發現master.dbo.sysxlogins裏面存放着用戶的口令,可是呢,password字段如果不是null就是一堆看不懂的binary,這個口令是怎麼加密的呢?
其實只要仔細看看master.dbo.sp_addlogin就知道了,MSSQL的sp都可以看到代碼,真是不錯。
讓我們來看看它是怎麼做的,注意這一行select @passwd = pwdencrypt(@passwd),這個時後@passwd就被加密了,讓我們也來試一下
DECLARE @ClearPWD varchar(255)
DECLARE @EncryptedPWD varbinary(255)
SELECT @ClearPWD = 'test'
SELECT @EncryptedPWD = CONVERT(varbinary(255), pwdencrypt(@ClearPWD))
SELECT @EncryptedPWD
看上去不錯,確實被加密了,可是我怎麼還原呢?
呵呵,這就沒戲了,口令加密都是單向的,用加密後的密文來比較就可以了。
繼續看看其它用戶相關的sp,可以發現master.dbo.sp_password裏面有口令比較的內容。
pwdcompare(@old, password, (CASE WHEN xstatus&2048 = 2048 THEN 1 ELSE 0 END))
不用去理會xstatus,這是一個狀態掩碼,一般我們用的時候就直接用0就可以了
DECLARE @ClearPWD varchar(255)
DECLARE @EncryptedPWD varbinary(255)
SELECT @ClearPWD = 'test'
SELECT @EncryptedPWD = CONVERT(varbinary(255), pwdencrypt(@ClearPWD))
SELECT pwdcompare(@ClearPWD, @EncryptedPWD, 0)
SELECT pwdcompare('ErrorPassword', @EncryptedPWD, 0)
這樣我們就可以使用這兩個函數來加密自己的密碼了,怎麼樣,還不錯吧?

引用自
http://www.bgchina.com/daily/bd_1/

 

SELECT語法:(基本)
SELECT [DISTINCT]
(column [{, column } ] )| *
FROM table [ { , table} ]
[ORDER BY column [ASC] | [DESC
[{ , column [ASC] | [DESC } ] ]
WHERE predicate [ { logical-connector predicate } ];
------------------------------------------------------
INSERT語法:
INSERT INTO table
[(column { ,column})]
VALUES
(columnvalue [{,columnvalue}]);
------------------------------------------------------
UPDATE語法:
UPDATE table
SET column = value [{, column = value}]
[ WHERE predicate [ { logical-connector predicate}]];
------------------------------------------------------
DELETE語法:
DELETE FROM table
[WHERE predicate [ { logical-connector predicate} ] ];
------------------------------------------------------

=================================================================================

常識補充
統計函數:
AVG(字段名) 得出一個表格欄平均值
COUNT(*|字段名) 對數據行數的統計或對某一欄有值的數據行數統計
MAX(字段名) 取得一個表格欄最大的值
MIN(字段名) 取得一個表格欄最小的值
SUM(字段名) 把數據欄的值相加
eg:
sql="select sum(字段名) as 別名 from 數據表 where 條件表達式"

 

select top 0 * into b from a

 

select name from sysobjects where type='U''列出數據庫裏所有的表名
select name from syscolumns where id=object_id('TableName')'列出表裏的所有的

 

select name from sysobjects where type='U''列出數據庫裏所有的表名
select name from syscolumns where id=object_id('TableName')'列出表裏的所有的字段名

 

http://expert.csdn.net/Expert/topic/1554/1554516.xml?temp=.6041071

 

source data
kzx4dm xbdm jylsfsdm ...
11      2       10
11      2       10
12      2       10
12      1       20
12      1       20
destination:
kzx4dm  bys_count yjs_count jy_ratio
11        2           2        1.00
12        3           1        1/3
SELECT DISTINCT kzx4dm,(SELECT COUNT(jylsfsdm) FROM tablename WHERE kzx4dm=TA.kzx4dm) AS bys_count,(SELECT COUNT(jylsfsdm) FROM tablename WHERE kzx4dm=TA.kzx4dm AND jylsfsdm=10) AS yjs_count,yjs_count/bys_count AS jy_ratio
FROM tablename AS TA

 

 

二維表 T(F1,F2,F3,F4,F5,F6,F7) 表示如下關係:
  學生ID    學生姓名    課程ID    課程名稱     成績      教師ID    教師姓名
    S3        王五        K4        政治        53         T4       趙老師 
    S1        張三        K1        數學        61         T1       張老師 
    S2        李四        K3        英語        88         T3       李老師 
    S1        張三        K4        政治        77         T4       趙老師 
    S2        李四        K4        政治        67         T5       周老師 
    S3        王五        K2        語文        90         T2       王老師 
    S3        王五        K1        數學        55         T1       張老師 
    S1        張三        K2        語文        81         T2       王老師 
    S4        趙六        K2        語文        59         T1       王老師 
    S1        張三        K3        英語        37         T3       李老師 
    S2        李四        K1        數學        81         T1       張老師 
  請以一句 T-SQL (Ms SQL Server) 或 Jet SQL (Ms Access) 在 原表 T 基礎上作答
1.如果 T 表還有一字段 F0 數據類型爲自動增量整型(唯一,不會重複),
  而且 T 表中含有除 F0 字段外,請刪除其它字段完全相同的重複多餘的髒記錄數據:
delete from t  where f0 in(select max(f0) from t group by f1,f2,f3,f4,f5,f6,f7 having count(f0)>1)
2.列印各科成績最高和最低的記錄: (就是各門課程的最高、最低分的學生和老師)
  課程ID,課程名稱,最高分,學生ID,學生姓名,教師ID,教師姓名,最低分,學生ID,學生姓名,教師ID,教師姓名
select tb.f4,tb.f3,tb1.f5,tb.f1,tb.f2,tb.f6,tb.f7,tb2.f5,tb2.f1,tb2.f2,tb2.f6,tb2.f7 from t tb where
f5=(select max(f5) from t where t.f4=tb.f4)
join select f2,f7 from t tb2 where
f5=(select min(f5) from t where t.f4=tb2.f4)
on tb.f4=tb2.f4
先完成一個,想想在做下一個.
3.按成績從高到低順序,列印所有學生四門(數學,語文,英語,政治)課程成績: (就是每個學生的四門課程的成績單)
  學生ID,學生姓名,數學,語文,英語,政治,有效課程數,有效平均分
  (注: 有效課程即在 T 表中有該學生的成績記錄,如不明白可不列印"有效課程數"和"有效平均分")
select tb1.f1,tb1.f2,count(tb1.f5) as scores,sum(tb1.f5) as scoresum, avg(tb1.f5) AS average,
tb2.f5,tb3.f5,tb4.f5,tb5.f5
from t as tb1
left join t as tb2
on tb1.f0=tb2.f0 and tb2.f3=k4
left join t as tb3
on tb1.f0=tb3.f0 and tb3.f3=k3
left join t as tb4
on tb1.f0=tb4.f0 and tb4.f3=k2
left join t as tb5
on tb1.f0=tb5.f0 and tb5.f3=k1
grout by tb1.f2 order by tb1.scoresum desc
4.按各科不及格率的百分數從低到高和平均成績從高到低順序,統計並列印各科平均成績和不及格率的百分數(用"N行"表示): (就是分析哪門課程難)
  課程ID,課程名稱,平均成績,及格百分數
select  f3,f4, (select count(f1) from t where t.f4=tb.f4 and f5<60)/(select count(f1) from t where t.f4=tb.f4) as failper,((select sum(f5) from t where t.f4=tb.f4)/ (select count(f5) from t where t.f4=tb.f4)) as averagescore
from t tb order by failper asc, as averagescore desc

 

 

/****** Object:  Stored Procedure dbo.dt_checkoutobject    Script Date: 2003-3-12 9:25:26 ******/
create proc dbo.dt_checkoutobject
    @chObjectType  char(4),
    @vchObjectName varchar(255),
    @vchComment    varchar(255),
    @vchLoginName  varchar(255),
    @vchPassword   varchar(255),
    @iVCSFlags     int = 0,
    @iActionFlag   int = 0/* 0 => Checkout, 1 => GetLatest, 2 => UndoCheckOut */
as
set nocount on
declare @iReturn int
declare @iObjectId int
select @iObjectId =0
declare @VSSGUID varchar(100)
select @VSSGUID = 'SQLVersionControl.VCS_SQL'
declare @iReturnValue int
select @iReturnValue = 0
declare @vchTempText varchar(255)
/* this is for our strings */
declare @iStreamObjectId int
select @iStreamObjectId = 0
    declare @iPropertyObjectId int
    select @iPropertyObjectId = (select objectid from dbo.dtproperties where property = 'VCSProjectID')
    declare @vchProjectName   varchar(255)
    declare @vchSourceSafeINI varchar(255)
    declare @vchServerName    varchar(255)
    declare @vchDatabaseName  varchar(255)
    exec dbo.dt_getpropertiesbyid_vcs @iPropertyObjectId, 'VCSProject',       @vchProjectName   OUT
    exec dbo.dt_getpropertiesbyid_vcs @iPropertyObjectId, 'VCSSourceSafeINI', @vchSourceSafeINI OUT
    exec dbo.dt_getpropertiesbyid_vcs @iPropertyObjectId, 'VCSSQLServer',     @vchServerName    OUT
    exec dbo.dt_getpropertiesbyid_vcs @iPropertyObjectId, 'VCSSQLDatabase',   @vchDatabaseName  OUT
    if @chObjectType = 'PROC'
    begin
        /* Procedure Can have up to three streams
           Drop Stream, Create Stream, GRANT stream */
        exec @iReturn = sp_OACreate @VSSGUID, @iObjectId OUT
        if @iReturn <> 0 GOTO E_OAError
        exec @iReturn = sp_OAMethod @iObjectId,
                                    'CheckOut_StoredProcedure',
                                    NULL,
                                    @sProjectName = @vchProjectName,
                                    @sSourceSafeINI = @vchSourceSafeINI,
                                    @sObjectName = @vchObjectName,
                                    @sServerName = @vchServerName,
                                    @sDatabaseName = @vchDatabaseName,
                                    @sComment = @vchComment,
                                    @sLoginName = @vchLoginName,
                                    @sPassword = @vchPassword,
                                    @iVCSFlags = @iVCSFlags,
                                    @iActionFlag = @iActionFlag
        if @iReturn <> 0 GOTO E_OAError
        exec @iReturn = sp_OAGetProperty @iObjectId, 'GetStreamObject', @iStreamObjectId OUT
        if @iReturn <> 0 GOTO E_OAError
        create table #commenttext (id int identity, sourcecode varchar(255))
        select @vchTempText = 'STUB'
        while @vchTempText IS NOT NULL
        begin
            exec @iReturn = sp_OAMethod @iStreamObjectId, 'GetStream', @iReturnValue OUT, @vchTempText OUT
            if @iReturn <> 0 GOTO E_OAError
            if (@vchTempText IS NOT NULL) insert into #commenttext (sourcecode) select @vchTempText
        end
        select 'VCS'=sourcecode from #commenttext order by id
        select 'SQL'=text from syscomments where id = object_id(@vchObjectName) order by colid
    end
CleanUp:
    return
E_OAError:
    exec dbo.dt_displayoaerror @iObjectId, @iReturn
    GOTO CleanUp
GO
看的我直暈~!

 

 

1.如果 T 表還有一字段 F0 數據類型爲自動增量整型(唯一,不會重複),
  而且 T 表中含有除 F0 字段外,請刪除其它字段完全相同的重複多餘的髒記錄數據:
delete from t  where f0 in(select max(f0) from t group by f1,f2,f3,f4,f5,f6,f7 having count(f0)>1)
上面這個sql有問題
正確的如下
DELETE Legal_Dispute_Lawyer WHERE Lawyer_Record_No IN(SELECT Lawyer_Record_No FROM Legal_Dispute_Lawyer LDL WHERE Lawyer_Record_No(SELECT TOP 1 Lawyer_Record_No FROM Legal_Dispute_Lawyer WHERE LD=LDL.LD AND Name=LDL.Name AND Email=LDL.Email AND Phone_No=LDL.Phone_No AND Fax_No=LDL.Fax_No))
消除Legal_Dispute_Lawyer 表中除Lawyer_Record_No(自增字段)外其餘數據完全相同的記錄.
表結構如下
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Legal_Dispute_Lawyer]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Legal_Dispute_Lawyer]
GO
CREATE TABLE [dbo].[Legal_Dispute_Lawyer] (
[Lawyer_Record_No] [int] IDENTITY (1, 1) NOT NULL ,
[LD] [int] NOT NULL ,
[Name] [int] NOT NULL ,
[Phone_No] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
[Fax_No] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
 [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
以這種方式還可以實現組內消除重複值..

 

 

DELETE Legal_Dispute_Lawyer WHERE Lawyer_Record_No IN(SELECT Lawyer_Record_No FROM Legal_Dispute_Lawyer LDL WHERE Lawyer_Record_No<>(SELECT TOP 1 Lawyer_Record_No FROM Legal_Dispute_Lawyer WHERE LD=LDL.LD AND Name=LDL.Name AND Email=LDL.Email AND Phone_No=LDL.Phone_No AND Fax_No=LDL.Fax_No))

 

table1
kzx4dm xbdm jylsfsdm ...
10      2       8
11      2       9
12      2       19
13      1       18
14      1       19
select top 3 with ties jylsfsdm from table1
結果:
kzx4dm xbdm jylsfsdm ...
12      2       19
14      1       19
13      1       18
11      2       9
說明:取出並列排行的所有記錄

=========================================================================

SELECT statement::=
<query_experssion>
[ORDER BY {order_by_expression|Column_position[ASC|DESC]}
[,...n]]
[COMPUTE
{{AVG|COUNT|MAX|MIN|SUM}(exression)}[,...n]
[BY expression[,...n]]
]
[FOR {BROWSE |XML{RAW|AUTO|EXPLICIT}
  [,XMLDATA]
  [,ELEMENTS]
  [,BINARY base64]
}
]
[OPTION(<query_hint>[,...n])]
   <query expression>::=
{<query specification>|(<query expression>)}
[UNION[ALL]<query specification|(<query expression<)[...n]]
<query specification>::=
SELECT [ALL|DISTINCT]
  [{TOP integer|TOP integer PERCENT}[WITH TIES]]
<select _list>
[INTO new_table]
[FROM{<table_source>}[,...n]]
[WHERE <search_condition>]
[GROUP BY [ALL]group_by_expression[,...n]
  [WITH{CUBE|ROLLUP}]
]
[HAVING<search_condition>}
哎,行了吧,這還是select 語句的形式。要看完全的,喔,那可不得了喔。我不寫了,累死了,呵呵

 

 

create table IKnowYou
(userid varchar(30),
TableName varchar(50),
Action varchar(6),
DateT datatime,
TrrigerTableColumns.....,
TrrigerTableColumns.....)
create trriger Who_Do_It on table
for update
as
declare userid varchar(30)
declare TableName varchar(50)
declare Action varchar(6)
userid=@@suser_sname
Action='update'
TableName='tabel'
insert into IKnowYou values(userid,TableName,Action,Now,select * from deleted,select * from inserted)

 

==============================================================================

kill all connections to a given databse
CREATE PROCEDURE usp_killDBConnections @DBName varchar(50), @withmsg bit=1
AS
SET NOCOUNT ON
DECLARE @spidstr varchar(8000)
DECLARE @ConnKilled smallint
SET @ConnKilled=0
SET @spidstr = ''
IF db_id(@DBName) < 4
BEGIN
PRINT 'Connections to system databases cannot be killed'
RETURN
END
SELECT @spidstr=coalesce(@spidstr,',' )+'kill '+convert(varchar, spid)+ '; '
FROM master..sysprocesses WHERE dbid=db_id(@DBName)
IF LEN(@spidstr) > 0
BEGIN
EXEC(@spidstr)
SELECT @ConnKilled = COUNT(1)
FROM master..sysprocesses WHERE dbid=db_id(@DBName)
END
IF @withmsg =1
PRINT  CONVERT(VARCHAR(10), @ConnKilled) + ' Connection(s) killed for DB '  + @DBName
GO

Top
回覆人: matq2008(葉子.net) ( ) 信譽:100 2003-3-21 18:00:47 得分:0

SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
  FROM TABLE1,
    (SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
        FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND
                FROM TABLE2
              WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X,
            (SELECT NUM, UPD_DATE, STOCK_ONHAND
                FROM TABLE2
              WHERE TO_CHAR(UPD_DATE,'YYYY/MM') =
                    TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') &brvbar;&brvbar; '/01','YYYY/MM/DD') - 1, 'YYYY/MM') ) Y,
        WHERE X.NUM = Y.NUM (+)
          AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B
WHERE A.NUM = B.NUM 

=====================================================

select * into b from a where 1<>1
這樣生成的b表訪問的用戶沒有select的權限?
請問sql DX們這個問題怎麼解決?

指定dbo前綴應該可以解決問題了..

==============================================================

大家來捧捧場:http://expert.csdn.net/Expert/topic/1545/1545418.xml?temp=.6732141

 

select count(clubmember.clubid)as hot,clubmember.clubid,clubinfo.clubid,clubinfo.name from clubmember,clubinfo where clubinfo.clubid=clubmember.clubid group by clubmember.clubid order by hot DESC limit 10

 

條件刪除
DELETE DBO.TEMP WHERE FLD_CHARACTER IN
(
SELECT FLD_CHARACTER
FROM dbo.TBL_CHARACTER
WHERE (FLD_DELETED = 1) AND (FLD_LEVEL <= 18) AND
      (FLD_UPDATEDATETIME <= GETDATE() - 5)
)

===================================================================

選擇前數據庫裏前10條記錄:
1、select top 10 * from table
2、set rowcount 10
   select * from table

 

複製一張表
create table aaa as select * from bbb;

 

<%
'取出隨機記錄
Randomize
RNumber = Int(Rnd*200) + 1
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")
%>

 

上面的人把視圖都搬出來了啊不過幾乎都是查詢,我來點實用的
insert into pbrule(newrid,subj,bz,zf,orid,rstat,layer,bid) select newrid,subj,bz,zf,orid,rstat,layer,bid from pbrule1 where bruleid=bruleid
將pbrule1 表中符合條件的記錄 導入 pbrule表中

 

 

下面這個更實用,就是兩張關聯表,刪除主表中已經在副表中沒有的信息
delete from info where not exists ( select * from infobz where info.infid=infobz.infid )
這條語句就是刪除 INFO表中infid字段在infobz中不存在的記錄
此語句用來維護數據庫很有用哦。

================================================================================

CREATE OR REPLACE PROCEDURE DUMP_TO_WEB_TCLHD_SP_OBJ
AS
BEGIN
CALC_PIA_PRICE ;
DELETE FROM TCLHD_SP_OBJ ;
INSERT INTO TCLHD_SP_OBJ (NAME,CODE,ID,PRICE,TYPE,FIELDS) (
SELECT c.DESCRIPTION,C.SEGMENT1,a.INVENTORY_ITEM_ID, nvl(c.ATTRIBUTE14,'0'),0,nvl(c.ATTRIBUTE13,0)
from mtl_item_categories a , mtl_categories b , mtl_system_items c  
where a.CATEGORY_ID = b.CATEGORY_ID and b.SEGMENT1='原材料'
and a.INVENTORY_ITEM_ID = c.INVENTORY_ITEM_ID AND A.ORGANIZATION_ID = 21   
and c.ORGANIZATION_ID = 21 and c.inventory_item_status_code = 'Active' );
COMMIT ;
END ;

==========================================================================

 

select dmbh,SJDM,flsm,dmzz from ydm where dmbh=3300
union all
select dmbh,SJDM,flsm,dmzz from ydm where dmbh in
(select dmzz from ydm where dmbh=3300)
union all
select dmbh,SJDM,flsm,dmzz from ydm where dmbh in
(select dmzz from ydm where dmbh in (
select dmzz from ydm where dmbh=3300))
union all
select dmbh,SJDM,flsm,dmzz from ydm where dmbh in
(select dmzz from ydm where dmbh in
(select dmzz from ydm where dmbh in (
select dmzz from ydm where dmbh=3300)))
union all
select dmbh,SJDM,flsm,dmzz from ydm where dmbh in
(select dmzz from ydm where dmbh in
(select dmzz from ydm where dmbh in
(select dmzz from ydm where dmbh in (
select dmzz from ydm where dmbh=3300))))
**********************************
select SJDM from ydm where dmbh=3300
union all
select SJDM from ydm where dmbh in
(select dmzz from ydm where dmbh=3300)
union all
select SJDM from ydm where dmbh in
(select dmzz from ydm where dmbh in (
select dmzz from ydm where dmbh=3300))
union all
select SJDM from ydm where dmbh in
(select dmzz from ydm where dmbh in
(select dmzz from ydm where dmbh in (
select dmzz from ydm where dmbh=3300)))
union all
select SJDM from ydm where dmbh in
(select dmzz from ydm where dmbh in
(select dmzz from ydm where dmbh in
(select dmzz from ydm where dmbh in (
select dmzz from ydm where dmbh=3300))))
**************************************************
SELECT COUNT(*) as yhs ,SUM(DF) as df FROM DB2.DFTDF
WHERE (year(rq)*12+month(rq)) between 24015 and 24015
AND dflb=513
and (ZHH,YYH) IN
(SELECT ZHH,YYxH FROM DB2.YDD111 WHERE HYM in
( select SJDM from DB2.ydm where dmbh=3200
union all
select SJDM from DB2.ydm where dmbh in (
select dmzz from DB2.ydm where dmbh=3200)
union all
select SJDM from DB2.ydm where dmbh in (
select dmzz from DB2.ydm where dmbh in (
select dmzz from DB2.ydm where dmbh=3200))
union all
select SJDM from DB2.ydm where dmbh in (
Select dmzz from DB2.ydm where dmbh in (
select dmzz from DB2.ydm where dmbh in (
select dmzz from DB2.ydm where dmbh=3200)))
union all
select SJDM from DB2.ydm where dmbh in (
select dmzz from DB2.ydm where dmbh in (
select dmzz from DB2.ydm where dmbh in (
select dmzz from DB2.ydm where dmbh in (
select dmzz from DB2.ydm where dmbh=3200))))
))
***********************************************
select bcm,bsm,count(bsm) as sl
from (
select  bcm,case
when blx='DXB' and bxh like 'DD%' AND BXH NOT LIKE 'DDS%'
then 'JJB'
else 'DZB'
end as bsm
from jldb) as jldb2
group by bcm,bsm
select bcm,bsm,count(bsm) as sl
from (
select  bcm,case
when blx='DXB' and bxh like 'DD%' AND BXH NOT LIKE 'DDS%'
then 'JJB'
else 'DZB'
end as bsm
from jldb
where bzt='OK' and qyrq between '1999-1-1' and '2003-1-3' ) as jldb2
group by bcm,bsm
****************
select bcm,bsm,bxh,count(bsm) as sl
from (
select  bcm,case
when blx='DXB' and bxh like 'DD%' AND BXH NOT LIKE 'DDS%'
then 'JJB'
else 'DZB'
end as bsm,bxh
from jldb
where bzt='OK' and qyrq between '1999-1-1' and '2003-1-3' ) as jldb2
group by bcm,bxh,bsm
**********************************************
with ttt as (select bcm,bxh,bsm,count(bsm) as sl from (select  bcm,bxh,case  when blx='DXB' and bxh like 'DD%' AND BXH NOT LIKE 'DDS%' then '機械錶' else 'DZB' end
as bsm from jldb where bzt='OK' and qyrq<='2002-2-2'  ) as jldb2 group by bcm,bxh,bsm),
sss as (select bcm,bxh,bsm,count(bsm) as sl1 from (select  bcm,bxh,case  when blx='DXB' and bxh like 'DD%' AND BXH NOT LIKE 'DDS%' then '機械錶' else 'DZB' end
as bsm from jldb where bzt='OK' and qyrq<='2000-1-1'  ) as jldb2 group by bcm,bxh,bsm)
select ttt.bcm,ttt.bxh,ttt.bsm,value(ttt.sl,0) as sl1,value(sss.sl1,0)  as sl2,(value(ttt.sl,0)-value(sss.sl1,0)) as sl3 from ttt full join sss
on sss.bxh=ttt.bxh and sss.bcm=ttt.bcm and sss.bsm=ttt.bsm order by ttt.bcm,ttt.bxh,ttt.bsm

 

====================================================================================

select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
選擇在每一組b值相同的數據中對應的a最大的(換成average或別的函數或子查詢,你會有意想不到的發現)記錄的所有信息.
類似這樣的用法可以用於論壇每月排行榜,每月熱銷產品分析,按科目成績排名,等等.
上面的許多同志對子查詢存在有偏見與誤解,其實在一個好的數據分析程序中,子查詢可以簡化很多程序邏輯.

==========================================================================

select top 1 * from tablename order by newid()

 

select * from
    (select top 5 * from
        (select * from
            (select top 5 *
             from GuestBook
             where 1=1 and Deleted = false
             order by GuestID desc)
        order by GuestID asc)
    order by GuestID asc)
order by GuestID desc

 

 

select * from
    (select top 5 * from
        (select * from
            (select top 5 *
             from GuestBook
             where 1=1 and Deleted = false
             order by GuestID desc)
        order by GuestID asc)
    order by GuestID asc)
order by GuestID desc
這可是一個經典的SQL.
大概再加幾層嵌套,查詢引擎都可以崩潰了..

 

下面的語句不是精華.但是卻是用很多用T-SQL進行開發的同志所不瞭解的..
如何更新nText,Text,Image字段數據..
DECLARE @ptrval binary(16)
SELECT @ptrval = TEXTPTR(LSD_Comment)
   FROM Legal_Dispute WHERE LD_Record_No=25 --得到指定記錄的nText文本指針
UPDATETEXT Legal_Dispute.LSD_Comment @ptrval 0 0 N'Insert Text Content Into Old Content Before'   ---將數據插入在老數據之前.
很多同志在更新nText字段的時候使用一個記錄集取回ASP然後一次性用"UPDATE set fieldname='" & new content & old content & "'"的方式實現..
卻不知道,sql string一次只能提交的string是有限制的,這樣一來,實際的text,ntext永遠也不可能存儲它所支持的最大長度的數據..也遠遠不能達到使用nText字段的目的了..

 

 

================================================================================

 

SELECT * INTO [D:/database.mdb].table4 FROM [C:/database.mdb].table1
前提是ASP用戶對後者有讀權限.
前者有寫權限

 

 

 

 

 

select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名稱='"&strdepartmentname&"' and 專業名稱='"&strprofessionname&"' order by 性別,生源地,高考總成績

 

 

 

請問查詢時時有兩行相同的記錄,如何去掉一行?(其中包含TEXT數據類型)
select  brepeople,姓名,bbs_content.* from bbs_revert,bbs_content,bbs_userinfo where bauthor=職員id and brepeople='m043' and bbs_content.id=bid
顯示“我”參加的主題回覆時,如果本主題回覆了兩次以上,那查詢的結果將有兩行以上的記錄。

 

 

 

 

包含有text類型數據是無法進行消除重複值處理的..
因爲在sql server中text處理爲一個指針..
讀取並比較該字段需要專用的語法
如果要做,建議在存儲過程中做或將該字段排除在比較條件外

 

 

分頁語句
select top 100 * from 表名 where id not in (select top page_no*100 * from 表名)
page_no是程序中的變量

 

================================================================

從數據庫直接輸出XML數據:
select text1,text2 from table1 where text1 like '%alu_ok%' for xml auto

 

 

UPDATE titles
    SET t.ytd_sales = t.ytd_sales + s.qty
    FROM titles t, sales s
    WHERE t.title_id = s.title_id
    AND s.ord_date = (SELECT MAX(sales.ord_date) FROM sales)

 

 

 

DELETE authors
FROM (SELECT TOP 10 * FROM authors) AS t1
WHERE authors.au_id = t1.au_id

 

 

 

初始化表table1
TRUNCATE TABLE table1

Top
回覆人: lxxlily(笨鳥先飛) ( ) 信譽:107 2003-3-28 13:31:43 得分:0

cnuninet(www.helloaspx.com) :暈~~

Top
回覆人: zhjzh_zjz(虛心學習,望多指教) ( ) 信譽:117 2003-3-28 15:11:57 得分:0

從入庫信息表和入庫清單表中得期初期末庫存:
SELECT a.mattype as mattype, a.matname as matname, a.spec as spec,a.indate as indate, a.amount AS lastnum, a.matsum AS lastsum,
      b.amount AS curnum, b.matsum AS cursum
FROM (SELECT a.mattype, a.matname, a.spec, TO_CHAR(a.indate, 'yyyy-mm') AS indate,
              SUM(b.amount) AS amount, SUM(b.matsum) AS matsum
        FROM (SELECT a.mattype, a.matname, a.spec, a.indate, SUM(nvl(a.amount, 0)
                      - NVL(b.amount, 0) + NVL(c.amount, 0)) AS amount, SUM(nvl(a.matsum,
                      0) - NVL(b.matsum, 0) + NVL(c.matsum, 0)) AS matsum
                FROM (SELECT a.mattype AS mattype, a.matname AS matname,
                              a.spec AS spec, b.indate AS indate, a.amount AS amount,
                              a.matsum AS matsum, b.matsource AS matsource
                        FROM materialin a, matin b
                        WHERE b.serial = a.serial) a, matuse b, matback c
                WHERE a.mattype = b.mattype (+) AND a.mattype = c.mattype (+) AND
                      a.matname = b.matname (+) AND a.matname = c.matname (+) AND
                      a.spec = b.spec (+) AND a.spec = c.spec (+) AND
                      a.indate = b.outdate (+) AND a.indate = c.backdate (+)
                GROUP BY a.mattype, a.matname, a.spec, a.indate
                UNION
                SELECT b.mattype, b.matname, b.spec, b.outdate, SUM(nvl(a.amount, 0)
                      - NVL(b.amount, 0) + NVL(c.amount, 0)) AS amount, SUM(nvl(a.matsum,
                      0) - NVL(b.matsum, 0) + NVL(c.matsum, 0)) AS matsum
                FROM (SELECT a.mattype AS mattype, a.matname AS matname,
                              a.spec AS spec, b.indate AS indate, a.amount AS amount,
                              a.matsum AS matsum, b.matsource AS matsource
                        FROM materialin a, matin b
                        WHERE b.serial = a.serial) a, matuse b, matback c
                WHERE a.mattype (+) = b.mattype AND b.mattype = c.mattype (+) AND
                      a.matname (+) = b.matname AND b.matname = c.matname (+) AND
                      a.spec (+) = b.spec AND b.spec = c.spec (+) AND
                      a.indate (+) = b.outdate AND b.outdate = c.backdate (+)
                GROUP BY b.mattype, b.matname, b.spec, b.outdate
                UNION
                SELECT c.mattype, c.matname, c.spec, c.backdate, SUM(nvl(a.amount, 0)
                      - NVL(b.amount, 0) + NVL(c.amount, 0)) AS amount, SUM(nvl(a.matsum,
                      0) - NVL(b.matsum, 0) + NVL(c.matsum, 0)) AS matsum
                FROM (SELECT a.mattype AS mattype, a.matname AS matname,
                              a.spec AS spec, b.indate AS indate, a.amount AS amount,
                              a.matsum AS matsum, b.matsource AS matsource
                        FROM materialin a, matin b
                        WHERE b.serial = a.serial) a, matuse b, matback c
                WHERE a.mattype (+) = c.mattype AND b.mattype (+) = c.mattype AND
                      a.matname (+) = c.matname AND c.matname = b.matname (+) AND
                      c.spec = a.spec (+) AND c.spec = b.spec (+) AND
                      c.backdate = b.outdate (+) AND c.backdate = a.indate (+)
                GROUP BY c.mattype, c.matname, c.spec, c.backdate) a,
                  (SELECT a.mattype, a.matname, a.spec, a.indate, SUM(nvl(a.amount, 0)
                       - NVL(b.amount, 0) + NVL(c.amount, 0)) AS amount, SUM(nvl(a.matsum,
                       0) - NVL(b.matsum, 0) + NVL(c.matsum, 0)) AS matsum
                 FROM (SELECT a.mattype AS mattype, a.matname AS matname,
                               a.spec AS spec, b.indate AS indate, a.amount AS amount,
                               a.matsum AS matsum, b.matsource AS matsource
                         FROM materialin a, matin b
                         WHERE b.serial = a.serial) a, matuse b, matback c
                 WHERE a.mattype = b.mattype (+) AND a.mattype = c.mattype (+) AND
                       a.matname = b.matname (+) AND a.matname = c.matname (+) AND
                       a.spec = b.spec (+) AND a.spec = c.spec (+) AND
                       a.indate = b.outdate (+) AND a.indate = c.backdate (+)
                 GROUP BY a.mattype, a.matname, a.spec, a.indate
                 UNION
                 SELECT b.mattype, b.matname, b.spec, b.outdate AS indate,
                       SUM(nvl(a.amount, 0) - NVL(b.amount, 0) + NVL(c.amount, 0))
                       AS amount, SUM(nvl(a.matsum, 0) - NVL(b.matsum, 0)
                       + NVL(c.matsum, 0)) AS matsum
                 FROM (SELECT a.mattype AS mattype, a.matname AS matname,
                               a.spec AS spec, b.indate AS indate, a.amount AS amount,
                               a.matsum AS matsum, b.matsource AS matsource
                         FROM materialin a, matin b
                         WHERE b.serial = a.serial) a, matuse b, matback c
                 WHERE a.mattype (+) = b.mattype AND b.mattype = c.mattype (+) AND
                       a.matname (+) = b.matname AND b.matname = c.matname (+) AND
                       a.spec (+) = b.spec AND b.spec = c.spec (+) AND
                       a.indate (+) = b.outdate AND b.outdate = c.backdate (+)
                 GROUP BY b.mattype, b.matname, b.spec, b.outdate
                 UNION
                 SELECT c.mattype, c.matname, c.spec, c.backdate AS indate,
                       SUM(nvl(a.amount, 0) - NVL(b.amount, 0) + NVL(c.amount, 0))
                       AS amount, SUM(nvl(a.matsum, 0) - NVL(b.matsum, 0)
                       + NVL(c.matsum, 0)) AS matsum
                 FROM (SELECT a.mattype AS mattype, a.matname AS matname,
                               a.spec AS spec, b.indate AS indate, a.amount AS amount,
                               a.matsum AS matsum, b.matsource AS matsource
                         FROM materialin a, matin b
                         WHERE b.serial = a.serial) a, matuse b, matback c
                 WHERE a.mattype (+) = c.mattype AND b.mattype (+) = c.mattype AND
                       a.matname (+) = c.matname AND c.matname = b.matname (+) AND
                       c.spec = a.spec (+) AND c.spec = b.spec (+) AND
                       c.backdate = b.outdate (+) AND c.backdate = a.indate (+)
                 GROUP BY c.mattype, c.matname, c.spec, c.backdate) b
        WHERE TO_CHAR(b.indate, 'yyyy-mm') <= TO_CHAR(a.indate, 'yyyy-mm') AND
              a.mattype = b.mattype (+) AND a.matname = b.matname (+) AND
              a.spec = b.spec (+)
        GROUP BY a.mattype, a.matname, a.spec, TO_CHAR(a.indate, 'yyyy-mm')) a,
---未完,待續

Top
回覆人: zhjzh_zjz(虛心學習,望多指教) ( ) 信譽:117 2003-3-28 15:13:01 得分:0

---接上面
  (SELECT a.mattype, a.matname, a.spec, TO_CHAR(a.indate, 'yyyy-mm') AS indate,
               SUM(b.amount) AS amount, SUM(b.matsum) AS matsum
         FROM (SELECT a.mattype, a.matname, a.spec, a.indate, SUM(nvl(a.amount, 0)
                       - NVL(b.amount, 0) + NVL(c.amount, 0)) AS amount, SUM(nvl(a.matsum,
                       0) - NVL(b.matsum, 0) + NVL(c.matsum, 0)) AS matsum
                 FROM (SELECT a.mattype AS mattype, a.matname AS matname,
                               a.spec AS spec, b.indate AS indate, a.amount AS amount,
                               a.matsum AS matsum, b.matsource AS matsource
                         FROM materialin a, matin b
                         WHERE b.serial = a.serial) a, matuse b, matback c
                 WHERE a.mattype = b.mattype (+) AND a.mattype = c.mattype (+) AND
                       a.matname = b.matname (+) AND a.matname = c.matname (+) AND
                       a.spec = b.spec (+) AND a.spec = c.spec (+) AND
                       a.indate = b.outdate (+) AND a.indate = c.backdate (+)
                 GROUP BY a.mattype, a.matname, a.spec, a.indate
                 UNION
                 SELECT b.mattype, b.matname, b.spec, b.outdate, SUM(nvl(a.amount, 0)
                       - NVL(b.amount, 0) + NVL(c.amount, 0)) AS amount, SUM(nvl(a.matsum,
                       0) - NVL(b.matsum, 0) + NVL(c.matsum, 0)) AS matsum
                 FROM (SELECT a.mattype AS mattype, a.matname AS matname,
                               a.spec AS spec, b.indate AS indate, a.amount AS amount,
                               a.matsum AS matsum, b.matsource AS matsource
                         FROM materialin a, matin b
                         WHERE b.serial = a.serial) a, matuse b, matback c
                 WHERE a.mattype (+) = b.mattype AND b.mattype = c.mattype (+) AND
                       a.matname (+) = b.matname AND b.matname = c.matname (+) AND
                       a.spec (+) = b.spec AND b.spec = c.spec (+) AND
                       a.indate (+) = b.outdate AND b.outdate = c.backdate (+)
                 GROUP BY b.mattype, b.matname, b.spec, b.outdate
                 UNION
                 SELECT c.mattype, c.matname, c.spec, c.backdate, SUM(nvl(a.amount, 0)
                       - NVL(b.amount, 0) + NVL(c.amount, 0)) AS amount, SUM(nvl(a.matsum,
                       0) - NVL(b.matsum, 0) + NVL(c.matsum, 0)) AS matsum
                 FROM (SELECT a.mattype AS mattype, a.matname AS matname,
                               a.spec AS spec, b.indate AS indate, a.amount AS amount,
                               a.matsum AS matsum, b.matsource AS matsource
                         FROM materialin a, matin b
                         WHERE b.serial = a.serial) a, matuse b, matback c
                 WHERE a.mattype (+) = c.mattype AND b.mattype (+) = c.mattype AND
                       a.matname (+) = c.matname AND c.matname = b.matname (+) AND
                       c.spec = a.spec (+) AND c.spec = b.spec (+) AND
                       c.backdate = b.outdate (+) AND c.backdate = a.indate (+)
                 GROUP BY c.mattype, c.matname, c.spec, c.backdate) a,
                   (SELECT a.mattype, a.matname, a.spec, a.indate, SUM(nvl(a.amount, 0)
                        - NVL(b.amount, 0) + NVL(c.amount, 0)) AS amount,
                        SUM(nvl(a.matsum, 0) - NVL(b.matsum, 0) + NVL(c.matsum, 0))
                        AS matsum
                  FROM (SELECT a.mattype AS mattype, a.matname AS matname,
                                a.spec AS spec, b.indate AS indate, a.amount AS amount,
                                a.matsum AS matsum, b.matsource AS matsource
                          FROM materialin a, matin b
                          WHERE b.serial = a.serial) a, matuse b, matback c
                  WHERE a.mattype = b.mattype (+) AND a.mattype = c.mattype (+) AND
                        a.matname = b.matname (+) AND a.matname = c.matname (+) AND
                        a.spec = b.spec (+) AND a.spec = c.spec (+) AND
                        a.indate = b.outdate (+) AND a.indate = c.backdate (+)
                  GROUP BY a.mattype, a.matname, a.spec, a.indate
                  UNION
                  SELECT b.mattype, b.matname, b.spec, b.outdate AS indate,
                        SUM(nvl(a.amount, 0) - NVL(b.amount, 0) + NVL(c.amount, 0))
                        AS amount, SUM(nvl(a.matsum, 0) - NVL(b.matsum, 0)
                        + NVL(c.matsum, 0)) AS matsum
                  FROM (SELECT a.mattype AS mattype, a.matname AS matname,
                                a.spec AS spec, b.indate AS indate, a.amount AS amount,
                                a.matsum AS matsum, b.matsource AS matsource
                          FROM materialin a, matin b
                          WHERE b.serial = a.serial) a, matuse b, matback c
                  WHERE a.mattype (+) = b.mattype AND b.mattype = c.mattype (+) AND
                        a.matname (+) = b.matname AND b.matname = c.matname (+) AND
                        a.spec (+) = b.spec AND b.spec = c.spec (+) AND
                        a.indate (+) = b.outdate AND b.outdate = c.backdate (+)
                  GROUP BY b.mattype, b.matname, b.spec, b.outdate
                  UNION
                  SELECT c.mattype, c.matname, c.spec, c.backdate AS indate,
                        SUM(nvl(a.amount, 0) - NVL(b.amount, 0) + NVL(c.amount, 0))
                        AS amount, SUM(nvl(a.matsum, 0) - NVL(b.matsum, 0)
                        + NVL(c.matsum, 0)) AS matsum
                  FROM (SELECT a.mattype AS mattype, a.matname AS matname,
                                a.spec AS spec, b.indate AS indate, a.amount AS amount,
                                a.matsum AS matsum, b.matsource AS matsource
                          FROM materialin a, matin b
                          WHERE b.serial = a.serial) a, matuse b, matback c
                  WHERE a.mattype (+) = c.mattype AND b.mattype (+) = c.mattype AND
                        a.matname (+) = c.matname AND c.matname = b.matname (+) AND
                        c.spec = a.spec (+) AND c.spec = b.spec (+) AND
                        c.backdate = b.outdate (+) AND c.backdate = a.indate (+)
                  GROUP BY c.mattype, c.matname, c.spec, c.backdate) b
         WHERE TO_CHAR(b.indate, 'yyyy-mm') <= TO_CHAR(a.indate, 'yyyy-mm') AND
               a.mattype = b.mattype (+) AND a.matname = b.matname (+) AND
               a.spec = b.spec (+)
         GROUP BY a.mattype, a.matname, a.spec, TO_CHAR(a.indate, 'yyyy-mm'))
      b
WHERE a.mattype = b.mattype (+) AND a.matname = b.matname (+) AND
      a.spec = b.spec (+) AND TO_DATE(a.indate, 'yyyy-mm')
      = ADD_MONTHS(TO_DATE(b.indate, 'yyyy-mm'), 1)
--語句完畢

Top
回覆人: zhjzh_zjz(虛心學習,望多指教) ( ) 信譽:117 2003-3-28 15:15:27 得分:0

上面用的是Oracle數據庫。由於涉及到雙向外連接,所以很長

Top
回覆人: zhongjz(小海螺) ( ) 信譽:105 2003-3-28 15:46:39 得分:5

從數據庫中去一年的各單位電話費統計(電話費定額賀電化肥清單兩個表來源)
SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FRI,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) AS MAY,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) AS JUL,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) AS AGU,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) AS OCT,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) AS NOV,
      SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DEC
FROM (SELECT a.userper, a.tel, a.standfee, b.telfeedate, b.factration
        FROM TELFEESTAND a, TELFEE b
        WHERE a.tel = b.telfax) a
GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy')

Top
回覆人: zzlcn() ( ) 信譽:86 2003-3-28 17:24:15 得分:0

請問如果有 10 萬 條數據 該怎麼查詢,我一查詢就出錯
如果是3萬條還可以接受,但是到了3萬條以上就不穩定!
我用了 sqlserver 也沒有用
10 萬條數據來一次分頁顯示居然要 10-15秒的超長時間!!!!!
如果在分頁顯示中查詢,立即告吹!!!
asp 和 asp.net 我都試用過(+ ms sqlserver)
均是如此
是不是 asp 和 asp.net 都是垃圾中的垃圾!!!

Top
回覆人: yonghengdizhen(剎那←→永恆) ( ) 信譽:112 2003-3-28 17:40:16 得分:0

大量複雜的數據分析,在結構設計上就應該要考慮進去.適當設置一些字段或表存儲分段統計信息.
否則再好的數據庫都撐不住的..

Top
回覆人: sishuo(思鑠) ( ) 信譽:100 2003-3-29 9:39:01 得分:0

好,收了。

Top
回覆人: huijunzi(Cyril) ( ) 信譽:97 2003-3-30 16:49:18 得分:5

有意思,我也來一個,解決跳號的問題:
select min(bh)+1 from Table1 where bh+1 not in(select bh from Table1)

Top
回覆人: yonghengdizhen(剎那←→永恆) ( ) 信譽:112 2003-3-31 9:50:13 得分:0

進行復雜數據分析還有一種趨勢那就是使用數據倉庫(Data Houseware)和OLAP.

Top
回覆人: bkss(白開水水) ( ) 信譽:100 2003-4-1 11:09:20 得分:0

哈哈,我也來湊熱鬧。。。
DECLARE @QuitMedNo char(13)
DECLARE @PreRecipeNo char(13),@PreRecipeXNo char(3)
Declare @zyxh char(12),@kdks char(8)
DECLARE @DepotName char(10)
BEGIN TRAN
if not exists(select 擺藥單號 from  擺藥單 where 狀態='00' and 擺藥單號=@PutMedNo)
begin
  return 0
end
EXECUTE Sp_GetBillNo @QuitMedNo output,'D'
INSERT INTO [退藥]([退藥序號], [操作員], [退藥時間], [退藥說明])
     VALUES(@QuitMedNo,@Operator,cast(getdate() as smalldatetime),@Intro)
if (@@error<>0 or @@rowcount=0)
    begin
  rollback transaction
  raiserror('插入退藥表失敗',16,-1)
  return 1
    end
DECLARE PutMed_Cursor CURSOR FOR
SELECT DISTINCT A.處方號,A.處方序號,B.住院序號,B.科室,C.名稱 as 擺藥區 FROM 擺藥單明細 A inner join 處方 B ON A.處方號 =B.處方號 AND A.處方序號=B.處方序號
INNER JOIN 擺藥區 C ON B.擺藥區=C.代碼 WHERE A.擺藥單號=@PutMedNo
OPEN PutMed_Cursor
FETCH NEXT FROM PutMed_Cursor INTO @PreRecipeNo, @PreRecipeXNo,@zyxh,@kdks,@DepotName
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC usp_QuitBillDetail @QuitMedNo ,@PutMedNo,@PreRecipeNo,@PreRecipeXNo,@zyxh,@kdks,@fsks,@DepotName
--另一個存儲過程
if (@@error<>0)
    begin
  rollback transaction
  CLOSE PutMed_Cursor
  --DEALLOCATE PutMed_Cursor
  raiserror('更新退單處方明細失敗',16,-1)
  return 1
    end
    FETCH NEXT FROM PutMed_Cursor INTO @PreRecipeNo, @PreRecipeXNo,@zyxh,@kdks
END

Top
回覆人: bkss(白開水水) ( ) 信譽:100 2003-4-1 11:21:36 得分:10

個人認爲,偶寫了這麼久的SQL,只說語法很無聊,語句的涵義與靈活的組合很重要,下面這個是寫的一個藥品管理的存儲過程的一句,很經典:
UPDATE 藥房庫存 SET 庫存數量=庫存數量-B.用量 FROM [藥房庫存] A ,
( Select sum(用量) as 用量,藥品價碼 FROM 處方項
    WHERE 處方號=@RecipeNo AND 處方序號=@RecipeXNo
  GROUP BY 藥品價碼
) B  WHERE A.藥品價碼=B.藥品價碼 AND A.庫房名稱=@DepotName
這是一個參照B表將A表中庫存一一修改,而B表中存在一個求和,A表也與B表關聯,同時要滿足A表條件。

Top
回覆人: yonghengdizhen(剎那←→永恆) ( ) 信譽:112 2003-4-1 11:26:50 得分:0

是的..SQL中應用的經典應該只考慮SQL查詢的應用..
存儲過程已經使用控制語法操作了,和別的程序設計語言設計算法沒什麼區別..

Top
回覆人: yexiao(葉開) ( ) 信譽:100 2003-4-1 14:11:35 得分:0

gz

Top
回覆人: rong451(rong451) ( ) 信譽:100 2003-4-1 15:43:10 得分:0

very good 我一定收藏!!!

Top
回覆人: gengwei80(gengwei) ( ) 信譽:99 2003-4-2 9:40:27 得分:0

create or replace procedure p_table
(
p_g3e_fno g3e_features_optable.g3e_fno%type
)
as
v_xlmc VARCHAR2(12);
v_XLDM VARCHAR2(5);
cursor c_table IS
select g3e_table from g3e_component where g3e_cno=(select g3e_primaryattributecno
  from g3e_features_optable where g3e_fno=p_g3e_fno);
type t_sor is ref cursor;
v_sor t_sor;
str varchar2(50);
begin
  for v_table in  c_table  loop
   str:='select xlmc,xldm from '||v_table.g3e_table;
    dbms_output.put_line(v_table.g3e_table);
   open v_sor for str;
   loop
   fetch v_sor into v_xlmc,v_xldm;
    dbms_output.put_line('hello g3e_table');
    dbms_output.put_line(v_xlmc||' '||v_xldm);
   exit when v_sor%notfound;
   end loop;
   close v_sor;
  end loop;
end p_table;
 

個人主頁 | 引用 | 返回  
 


回覆:[分享]SQl語句學習專題
晴天發表評論於2004-10-26 11:18:00 
Top
回覆人: bloodsha(huangxi) ( ) 信譽:98 2003-4-3 8:58:06 得分:0

Top
回覆人: csdntoll(低調慣了) ( ) 信譽:147 2003-4-3 11:40:16 得分:0

回覆人: csdntoll(toll) ( ) 信譽:100  2003-3-21 10:02:00  得分:0
 
我決定:把200分中的180分,獎給貼出最精妙的SQL的高手!
-------------------------------------------------------------------
想揭貼,可是爲難了:
我要遵守自己說過的話(如上),可我菜,鑑別能力有限,怎麼辦?

Top
回覆人: wilsonGao(笑傲江湖) ( ) 信譽:101 2003-4-3 13:29:11 得分:0

如何用一句語句實現兩個表的關鍵字倒換?

Top
回覆人: pyz8000(黑洞) ( ) 信譽:101 2003-4-3 18:48:04 得分:0

暈倒,,,收藏~~

Top
回覆人: chinahuman(枯) ( ) 信譽:105 2003-4-3 18:50:07 得分:0

有沒有辦法一條語句實現以下功能:比如一個新聞系統裏有很多個管理員,在添加過程中每條都記錄管理員的ID,現想根據用戶ID來實現統計它們添加的條數?

Top
回覆人: yonghengdizhen(剎那←→永恆) ( ) 信譽:112 2003-4-3 19:29:42 得分:0

to  chinahuman(枯)
一個group by和一個聚合函數(count)就可以了..
select count(Title) from news group by creade_by
如果需要得到除非聚合字段外的詳細信息那麼就得使用相關子查詢了..

Top
回覆人: ld_key(什麼名字也想) ( ) 信譽:100 2003-4-4 9:59:55 得分:0

markable

Top
回覆人: superdullwolf(超級大笨狼) ( ) 信譽:99 2003-4-4 22:04:45 得分:0

看我的,四表聯查問題:
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 .....

Top
回覆人: superdullwolf(超級大笨狼) ( ) 信譽:99 2003-4-4 22:11:39 得分:10

應聘做了一個小程序,在多人中表現最好,高興,散分100!!是關於sql查詢顯示的
題目大概是SQL     表1:班級/老師    表2學生/班級        表三數學/學生      表4語文/學生
查詢顯示結果大概是這樣:
班級1  老師1
學生1   數學  語文
學生2   數學  語文
班級2  老師1
學生1   數學  語文
學生2   數學  語文
不及格:
學生1   班級1 老師1  數學  語文
學生1   班級1 老師1  數學  語文
還有錄入學生和成績的界面
用到了多表之間的inner join  on 語句,而且我顯示的很漂亮,靠,做了一下午,我好想抽菸啊,當時:)
看我的,四表聯查問題:
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 .....

Top
回覆人: yonghengdizhen(剎那←→永恆) ( ) 信譽:112 2003-4-7 9:43:55 得分:0

左連接右連接內連接全部上馬,的確經典哦.
據說你寫過上萬行代碼,大概這就是最經典的一段代碼了吧.

Top
回覆人: zady(森林木) ( ) 信譽:100 2003-4-7 14:56:01 得分:5

需求:
得到表中最小的未使用的ID號。
例:
table Name:Handle
HandleID
--------
1
2
5
6
7
--5 Records
執行結果須爲3
解決:
SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) as HandleID
FROM  Handle
WHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)

Top
回覆人: Iamfish(呆魚) ( ) 信譽:105 2003-4-8 13:36:00 得分:80

兩臺SQL服務器上的一個數據表同步!
drop procedure dbSync
GO
/*     數據同步                      */
CREATE PROCEDURE dbSync
       @sTabelName  varchar(255),    --要同步的表名
       @sKeyField   varchar(255),    --關鍵字段
       @sServer     varchar(255),    --服務器名稱或IP
       @sUserName   varchar(255),    --登錄到服務器的用戶名,一般爲sa
       @sPassWord   varchar(32)      --用戶登錄到服務器的密碼
AS
   /*刪除臨時表*/
  if exists (select * from dbo.sysobjects where id = object_id(N'tempTbl') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  drop table tempTbl
 
               
  declare @sql VARCHAR(2000)
  /*把表@sTabelName[遠程]的數據拷貝到臨時表*/
  
  set @sql='select * into tempTbl from '
  set @sql=@sql + ' OPENDATASOURCE( '
  set @sql=@sql + '''SQLOLEDB.1'','
  set @sql=@sql + '''Persist Security Info=True;User ID=' + @sUserName
  set @sql=@sql + ';Password=' + @sPassWord
  set @sql=@sql + ';Initial Catalog=toys;Data Source=' + @sServer
  set @sql=@sql + ''').toys.dbo.'+@sTabelName
  EXEC(@sql) 
 
  /* 把@sTabelName[本地]中的@sTabelName[遠程]表中沒有的數據插入到臨時表中*/
  set @sql='insert into tempTbl select * from '+@sTabelName+' where ['+@sKeyField+'] not in (select ['+@sKeyField+'] from tempTbl)'
  EXEC(@sql)
 
  /*清空表@sTabelName[本地]*/
  set @sql='truncate table '+@sTabelName
  EXEC(@sql)
 
  --取得列名
  declare @MySql VARCHAR(2000)
  set @MySql=''
  declare @title varchar(20)
  DECLARE titles_cursor CURSOR FOR
  SELECT name from syscolumns where id=object_id(@sTabelName)
  OPEN titles_cursor
  FETCH NEXT FROM titles_cursor INTO @title
  WHILE @@FETCH_STATUS = 0
  BEGIN
    if @title<>'id'
    begin
      if @MySql = ''
        set @MySql = @MySql + @title
      else
        set @MySql = @MySql + ',' + @title
    end
    FETCH NEXT FROM titles_cursor INTO @title
  END
  CLOSE titles_cursor
  DEALLOCATE titles_cursor
  --取列名結束
  /*把臨時表的內容插入到表@sTabelName[本地]*/
  set @sql='insert into '+@sTabelName+' select '+@MySql+' from tempTbl'
  EXEC(@sql)
  /*刪除臨時表*/
  if exists (select * from dbo.sysobjects where id = object_id(N'tempTbl') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  drop table tempTbl
GO

Top
回覆人: lizongqi(英雄啊) ( ) 信譽:100 2003-4-8 15:02:07 得分:0

收藏ing..

Top
回覆人: Swanzy(志遠) ( ) 信譽:100 2003-4-8 18:06:08 得分:0

收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏收藏

Top
回覆人: zhyx21century(zhyx) ( ) 信譽:100 2003-4-9 11:19:17 得分:0

UP

Top
回覆人: kingkout(kingkout) ( ) 信譽:100 2003-4-9 14:05:22 得分:0

GZ

Top
回覆人: xxl0914(microlin) ( ) 信譽:105 2003-4-9 14:23:49 得分:0

用sql語句對不同的幾張表做笛卡爾積

Top
回覆人: lizongqi(英雄啊) ( ) 信譽:100 2003-4-10 10:44:56 得分:0

收藏ing....

Top
回覆人: xieyj(快樂天使) ( ) 信譽:103 2003-4-11 8:36:16 得分:5

查找一個已知字段所在的表名:
Select Name From Sysobjects Where Id in (select id from syscolumns where name='字段名')

Top
回覆人: leeeel(三角比三星差?) ( ) 信譽:100 2003-4-11 8:55:15 得分:0

強列地反對多個 Select 套在一個語句中使用 !

Top
回覆人: zhaoming1112(隨風往事) ( ) 信譽:100 2003-4-11 11:44:58 得分:0

SELECT套在一起,好用,我不反對。

Top
回覆人: csdnshao(如水人生) ( ) 信譽:105 2003-4-11 11:50:17 得分:0

mark

Top
回覆人: cuoban(搓板) ( ) 信譽:100 2003-4-11 14:57:58 得分:5

前些日子剛寫的
說明:進行判斷,得出兩種應納稅額。
SELECT 姓名, BM AS 部門, SF1 AS 實發, SFZH AS 身份證, Jjje AS 獎金, SF1 + Jjje - 860 AS 應納所得, XL AS 學歷, NTG AS 性別, GWW AS 職務, round((CASE WHEN (SF1 + Jjje - 860 < 500) THEN (SF1 + Jjje - 860) * 0.05 ELSE CASE WHEN (SF1 + Jjje - 860 > 500) THEN (SF1 + GJJ - 860) * 0.10 - 25 END END), 2) AS 應納稅額 FROM GZ20029 WHERE (sf1 + Jjje) > 860

Top
回覆人: lanyd(山雨欲來風滿樓) ( ) 信譽:100 2003-4-11 16:13:44 得分:0

強!
看完這些,我也成sql專家了,哈哈

Top
回覆人: 750906(750906) ( ) 信譽:105 2003-4-11 16:29:33 得分:0

SELECT A.*, B.ColumnString AS ColumnString,
          (SELECT COUNT(StatuteId)
         FROM StatuteLib_Body
         WHERE ColumnId IN
                   (SELECT ColumnId
                  FROM StatuteLib_ColumnString
                  WHERE ColumnString LIKE B.ColumnString + '%')) AS StatuteCount
FROM cw25109.StatuteLib_Column A INNER JOIN
      cw25109.StatuteLib_ColumnString B ON A.ColumnId = B.ColumnId

Top
回覆人: Swanzy(志遠) ( ) 信譽:100 2003-4-12 11:04:11 得分:0

如何查詢表中爲空值的所有字段內容?

Top
回覆人: xdk(冼德錕) ( ) 信譽:97 2003-4-12 11:37:01 得分:0

好...我是來搶分加收藏的...

Top
回覆人: yu_shi_bin(清風) ( ) 信譽:100 2003-4-14 13:13:18 得分:0

mark

Top
回覆人: sohi(阿梓) ( ) 信譽:100 2003-4-15 8:20:17 得分:0

good

Top
回覆人: laker_tmj(laker) ( ) 信譽:100 2003-4-15 12:22:45 得分:0

up

Top
回覆人: cboy2003(三碗(cpubook.com)) ( ) 信譽:100 2003-4-15 12:26:13 得分:0

不錯
全部收了,我把常用的,最最普通的貼出來大家看看吧,我是對上面的某些半知,對自己貼的
還能用用,哈哈
SQL常用命令使用方法:
(1) 數據記錄篩選:
sql="select * from 數據表 where 字段名=字段值 order by 字段名 [desc]"
sql="select * from 數據表 where 字段名 like '%字段值%' order by 字段名 [desc]"
sql="select top 10 * from 數據表 where 字段名 order by 字段名 [desc]"
sql="select * from 數據表 where 字段名 in ('值1','值2','值3')"
sql="select * from 數據表 where 字段名 between 值1 and 值2"
(2) 更新數據記錄:
sql="update 數據表 set 字段名=字段值 where 條件表達式"
sql="update 數據表 set 字段1=值1,字段2=值2 …… 字段n=值n where 條件表達式"
(3) 刪除數據記錄:
sql="delete from 數據表 where 條件表達式"
sql="delete from 數據表" (將數據表所有記錄刪除)
(4) 添加數據記錄:
sql="insert into 數據表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)"
sql="insert into 目標數據表 select * from 源數據表" (把源數據表的記錄添加到目標數據表)
(5) 數據記錄統計函數:
AVG(字段名) 得出一個表格欄平均值
COUNT(*|字段名) 對數據行數的統計或對某一欄有值的數據行數統計
MAX(字段名) 取得一個表格欄最大的值
MIN(字段名) 取得一個表格欄最小的值
SUM(字段名) 把數據欄的值相加
引用以上函數的方法:
sql="select sum(字段名) as 別名 from 數據表 where 條件表達式"
set rs=conn.excute(sql)
用 rs("別名") 獲取統的計值,其它函數運用同上。
(5) 數據表的建立和刪除:
CREATE TABLE 數據表名稱(字段1 類型1(長度),字段2 類型2(長度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now())
DROP TABLE 數據表名稱 (永久性刪除一個數據表)

Top
回覆人: zigzag81814() ( ) 信譽:100 2003-4-15 13:09:38 得分:0

Top
回覆人: skyswan(施望) ( ) 信譽:100 2003-4-15 13:33:36 得分:0

怎麼都是用在Sql Server上的。
有好多是不能用在Oracle的PL/SQL上的
 
 
SQL語法參考手冊
2001年3月22日
DB2 提供了關連式資料庫的查詢語言 SQL (Structured Query Language),是一種非常口語化、既易學又易懂的語法。此一語言幾乎是每個資料庫系統都必須提供的,用以表示關連式的操作,包含了資料的定義(DDL)以及資料的處理(DML)。SQL原來拼成SEQUEL,這語言的原型以"系統 R"的名字在 IBM 聖荷西實驗室完成,經過IBM內部及其他的許多使用性及效率測試,其結果相當令人滿意,並決定在系統R 的技術基礎發展出來 IBM 的產品。而且美國國家標準學會(ANSI)及國際標準化組織(ISO)在1987遵循一個幾乎是以 IBM SQL 爲基礎的標準關連式資料語言定義。
一、資料定義 DDL(Data Definition Language)
資料定語言是指對資料的格式和形態下定義的語言,他是每個資料庫要建立時候時首先要面對的,舉凡資料分哪些表格關係、表格內的有什麼欄位主鍵、表格和表格之間互相參考的關係等等,都是在開始的時候所必須規劃好的。
1、建表格:
CREATE TABLE table_name(
column1 DATATYPE [NOT NULL] [NOT NULL PRIMARY KEY],
column2 DATATYPE [NOT NULL],
...)
說明: 
DATATYPE --是資料的格式,詳見表。
NUT NULL --可不可以允許資料有空的(尚未有資料填入)。
PRIMARY KEY --是本表的主鍵。
2、更改表格 
ALTER TABLE table_name
ADD COLUMN column_name DATATYPE
說明:增加一個欄位(沒有刪除某個欄位的語法。
ALTER TABLE table_name
ADD PRIMARY KEY (column_name)
說明:更改表得的定義把某個欄位設爲主鍵。
ALTER TABLE table_name
DROP PRIMARY KEY (column_name)
說明:把主鍵的定義刪除。
3、建立索引 
CREATE INDEX index_name ON table_name (column_name)
說明:對某個表格的欄位建立索引以增加查詢時的速度。
4、刪除 
DROP table_name
DROP index_name
二、的資料形態 DATATYPEs
smallint
16 位元的整數。
interger
32 位元的整數。
decimal(p,s)
p 精確值和 s 大小的十進位整數,精確值p是指全部有幾個數(digits)大小值,s是指小數
點後有幾位數。如果沒有特別指定,則系統會設爲 p=5; s=0 。
float
32位元的實數。
double
64位元的實數。
char(n)
n 長度的字串,n不能超過 254。
varchar(n)
長度不固定且其最大長度爲 n 的字串,n不能超過 4000。
graphic(n)
和 char(n) 一樣,不過其單位是兩個字元 double-bytes, n不能超過127。這個形態是爲
了支援兩個字元長度的字體,例如中文字。
vargraphic(n)
可變長度且其最大長度爲 n 的雙字元字串,n不能超過 2000。
date
包含了 年份、月份、日期。
time
包含了 小時、分鐘、秒。
timestamp
包含了 年、月、日、時、分、秒、千分之一秒。
三、資料操作 DML (Data Manipulation Language)
資料定義好之後接下來的就是資料的操作。資料的操作不外乎增加資料(insert)、查詢資料(query)、更改資料(update) 、刪除資料(delete)四種模式,以下分 別介紹他們的語法:
1、增加資料:
INSERT INTO table_name (column1,column2,...)
VALUES ( value1,value2, ...)
說明:
1.若沒有指定column 系統則會按表格內的欄位順序填入資料。
2.欄位的資料形態和所填入的資料必須吻合。
3.table_name 也可以是景觀 view_name。
INSERT INTO table_name (column1,column2,...)
SELECT columnx,columny,... FROM another_table
說明:也可以經過一個子查詢(subquery)把別的表格的資料填入。
2、查詢資料:
基本查詢
SELECT column1,columns2,...
FROM table_name
說明:把table_name 的特定欄位資料全部列出來
SELECT *
FROM table_name
WHERE column1 = xxx
[AND column2 > yyy] [OR column3 <> zzz]
說明:
1.'*'表示全部的欄位都列出來。
2.WHERE 之後是接條件式,把符合條件的資料列出來。
SELECT column1,column2
FROM table_name
ORDER BY column2 [DESC]
說明:ORDER BY 是指定以某個欄位做排序,[DESC]是指從大到小排列,若沒有指明,則是從小到大
排列
組合查詢
組合查詢是指所查詢得資料來源並不只有單一的表格,而是聯合一個以上的
表格才能夠得到結果的。
SELECT *
FROM table1,table2
WHERE table1.colum1=table2.column1
說明:
1.查詢兩個表格中其中 column1 值相同的資料。
2.當然兩個表格相互比較的欄位,其資料形態必須相同。
3.一個複雜的查詢其動用到的表格可能會很多個。
整合性的查詢:
SELECT COUNT (*)
FROM table_name
WHERE column_name = xxx
說明:
查詢符合條件的資料共有幾筆。
SELECT SUM(column1)
FROM table_name
說明:
1.計算出總和,所選的欄位必須是可數的數字形態。
2.除此以外還有 AVG() 是計算平均、MAX()、MIN()計算最大最小值的整合性查詢。
SELECT column1,AVG(column2)
FROM table_name
GROUP BY column1
HAVING AVG(column2) > xxx
說明:
1.GROUP BY: 以column1 爲一組計算 column2 的平均值必須和 AVG、SUM等整合性查詢的關鍵字
一起使用。
2.HAVING : 必須和 GROUP BY 一起使用作爲整合性的限制。
複合性的查詢
SELECT *
FROM table_name1
WHERE EXISTS (
SELECT *
FROM table_name2
WHERE conditions )
說明:
1.WHERE 的 conditions 可以是另外一個的 query。
2.EXISTS 在此是指存在與否。
SELECT *
FROM table_name1
WHERE column1 IN (
SELECT column1
FROM table_name2
WHERE conditions )
說明: 
1. IN 後面接的是一個集合,表示column1 存在集合裏面。
2. SELECT 出來的資料形態必須符合 column1。
其他查詢
SELECT *
FROM table_name1
WHERE column1 LIKE 'x%'
說明:LIKE 必須和後面的'x%' 相呼應表示以 x爲開頭的字串。
SELECT *
FROM table_name1
WHERE column1 IN ('xxx','yyy',..)
說明:IN 後面接的是一個集合,表示column1 存在集合裏面。
SELECT *
FROM table_name1
WHERE column1 BETWEEN xx AND yy
說明:BETWEEN 表示 column1 的值介於 xx 和 yy 之間。
3、更改資料:
UPDATE table_name
SET column1='xxx'
WHERE conditoins
說明:
1.更改某個欄位設定其值爲'xxx'。
2.conditions 是所要符合的條件、若沒有 WHERE 則整個 table 的那個欄位都會全部被更改。
4、刪除資料:
DELETE FROM table_name
WHERE conditions
說明:刪除符合條件的資料。
說明:關於WHERE條件後面如果包含有日期的比較,不同數據庫有不同的表達式。具體如下:
(1)如果是ACCESS數據庫,則爲:WHERE mydate>#2000-01-01#
(2)如果是ORACLE數據庫,則爲:WHERE mydate>cast('2000-01-01' as date)
或:WHERE mydate>to_date('2000-01-01','yyyy-mm-dd')
在Delphi中寫成:
thedate='2000-01-01';
query1.SQL.add('select * from abc where mydate>cast('+''''+thedate+''''+' as date)');
如果比較日期時間型,則爲:
WHERE mydatetime>to_date('2000-01-01 10:00:01','yyyy-mm-dd hh24:mi:ss')

Top
回覆人: qxm(qxm) ( ) 信譽:100 2003-4-15 15:09:04 得分:0

不錯

Top
回覆人: dj0430() ( ) 信譽:100 2003-4-15 15:22:27 得分:0

表達式求值:
   直接發送 Select(1+2)*3
   或者     Select top 1 (1+2)*3 from TableName
歡迎前去討論“各種語言的表達式求值問題”
http://expert.csdn.net/Expert/topic/1661/1661139.xml?temp=.6748773

Top
回覆人: sanzfm(珊珊來遲) ( ) 信譽:100 2003-4-15 15:28:52 得分:0

收藏收藏

Top
回覆人: baiyunfei(埋頭苦學) ( ) 信譽:97 2003-4-15 17:03:36 得分:0

恩,埋頭學習中!

Top
回覆人: weijiajia11() ( ) 信譽:97 2003-4-15 17:11:17 得分:0

太多了

Top
回覆人: imports(小雞快跑!Q_Q) ( ) 信譽:99 2003-4-15 17:20:34 得分:0

不懂!
Mark!

Top
回覆人: xboy(一劍如故) ( ) 信譽:100 2003-4-15 18:57:09 得分:0

up

Top
回覆人: wlhtake(正在調試) ( ) 信譽:99 2003-4-15 21:40:19 得分:0

我考~! 這些人貼sql又不說明適用數據庫,容易搞暈的哈
再說了,這些sql太常用了,何來精妙之言?
最精妙的語句莫過於 SELECT * FROM 

Top
回覆人: reddg(reddg) ( ) 信譽:100 2003-4-15 23:21:48 得分:0

浪費時間

Top
回覆人: Tomcat4(Tom) ( ) 信譽:105 2003-4-16 9:47:15 得分:0

up!

Top
回覆人: junyh(阿俊) ( ) 信譽:100 2003-4-16 10:03:03 得分:0

學習先

Top
回覆人: lizongqi(英雄啊) ( ) 信譽:100 2003-4-16 10:36:57 得分:0

Top
回覆人: Swanzy(志遠) ( ) 信譽:100 2003-4-16 13:19:58 得分:0

常用的就不貼了吧?
我絕對支持  wlhtake(正在調試) !
“最精妙的語句莫過於 SELECT * FROM  ”!!!!

Top
回覆人: chenquan(嘉威王子) ( ) 信譽:100 2003-4-16 13:25:20 得分:5

我也來,以前給一個網友的貼
(select a,b,c,avg(s) as Mavg,count(s) Mcount from cq_tt
group by a,b,c) --c小計
union
(select a,'小計' b,'' c,sum(Mavg) Mavg,sum(Mcount) Mcount from
(select a,b,c,avg(s) as Mavg,count(s) Mcount from cq_tt group by a,b,c)
as chen
group by a) --A小計
union
(select a,b,'小計' c,sum(Mavg) Mavg,sum(Mcount) Mcount from
(select a,b,c,avg(s) as Mavg,count(s) Mcount from cq_tt group by a,b,c)
as chen
group by a,b) --B小計

Top
回覆人: kjijian(!魔法師) ( ) 信譽:100 2003-4-16 15:18:51 得分:0

mark.

Top
回覆人: tangyong_delphi() ( ) 信譽:99 2003-4-16 21:42:34 得分:0

經典收藏。

Top
回覆人: donglw(天行) ( ) 信譽:100 2003-4-17 1:28:45 得分:0

值得收藏!

Top
回覆人: williy(肩扛乾糧找組織) ( ) 信譽:100 2003-4-17 9:07:31 得分:0

嗯!好!!!

Top
回覆人: brat365(我就是五億探長--雷洛) ( ) 信譽:97 2003-4-17 10:21:09 得分:0

學習了不少,感謝大家做出的貢獻

Top
回覆人: lilyfirstone(永恆......) ( ) 信譽:100 2003-4-17 10:45:29 得分:0

mark

Top
回覆人: pengdali(大力 V2.0) ( ) 信譽:100 2003-4-17 12:06:07 得分:0

哈哈。。太簡單了!哈哈。。

Top
回覆人: yonghengdizhen(剎那←→永恆) ( ) 信譽:112 2003-4-17 12:34:25 得分:0

to  pengdali(大力)
怎麼有空到這兒瞧..
WEB這東東可是沒什麼好玩的耶.偶都要改行了

Top
回覆人: rena0504(麗娜) ( ) 信譽:100 2003-4-17 12:48:34 得分:0

select a,b,c
from a
where a IN
     (select d from b )

Top
回覆人: readersm68(地主) ( ) 信譽:100 2003-4-17 15:31:09 得分:0

結束。

Top
回覆人: hcgui(浪子) ( ) 信譽:100 2003-4-17 16:15:19 得分:0

good

Top
回覆人: javafish(小魚兒) ( ) 信譽:101 2003-4-18 11:46:50 得分:0

mark

Top
回覆人: rengs(冷雨) ( ) 信譽:100 2003-4-18 13:58:18 得分:0

oracle:
select 'sql的精妙不在於寫的簡短,而在於能使得查詢效率提高' from dual

Top
回覆人: rengs(冷雨) ( ) 信譽:100 2003-4-18 14:27:44 得分:5
回覆人: LuoGD(沃適) ( ) 信譽:100  2003-3-18 18:11:36  得分:0
說明:子查詢(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b )
這是一個可以優化的sql語句,給a表中的a和b表中的d使用索引,然後改爲
select a,b,c from a where exists (select * from b where b.d=a.a)
總結說一點:
1、要合理使用索引
索引是數據庫一個重要的構成部分,很多人都會忽略它,其實索引的根本目的就是
爲了提高查詢效率。
使用原則如下:
在經常進行連接,但是沒有指定爲外鍵的列上建立索引,而不經常連接的字段則
由優化器自動生成索引。
在頻繁進行排序或分組(即進行group by或order by操作)的列上建立索引。
在條件表達式中經常用到的不同值較多的列上建立檢索,在不同值少的列上不要
建立索引。比如在僱員表的“性別”列上只有“男”與“女”兩個不同值,因此就
無必要建立索引。如果建立索引不但不會提高查詢效率,反而會嚴重降低更新速度

如果待排序的列有多個,可以在這些列上建立複合索引(compound index)。
在寫sql語句時就必須注意有些寫法是會使得數據庫無法使用索引的,比如IS NULL
IS NOT NULL,IN ,NOT IN 等。。。
2.避免或簡化排序
應當簡化或避免對大型表進行重複的排序。當能夠利用索引自動以適當的次序產生
輸出時,優化器就避免了排序的步驟。以下是一些影響因素:
●索引中不包括一個或幾個待排序的列;
●group by或order by子句中列的次序與索引的次序不一樣;
●排序的列來自不同的表。
爲了避免不必要的排序,就要正確地增建索引,合理地合併數據庫表(儘管有時可
能影響表的規範化,但相對於效率的提高是值得的)。如果排序不可避免,那麼應
當試圖簡化它,如縮小排序的列的範圍等。
3.消除對大型錶行數據的順序存取
在嵌套查詢中,對錶的順序存取對查詢效率可能產生致命的影響。比如採用順序存
取策略,一個嵌套3層的查詢,如果每層都查詢1000行,那麼這個查詢就要查詢10
億行數據。避免這種情況的主要方法就是對連接的列進行索引。例如,兩個表:學
生表(學號、姓名、年齡……)和選課表(學號、課程號、成績)。如果兩個表要
做連接,就要在“學號”這個連接字段上建立索引。
還可以使用並集來避免順序存取。儘管在所有的檢查列上都有索引,但某些形式的
where子句強迫優化器使用順序存取。下面的查詢將強迫對orders表執行順序操作

SELECT * FROM orders WHERE (customer_num=104 AND order_num>1001) OR
order_num=1008
雖然在customer_num和order_num上建有索引,但是在上面的語句中優化器還是使
用順序存取路徑掃描整個表。因爲這個語句要檢索的是分離的行的集合,所以應該
改爲如下語句:
SELECT * FROM orders WHERE customer_num=104 AND order_num>1001
UNION
SELECT * FROM orders WHERE order_num=1008
這樣就能利用索引路徑處理查詢。
4.避免相關子查詢
一個列的標籤同時在主查詢和where子句中的查詢中出現,那麼很可能當主查詢中
的列值改變之後,子查詢必須重新查詢一次。查詢嵌套層次越多,效率越低,因此
應當儘量避免子查詢。如果子查詢不可避免,那麼要在子查詢中過濾掉儘可能多的
行。
5.避免困難的正規表達式
MATCHES和LIKE關鍵字支持通配符匹配,技術上叫正規表達式。但這種匹配特別耗
費時間。例如:SELECT * FROM customer WHERE zipcode LIKE “98_ _ _”
即使在zipcode字段上建立了索引,在這種情況下也還是採用順序掃描的方式。如
果把語句改爲SELECT * FROM customer WHERE zipcode >“98000”,在執行查詢
時就會利用索引來查詢,顯然會大大提高速度。
另外,還要避免非開始的子串。例如語句:SELECT * FROM customer WHERE
zipcode[2,3] >“80”,在where子句中採用了非開始子串,因而這個語句也不會
使用索引。
6.使用臨時表加速查詢
把表的一個子集進行排序並創建臨時表,有時能加速查詢。它有助於避免多重排序
操作,而且在其他方面還能簡化優化器的工作。例如:
SELECT cust.name,rcvbles.balance,……other columns
FROM cust,rcvbles
WHERE cust.customer_id = rcvlbes.customer_id
AND rcvblls.balance>0
AND cust.postcode>“98000”
ORDER BY cust.name
如果這個查詢要被執行多次而不止一次,可以把所有未付款的客戶找出來放在一個
臨時文件中,並按客戶的名字進行排序:
SELECT cust.name,rcvbles.balance,……other columns
FROM cust,rcvbles
WHERE cust.customer_id = rcvlbes.customer_id
AND rcvblls.balance>0
ORDER BY cust.name
INTO TEMP cust_with_balance
然後以下面的方式在臨時表中查詢:
SELECT * FROM cust_with_balance
WHERE postcode>“98000”
臨時表中的行要比主表中的行少,而且物理順序就是所要求的順序,減少了磁盤
I/O,所以查詢工作量可以得到大幅減少。
注意:臨時表創建後不會反映主表的修改。在主表中數據頻繁修改的情況下,注意
不要丟失數據。
7.用排序來取代非順序存取
非順序磁盤存取是最慢的操作,表現在磁盤存取臂的來回移動。SQL語句隱藏了這
一情況,使得我們在寫應用程序時很容易寫出要求存取大量非順序頁的查詢。
有些時候,用數據庫的排序能力來替代非順序的存取能改進查詢。
 


Top
回覆人: istrue(象) ( ) 信譽:100 2003-4-20 18:10:13 得分:0

create table 小孩 select 精子,卵子 from 男,女 where 男.生殖器=女.生殖器

Top
回覆人: runner001_cn(柳生007) ( ) 信譽:100 2003-4-20 22:47:37 得分:0

最近我做一個出版圖書項目,我用的是access數據庫。
表cbs_public中有字段
id,cbs_bcode,cbs_bname,cbs_bauthor,cbs_banci......
cbs_bcode:一種書的唯一編號,我們稱爲社內編號。
cbs_bname:書名
cbs_buthor:作者
cbs_banci:書的版次,這個字段是4位的字符。如0103,表示第一版第三次印刷
    這個庫中有3000多記錄,由於有的書多次再版或是重印,使得同一本書(cbs_bcode一樣)的記錄出現多次,但是cbs_banci不一樣,現在我想把同一本書的最新版的最近印刷的那條記錄選擇出來,而將其他記錄刪除掉,我因該如何做?
我嘗試過在access2000的查詢表中使用group by having 語句以及集函數max(),但好像不成功,我應該如何做呢?
這個帖子有很多sql語言高手,希望有人能幫我解答,謝謝!

Top
回覆人: mee123456(臭球) ( ) 信譽:100 2003-4-22 14:05:15 得分:0

摘自某帖,供尚未知情者參考:
SQL Server中實現limit功能,如選擇stu(num,name) 中的第10到第20條記錄:
SELECT TOP 10 a.num, a.name
FROM (SELECT TOP 20 *
        FROM stu
        ORDER BY num DESC) a
ORDER BY a.num

Top
回覆人: zhongjz(小海螺) ( ) 信譽:105 2003-4-22 19:31:47 得分:0

一個最簡單的調試函數辦法:
再要在函數 ecoadd 中加入:
DBMS_OUTPUT.PUT_LINE('v_canBeAdd is '||v_canBeAdd); --輸出中間變量
SQL> set serverout on;
SQL> declare
  2  a number;
  3  begin
  4  a:=ecoadd('21',to_date('2003-04-18','yyyy-mm-dd'));
  5  end;
  6  /
v_canBeAdd is 1
PL/SQL procedure successfully completed.

Top
回覆人: Tabasco(飛鳥) ( ) 信譽:100 2003-4-23 12:10:43 得分:0

不錯不錯

Top
回覆人: hnhhcj(亦凡) ( ) 信譽:100 2003-4-23 19:20:23 得分:0

好!我喜歡!

Top
回覆人: willway(編程是工作-足球是娛樂-學習是永恆!) ( ) 信譽:95 2003-4-24 16:03:40 得分:0

看到了大海,才知道以前一直在小水溝裏游泳

Top
回覆人: tigerwen01(小虎)(編程藝術化) ( ) 信譽:485 2003-4-24 17:21:56 得分:0

我也來一句吧:
Select field1,field2,(Case When ** then aa When *** then aaa Else bbb End)ResultVal From Tablename where 條件 order by id DESC

Top
回覆人: luckysym(熱帶風暴) ( ) 信譽:100 2003-4-25 13:57:26 得分:0

sign

Top
回覆人: findya(滿地找牙) ( ) 信譽:100 2003-4-25 15:06:49 得分:0

to annkie(活着便精彩) :
select *, ((yjs_count + 0.00)/bys_count) as jy_ratio from
(
select kzx4dm, count(kzx4dm) as bys_count,
  sum(case jylsfsdm when 10 then 1 else 0 end) as yjs_count
from Test
group by kzx4dm
) a

Top
回覆人: yoki(小馬哥) ( ) 信譽:100 2003-4-26 15:22:16 得分:0

要學sql還是去mssql版吧

Top
回覆人: xiaoyuer0851(紅旗下的蛋) ( ) 信譽:100 2003-4-26 20:48:04 得分:0

經典,謝謝了,各位

Top
回覆人: tboer(五峯) ( ) 信譽:96 2003-4-27 13:17:54 得分:0

收藏~

Top
回覆人: java2000(左天) ( ) 信譽:100 2003-4-28 12:45:18 得分:0

好東西,大家繼續。。。。。。。。
收藏....

Top
回覆人: jihejihe(幾何) ( ) 信譽:100 2003-4-28 14:56:09 得分:0

強烈關注!!!

Top
回覆人: boy21cnthp(娃娃) ( ) 信譽:99 2003-5-1 1:55:00 得分:0

收藏

Top
回覆人: xiaoduan0115(小段) ( ) 信譽:100 2003-5-1 19:18:27 得分:0

學習中

Top
回覆人: lynn0821(林子) ( ) 信譽:100 2003-5-3 17:04:12 得分:0

看不懂啊!
高手這麼多!

Top
回覆人: dgm8(dgm8) ( ) 信譽:100 2003-5-3 22:22:08 得分:0

不知道寫的人自己懂不懂,要貼的話,我也可以從教材上拷一大堆.

Top
回覆人: Redball(紅刺蝟) ( ) 信譽:100 2003-5-3 22:58:39 得分:0

drop index
Microsoft SQL Server 2000的索引並沒有太多變化,本來還以爲會有R-Tree、Bitmap Index之類的東東出來呢,結果很讓人失
望:(
不過還是有一些變化的,第三講裏面已經說過了可以給View加索引,還有一點就是可以給計算列(Computed Columns)加索引。
?不知道什麼是Computed Columns?我倒!
其實這東東我也就用過一次,抄一段Online Book的Sample Code吧
CREATE TABLE t2 (a int, b int, c int, x float,
    y as CASE x
            WHEN 0 THEN a
            WHEN 1 THEN b
            ELSE c
        END)
CREATE TABLE mytable
   (
    low int,
    high int,
    myavg AS (low + high)/2
   )
看明白了吧,就是as後面加一個計算值而已,OK, continue
現在雖然可以給計算列加索引了,但是還是受到一些限制的,比如說,象avg、sum這樣的和整張表都有關的計算值就不可以加索
引,還有,具有不確定計算值的也不可以加索引,表達式中使用的字段也必須是這張表中的。
SQL 2000裏面對索引作了一些優化,不過具體的細節不是很清楚,我所知道的就是在多CPU的機器上建立索引的時候可以使用平行
多線程來掃描和分類數據。實現的技術細節沒有太多的意思,簡單介紹一下就是,服務器在建立索引之前對錶做一個快速的隨機掃
描,把數據按照設置的平行度分爲幾塊,然後每個線程利用過濾器對基表進行查詢,分別建立索引結構,每個線程都完成之後再把
這些索引連接起來。
SQL 2000中很多地方對多CPU和Clustered Server做了優化,可惜現在的資料太少,不過使用一段時間就會慢慢發現的了。

Top
回覆人: ljz811(李建忠) ( ) 信譽:100 2003-5-5 0:26:11 得分:5

多重查詢的解決方案
注:本文來自
http://www.printmarket.com.cn 朱繼山 [email protected],否則視爲侵權。
              [前言]
    我們經常會遇到多重查詢問題,而長長的SQL語句往往讓人丈二和尚摸不着頭腦。特別是客戶端部分填入查詢條件時,如用普通方法將更是難上加難。
    以下巧妙地利用"where 1=1"的恆等式(事實上很多,讓它值爲TRUE即可)解決此問題。
                 [正文概要]
'subject 信息標題
'company 發佈信息的公司名稱
'content 發佈信息的內容
'address 公司地址
'infomation 公司簡介
'note 相關說明
以上值均由FORM提交,然後通過:subject=trim(Request.Form("subject"))等得到相應的值。
<%
'這個函數很關鍵!---------------------------
Function sql(a,b,sqls)
    if b<>"" then   '如果客戶端沒有提交此值,則不會產生相應的SQL語句。
    sqls=sqls & " and " & a & " like '%" & b & "%'"
    end if
    sql=sqls
End Function
'-----------------調用數據庫
    Set conn=Server.CreateObject("ADODB.Connection")
    DBpath=Server.MapPath("/database/mydb.mdb")
    Conn.Open "driver={Microsoft Access Driver (*.mdb)};pwd=;dbq=" & DBpath
    Set rs=Server.CreateObject("ADODB.Recordset")
sqls="select * from mytable  where 1=1 "
'以下調用上面的函數即可,可以很多個調用(理論上是任意)
    sqls=sql("subject",subject,sqls)
    sqls=sql("company",company,sqls)
    sqls=sql("content",content,sqls)
    sqls=sql("address",address,sqls)
    sqls=sql("infomation",infomation,sqls)
    sqls=sql("note",note,sqls)
sqls=sqls & " order by id desc"
    rs.open sqls,conn,3,2
%>
                        [結束語]
    如果沒有關鍵的函數Function sql(a,b,sqls),我們可以想象,需要多少判斷的一個接一個的語句!

Top
回覆人: tigerwen01(小虎)(編程藝術化) ( ) 信譽:485 2003-5-7 8:46:11 得分:0

Case語句:
SELECT FIELD1,FIELD2,(CASE WHEN 某某 THEN 某某 WHEN 某某 THEN 某某 ELSE 某某 END)NEWFIELD FROM TABLENAME ORDER BY FIELD

Top
回覆人: hakin(邊城之風) ( ) 信譽:101 2003-5-8 21:34:51 得分:0

佔個位。。。。

Top
回覆人: playboy200(林) ( ) 信譽:100 2003-5-9 10:56:39 得分:0

VBSCRIPT常見的內部函數
函數 功能簡述
ABS(number) 返回數字的絕對值
Array(arglist) 返回數組實例
Asc(string) 返回ANSI字符字符串
Atn(number) 返回Arctangernt值
CBool(expression) 返回Boolean類型的值
CByte(expression) 返回Byte類型的值
CCur(expression) 返回Currency類型的值
     CDate(date) 返回Date類型的值
CDbl(expression) 返回Double類型的值
Chr(charcode) 返回ANSI字符碼
    CInt(expression) 返回Integer類型值
CLng(expression) 返回Long類型值
Cos(nubmer) 返回一個弧度數字的Cosine值
CreateObject(class) 返回一個對象實例
CSng(expression) 返回Single類型的值
    CStr(expression) 返回string類型的值
Date 返回目前的系統時間
DateAdd(interval,number,date) 返回更改的時間
DateDiff(interval,date1,date2) 返回兩日期的間隔
DatePart(interval,date) 返回給定時間的某個部分值
DateSerial(year,month,day) 轉換給定時間Date類型
DateValue(date) 返回date類型的值
Day(date) 返回1-31的日期數字
Exp(number) 返回自然指數的次方數
Int(nubmber) 返回數字的絕對整數(無條件進位)
Fix(number) 返回數字的整數(無條件捨去)
Filter(Inputstrings,value) 返回一維數組內字符串位置
FormatCurrency(expression) 返回表達式類型
   FormatDateTime(date) 返回日期或時間的表達式
  FormatNumber(expression) 返回數字的表達式
FormatParcent(expression) 返回百分比的表達式
GetObject([pathname][,class]) 去迴文件內的對象
Hex(number) 返回數字的16進位
Hour(time) 返回時間的小時數
InputBox(prompt,...) 顯示一個可供輸入的對話框
Instr(string,searchstr) 返回搜尋字符串的第一個位置
InstrRev(string,searchstr) 從尾端搜尋字符串的位置
IsArray(varname) 判定是變量還是數組
IsDate(expression) 判定是否是日期表達式
IsEmpty(expression) 判定變量內是否有值
IsNull(expression) 判定是否爲NULL值
IsNumeric(expression) 判定是否爲數字值
LoadPicture(picturename) 返回一個圖象對象
IsObject(expression) 判定是否爲一個變量
Join(list[,delimiter]) 加入一數組內的子字符串
LBound(arrayname) 返回數組的最小索引
LCase(string) 返回小寫字符串
Left(string,ength) 返回需要長度的字符串
Len(string|varname) 返回字符場長度
Log(number) 返回自然對數
LTrim(string) 去除字符串的開頭空白字符
RTrim(string) 去除字符串的尾端空白字符
Trim(string) 去除字符串的開頭、尾端空白字符
Mid(string,start[,length]) 返回指定位置的字符串
Minute(time) 返回時間的分數
Month(date) 返回日期的月份
MonthName(month[,abbreviate]) 返回月份字符串
MsgBox(prompt,...) 顯示一個信息框
Now 返回系統的日期與時間
Oct(number) 返回數字的八進制
Replace(string,find,replacewith) 取代部分字符串
Right(string,ength) 從尾端返回需要長度的字符串
Rnd[(number)] 返回一個隨機數
Split(expression,...) 返回指定字符串的一維數組
ScriptEngineBuildVersion 返回現在使用的Script語言的版本
ScriptEngineMajorVersion 返回現在使用的Script語言的主要版本
ScriptEngineMinorVersion 返回現在使用的Script語言的次要版本
Round(expression[,num])  Returns a number rounded
ScriptEngine 返回現在使用的Script語言
Second(time) 返回時間秒數
Sgn(number) 判斷數字的正負號
Sin(number) 返回弧度數字的Sin值
Space(number) 返回指定的空白字符字符串
Sqr(number) 返回數字的二次方根
StrComp(string1,string2[,compare]) 比較兩個字符串
StrReverse(string) 反過來排列字符串
String(number,character) 返回一重複字符串
Tan(number) 返回弧度數字的Tangent值
這個一定精典吧
Time 返回目前的系統時間
TimeSerial(hour,minute,second) 返回時間date類型
TimeValje(time) 繁華包含時間的date類型
TypeName(varname) 返回變量的數據類型
UBound(arrayname) 從尾端返回數組的最小索引
UCase(string) 返回大寫字符
VarType(varname) 發行代表變量數據類型的數字
Weekday(date,[firstdayofweek]) 返回日期是禮拜幾
Year(date) 返回日期內的年數

Top
回覆人: playboy200(林) ( ) 信譽:100 2003-5-9 10:58:39 得分:0

防止重複提交的巧妙方法[
在document.form1.submit();後加
document.body.innerHtml = "<center> Waiting...</center>"; //當然這裏的html代碼就由你發揮了,還可把這段寫成函數,這樣維護就方便了!
這一處理,就讓用戶在等待提交時不會誤以爲沒提交而重複按提交按鈕!

Top
回覆人: bondlei(洗前塵-快平生) ( ) 信譽:101 2003-5-9 21:29:16 得分:0

up

Top
回覆人: wgrabob1(紅客男孩) ( ) 信譽:115 2003-5-10 12:39:46 得分:0

select * form *

Top
回覆人: nboys() ( ) 信譽:105 2003-5-10 13:49:15 得分:0

選擇從10到15的記錄
select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc
or
selecct top 5 * from table where id not in (select top 10 id from table order by id asc) order by id asc

Top
回覆人: pyyxs(大力神) ( ) 信譽:100 2003-5-10 13:56:57 得分:0

gz

Top
回覆人: pyyxs(大力神) ( ) 信譽:100 2003-5-10 14:09:10 得分:0

to  pengdali(大力)
來個複雜的瞧瞧

Top
回覆人: vigorlee3(青蛙呆) ( ) 信譽:100 2003-5-10 22:30:39 得分:0

up

Top
回覆人: qinchao08(三人行) ( ) 信譽:100 2003-5-14 10:39:07 得分:0

Top
回覆人: CHARGING(糉子) ( ) 信譽:105 2003-5-15 14:50:28 得分:0

請教:
一個表有三個字段:ID(自動)、COL1、COL2。COL1值不限,COL2的值有‘0’、‘1’、‘2’三種,假如表中有以下幾條數據:
ID    COL1    COL2
1     A       0
2     A       1
3     A       1
4     B       2
5     B       2
如何檢索出以下的數據?(TEMP1爲COL2中出現“0”的次數,TEMP2爲出現“1”的次數,TEMP3爲出現“2”的次數,TEMP4爲COL1中不重複值出現的總次數)
COL1    TEMP1    TEMP2    TEMP3     TEMP4
A       1        2        0         3
B       0        0        2         2

Top
回覆人: yonghengdizhen(剎那←→永恆) ( ) 信譽:112 2003-5-15 16:17:20 得分:0

幾個子查詢而已。當需統計離散值數量不確定時,無法由一個sql完成,建議採用sql+XML方式完成

Top
回覆人: surfl(曉龍) ( ) 信譽:100 2003-5-16 16:51:45 得分:0

mark!

Top
回覆人: chichuli_4(clf) ( ) 信譽:110 2003-5-16 17:03:29 得分:0

INSERT INTO [tablea]
      (field1,field2,....)
SELECT field1,field2,....
FROM tableb

Top
回覆人: boy21cnthp(娃娃) ( ) 信譽:99 2003-5-18 4:49:30 得分:0

up

Top
回覆人: mengxianbao1521(代碼優化) ( ) 信譽:100 2003-5-21 13:21:26 得分:5

我的仔細看看各位的回帖,學習學習,本人也很喜歡SQL語句。
希望與各位高手朋友長探討。
尤其敬仰yonghengdizhen(回首夢已遠)功底深厚。
.聯繫方式:MSN:mengxianbao1521#@sian.com
nn
問題:如何使用SQL語句比較兩個相似表,那些字段相同(包括長度,類型)。
select A.name as col, C.name as type, A.length
from
syscolumns A left join sysobjects B
on A.id = B.id
left join systypes C
on A.xtype = C.xtype
where B.name = 'T_Bookings' or B.name = 'T_Reca'
group by A.name
, C.name, A.length
having count(A.name) > 1
SELECT * FROM SYSOBJECTS
SELECT * FROM SYSCOLUMNS
SELECT * FROM SYSTYPES

Top
回覆人: mengxianbao1521(代碼優化) ( ) 信譽:100 2003-5-21 13:58:12 得分:0

怎麼聯繫方式寫錯了。
MSN:[email protected]

Top
回覆人: Eddie(元直) ( ) 信譽:100 2003-5-21 14:02:07 得分:0

Mark

Top
回覆人: lindexter(Dexter) ( ) 信譽:101 2003-5-21 14:33:42 得分:0

好帖,收藏。
以後又有很多東西可以用了。

Top
回覆人: readersm68(地主) ( ) 信譽:100 2003-5-26 11:13:05 得分:0

SELECT distinct SUBSTRING(編號, 1, 3)
FROM Table1
ORDER BY 編號

Top
回覆人: afeisky(新手,努力學習C) ( ) 信譽:100 2003-6-10 10:38:03 得分:0

good 

個人主頁 | 引用 | 返回  
 


收縮數據庫方法
晴天發表評論於2004-10-26 11:20:00 
收縮數據庫方法

backup log NewMizone2004 with no_log
go

backup log NewMizone2004 with truncate_only
go

backup log NewMizone2004 with no_log
go

dbcc shrinkdatabase(NewMizone2004, TRUNCATEONLY)
go

最多能縮到最開始建庫時大小。
 

發佈了135 篇原創文章 · 獲贊 6 · 訪問量 42萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章