<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    朋的博客

    MySQL資料,Java技術,管理思想,博弈論,Ajax,XP極限編程,H.264,HEVC,HDR
    隨筆 - 86, 文章 - 59, 評論 - 1069, 引用 - 0
    數據加載中……

    SQL 精妙語句(確實牛!)

    如何從一位菜鳥蛻變成為高手,靈活使用的SQL語句是必不可少的。本文收集了部分比較經典,常用的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') &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

      說明:--

      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)

    posted on 2005-07-17 00:02 benchensz 閱讀(5471) 評論(7)  編輯  收藏 所屬分類: MySQL資料翻譯

    評論

    # re: SQL 精妙語句(確實牛!)  回復  更多評論   

    select * into b from a where 1<>1
    我怎么用不來呀
    顯示
    ERROR 1327 (42000): Undeclared variable: b
    如果能用那真是太好了
    2005-07-19 15:41 | 胡陽

    # re: SQL 精妙語句(確實牛!)  回復  更多評論   

    假設表a,ID字段為id,"得到表中最小的未使用的ID號"貌似這樣寫更簡單(可能效率會低點)

    select min(id+1) from (select id from a)as a1 where id not in(select id-1 from a)
    2005-07-26 04:56 | 于行義

    # re: SQL 精妙語句(確實牛!)  回復  更多評論   

    回復:
    select * into b from a where 1<>1
    我怎么用不來呀
    顯示
    ERROR 1327 (42000): Undeclared variable: b
    如果能用那真是太好了

    我在MYSQL中如下試用成功:
    create table b as select * from a where 1<>1
    請試一下
    2005-07-27 16:40 | 梁剛

    # re: SQL 精妙語句(確實牛!)  回復  更多評論   

    才看到……
    呵呵,胡兄弟少了Create語句
    于兄弟的SQL應該用得比我好,這是轉載的,不過其實這里sql的子查詢語句只是為了獲得原表的結構,如果需要的只是某些列也可以將*改為那些列的名字。
    復制表的某些列也可以使用這樣的方法:
    create table b as select a.id, a.name, a.address from user a;
    2005-07-27 23:30 | 陳朋奕

    # re: SQL 精妙語句(確實牛!)  回復  更多評論   

    還是你寫的那個是對的......我這個少算了一種情況......
    手比腦子動作的快,肯定是會出錯的,汗........

    select min(id+1) from a where id not in(select id-1 from a);
    這樣子大多數情況都適用,但是唯獨當缺失的ID為1的時候,不適用了.會返回"除1以外最小的缺失ID",而不返回1.

    所以單獨判斷一下子這個id=1是不是存在,就是你上面說的那種辦法了...
    select (case when exists(select id from a where id=1) then min(id+1) else 1 end) from a where id not in(select id-1 from a);

    現在看來,這種方法應該是最優的辦法了,就MySQL-4.1.x來說.
    2005-07-29 07:29 | 于行義

    # re: SQL 精妙語句(確實牛!)  回復  更多評論   

    看來于大哥是個SQL高手,呵呵,對SQL的理解很深刻
    給了另一種解法,讓小弟開了眼界
    只是我覺得這樣做的話會加大SQL的開銷,似乎沒有必要。
    有個問題請教,假設我現在有兩個表,表結構一樣,但里面有些數據不一樣,如果我想要將這兩個表中不一樣的部分輸出到第三個表中,怎么寫SQL?
    2005-07-30 00:11 | 陳朋奕

    # re: SQL 精妙語句(確實牛!)  回復  更多評論   

    假設表a,b,c,均有字段val,把a和b中不一樣的部分輸入到c中,似乎可以這樣做:

    b里面有a里面沒有的-->輸入進c:
    insert into c(val) select val from a where val not in (select val from b);

    a里面有b里面沒有的-->輸入進c:
    insert into c(val) select val from b where val not in (select val from a);

    合起來大概是這樣:
    insert into c(val) select val from a where val not in (select val from b) union select val from b where val not in (select val from a);
    2005-07-30 06:46 | 于行義
    主站蜘蛛池模板: 免费夜色污私人影院网站| 亚洲一区二区无码偷拍| 久久WWW免费人成—看片| 国产区卡一卡二卡三乱码免费| 亚洲精品伊人久久久久| 四虎在线免费视频| 亚洲中文无码线在线观看| 69xx免费观看视频| 2017亚洲男人天堂一| 在线播放高清国语自产拍免费| 久久亚洲AV成人无码国产电影 | 亚洲国产午夜精品理论片| 精品熟女少妇a∨免费久久| 亚洲自偷自拍另类图片二区| 国产免费丝袜调教视频| 亚洲影视自拍揄拍愉拍| 成人爱做日本视频免费| jizz中国免费| 亚洲一本综合久久| 100000免费啪啪18免进| 亚洲av成本人无码网站| 国产L精品国产亚洲区久久| 在线观看免费黄色网址| 亚洲精品456在线播放| 色妞WWW精品免费视频| 免费看一级高潮毛片| 狠狠色伊人亚洲综合成人| 美丽的姑娘免费观看在线播放| 67194在线午夜亚洲| 国产一区视频在线免费观看| 一区二区三区在线免费观看视频| 亚洲AV日韩AV天堂久久| 无码少妇一区二区浪潮免费| 午夜成人无码福利免费视频| 久久99国产亚洲精品观看| 无码中文在线二区免费| 亚洲天堂免费在线视频| 亚洲国产精品综合久久久| 免费人成在线观看网站品爱网日本| 成人性生交大片免费看中文| 亚洲愉拍一区二区三区|