当前位置: 代码迷 >> Oracle开发 >> 跪求Oracle的sql话语
  详细解决方案

跪求Oracle的sql话语

热度:81   发布时间:2016-04-24 06:42:14.0
跪求Oracle的sql语句
题目是这样的,如图:


请问4道问题的sql语句分别怎么写?
------解决方案--------------------
1和3    插入和 查询、更新  就不说了 ,百度一下,  还不行  洗洗睡吧!
2 、  
   select  *  from (
     select  身份证 ,count(*)  as s from  表  group by 身份证
   ) k  where k.s>1
4、delete from  表  where  姓名 like ‘李%’
------解决方案--------------------
引用:
题目是这样的,如图:


请问4道问题的sql语句分别怎么写?

CREATE TABLE g_cardapply(
g_applyno VARCHAR(8),
g_apply DATE,
g_state varchar(2));

CREATE TABLE g_cardapplydetail(
g_applyno VARCHAR2(8),
g_name VARCHAR(30),
g_idcard VARCHAR(18),
g_state VARCHAR(2));
---1-1
INSERT ALL INTO g_cardapply(g_applyno,g_apply,g_state)VALUES(a,b,e) 
INTO g_cardapplydetail(g_applyno,g_name,g_idcard,g_state)VALUES(a,c,d,e)
SELECT '1111' a,to_date('2014-02-18','yyyy-mm-dd') b,'test' c,'440401430103082' d,'1' e FROM dual;
COMMIT;
--1-2
SELECT A.G_APPLY
  FROM G_CARDAPPLY A, G_CARDAPPLYDETAIL B
 WHERE A.G_APPLYNO = B.G_APPLYNO(+)
   AND B.G_IDCARD = '440401430103082';
--2
SELECT G_IDCARD, COUNT(1) 记录数
  FROM G_CARDAPPLYDETAIL
 GROUP BY G_IDCARD
HAVING COUNT(1) > 2;
--3-1
UPDATE G_CARDAPPLY A
   SET A.G_STATE = '07'
 WHERE EXISTS (SELECT 1
          FROM G_CARDAPPLYDETAIL K
         WHERE K.G_IDCARD = '440401430103082'
           AND K.G_APPLYNO = A.G_APPLYNO);
COMMIT;
--3-2
UPDATE G_CARDAPPLYDETAIL T
   SET T.G_STATE = '07'
 WHERE T.G_IDCARD = '440401430103082';
COMMIT;
--4
DELETE FROM g_cardapplydetail t WHERE t.g_name LIKE '李%';
COMMIT;

------解决方案--------------------
--1
INSERT ALL INTO g_Cardapply
  (g_Applyno, g_Apply, g_State)
VALUES
  (g_Applyno, g_Apply, g_State) INTO g_Cardapplydetail
  (g_Applyno, g_Name, g_Idcard, g_Idcard, g_State)
VALUES
  (g_Applyno, g_Name, g_Idcard, g_Idcard, g_State)
  SELECT '12345' g_Applyno,
         To_Date('2014-2-18', 'yyyy-MM-dd') g_Apply,
         1 g_State,
         'gname' g_Name,
         '440401430103082' g_Idcard
  FROM   Dual;

SELECT a.g_Apply
FROM   g_Cardapply a
JOIN   g_Cardapplydetail b ON a.g_Applyno = b.g_Applyno
WHERE  b.g_Idcard = '440401430103082'
--2

  SELECT g_Idcard, COUNT(*) Num
        FROM   g_Cardapplydetail
        GROUP  BY g_Idcard
        HAVING COUNT(*) > 1
        --3
        UPDATE g_Cardapplydetail g SET g.g_State = '07'
        WHERE  g.g_Idcard = '440401430103082'
        
         UPDATE g_Cardapply g SET g.g_State = '07'
        WHERE  g.g_Applyno IN
               (SELECT g.g_Applyno
                FROM   g_Cardapplydetail
                WHERE  g_Cardapplydetail.g_Idcard = '440401430103082')
        
        --4
         DELETE FROM g_Cardapplydetail g
        WHERE  g.g_Name LIKE '李%';
  相关解决方案