常用的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 a;
   明: 示文章、提交人和最后回 复时间   
   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) 
 
了大家更容易理解我 出的 SQL 句,本文假定已 建立了一个学生成 管理数据 ,全文均以学生成 的管理 例来描述。
   1. 查询结 果中 示列名:
   a. as 关键 字: select name as ' 姓名 ' from students order by age
   b. 直接表示: select name ' 姓名 ' from students order by age
   2. 精确 :
   a. in 限定范 select * from students where native in (' 湖南 ', ' 四川 ')
   b.between...and :select * from students where age between 20 and 30
  c.“=”:select * from students where name = '李山'
  d.like:select * from students where name like '李%' (注意 查询 条件中有“%”, 则说 明是部分匹配,而且 有先后信息在里面,即 找以“李” 开头 的匹配 所以若 查询 的所有 象, 应该 命令: '% %'; 若是第二个字 李, 则应为 '_ %' '_ ' '_ _' )
   e.[] 匹配 检查 符: select * from courses where cno like '[AC]%' ( 表示或的 系,与 "in(...)" 似,而且 "[]" 可以表示范 ,如: select * from courses where cno like '[A-C]%')
   3. 时间类 量的
   a.smalldatetime :直接按照字符串 理的方式 理,例如: select * from students where birth > = '1980-1-1' and birth <= '1980-12-31'
   4. 集函数
   a.count() 求和,如: select count(*) from students ( 求学生 人数 )
   b.avg( ) 求平均,如: select avg(mark) from grades where cno=’B2’
   c.max( ) min( ) ,求最大与最小
   5. group
  常用于 统计时 ,如分 组查总 数: select gender,count(sno) from students group by gender ( 看男女学生各有多少 )
  注意:从哪 角度分 就从哪列 "group by"
   于多重分 ,只需将分 组规则罗 列。比如 查询 各届各 专业 的男女同学人数,那 组规则 有:届 (grade) 专业 (mno) 和性 (gender) ,所以有 "group by grade, mno, gender"
select grade, mno, gender, count(*) from students group by grade, mno, gender
   通常 group having 用,比如 查询 1 门课 以上不及格的学生, 按学号 (sno) 有:
select sno,count(*) from grades where mark<60 group by sno having count(*)>1
  6.UNION
  合并 查询结 果,如:
SELECT * FROM students WHERE name like ‘ %’ UNION [ALL] SELECT * FROM students WHERE name like ‘ 李%’
  7.多表 查询
  a.内
select g.sno,s.name,c.coursename from grades g JOIN students s ON g.sno=s.sno JOIN courses c ON g.cno=c.cno ( 注意可以引用 名) b.外 接 b1.左 接 select courses.cno,max(coursename),count(sno) from courses LEFT JOIN grades ON courses.cno=grades.cno group by courses.cno
   接特点: 示全部左 表中的所有 目,即使其中有些 中的数据未填写完全。
  左外 接返回那些存在于左表而右表中却没有的行,再加上内 接的行。
   b2.
  与左
   b3.
select sno,name,major from students FULL JOIN majors ON students.mno=majors.mno
  两 表中的内容全部
   c. 自身
select c1.cno,c1.coursename,c1.pno,c2.coursename from courses c1,courses c2 where c1.pno=c2.cno
   采用 名解决 问题
   d. 交叉
select lastname+firstname from lastname CROSS JOIN firstanme
   相当于做笛卡儿
   8. 嵌套 查询
   a. 关键 IN, 查询 李山的同
select * from students where native in (select native from students where name=’ 李山’)
  b.使用 关键 字EXIST,比如,下面两句是等价的:
select * from students where sno in (select sno from grades where cno=’B2’)
select * from students where exists (select * from grades where grades.sno=students.sno AND cno=’B2’)
  9. 于排序order
  a. 于排序order,有两 方法:asc升序和desc降序
  b. 于排序order,可以按照 查询 条件中的某 排列,而且 这项 可用数字表示,如:
select sno,count(*) ,avg(mark) from grades group by sno having avg(mark)>85 order by 3
   10. 其他
   a. 于有空格的 识别 名称, 应该 "[]" 括住。
   b. 于某列中没有数据的特定 查询 可以用 null 判断,如 select sno,courseno from grades where mark IS NULL
   c. 注意区分在嵌套 查询 中使用的 any all 的区 any 相当于 逻辑 运算 “||” all 相当于 逻辑 运算 “&&”
   d. 注意在做否定意 查询 是小心 入陷阱:
  如,没有 ‘B2’ 程的学生 :
select students.* from students, grades where students.sno=grades.sno AND grades.cno <> ’B2’
   上面的 查询 方式是 错误 的,正确方式 下方:
select * from students where not exists (select * from grades where grades.sno=students.sno AND cno='B2')
   11. 于有 度多重嵌套 查询 的解决思想:
  如, 修了全部 程的学生:
select * from students where not exists ( select * from courses where NOT EXISTS (select * from grades where sno=students.sno AND cno=courses.cno))
   最外一重:从学生表中 ,排除那些有 的。用 not exist 。由于 讨论对 象是 程,所以第二重 查询 course 表中找,排除那些 的即可。
ssionname&"' order by , 生源地,高考
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值