【网学网提醒】:网学会员为您提供SQL语法整理参考,解决您在SQL语法整理学习中工作中的难题,参考学习。
用SQL进行表单查询
现把整理和积累的SQL常用语句公开给大家,以方便大家在日常工作中使用.同时也希望各位同僚,继续提出宝贵建议,作出补充.显示数据表的结构:显示数据表的结构:desc数据表名查询所有记录:查询所有记录:select*from数据表查询所有记录的某些字段:查询所有记录的某些字段:select字段名1,字段名2from数据表selectname,agefrom数据表查询某些字段的不同记录:查询某些字段的不同记录:selectdistinctjobfrom数据表在显示时去除相同的记录单条件查询:单条件查询:select*from数据表wheresal<=2500select*from数据表wherejob!=‘MANAGER’select*from数据表wherejob^=‘MANAGER’select*from数据表wherejob<>‘MANAGER’select*from数据表wheresal^=1000select*from数据表wheresalin(2000,1000,3000)select*from数据表wherejobin(‘MANAGER’,’CLERK’)select*from数据表wheresalbetween2000and3000select*from数据表wherejobbetween‘MANAGER’and’CLERK’select*from数据表wherejoblike‘M%’likeselect*from数据表wherejoblike‘M_’like和notlike适合字符型字a段的查询,%代表任意长度的字符串,_代表一个任意的字符。Like‘m%’代表m开头的任意长度的字符串,like‘m__’代表m开头的长度为3的字符串select*from数据表wheresalisnullnullselect*from数据表wherejobisnull组合条件的查询:组合条件的查询:逻辑与组合查询结果select*from数据表wherejob>=’CLERK’andsal<=2000逻辑或组合查询结果select*from数据表wherejob>=’CLERK’orsal<=2000逻辑非组合查询结果notjob=‘CLERK’等价于job<>‘CLERK’select*from数据表wherenotjob=‘CLERK排序查询:排序查询:select*from数据表wherejob<=‘CLERK’orderbyjobasc,saldescselect*from数据表orderbyjobasc,saldesc/not/not/notbetween/notin
orderby可以指定查询结果如何排序,形式为字段名排序关键词;asc代表升序排列,desc代表降序排列,多个排序字段之间通过逗号分割。若有where查询条件,orderby要放在where语句后面分组查询:分组查询:将查询结果按照字段分组selectempno,ename,job,salfromscott.empgroupbyjob,empno,ename,salhavingsall<=2000selectempne,ename,job,salfromscott.empwheresal<=2000groupbyjob,empno,ename,sal注:groupby后的字段必须与前面select后的字段相对应where检查每条记录是否符合条件,having是检查分组后的各组是否满足条件。having语句只能配合groupby语句使用,没有groupby时不能使用字段运算查询:字段运算查询:selectempno,ename,sal,mgr,sal+mgrfrom数据
表利用算术运算仅仅适合多个数值型字段或字段与数字之间的运算变换查询显示:变换查询显示:selectempno编号,ename,job工作,sal薪水,from数据表having,但可以使用where
用SQL进行多表查询
无条件多表查询:无条件多表查询:selectemp.empno,emp.ename,emp.deptno,dept.dname,dept.locfromscott.emp,scott.dept等值多表查询:等值多表查询:selectemp.empno,emp.ename,em.deptno,dept.dname,dept.locfromscott.emp,scott.deptwherescott.emp.deptno=scott.dept.deptno等值多表查询将按照等值的条件查询多个数据表中关联的数据。要求关联的多个数据表的某些字段具有相同的属性,即具有相同的数据类型,宽度和取值范围。非等值多表查询:非等值多表查询:selectemp.empno,emp.ename,em.deptno,dept.dname,dept.locfromscott.emp,scott.deptwherescott.emp.deptno!=scott.dept.deptnoandscott.emp.deptno=10
用SQL进行嵌套查询
简单嵌套查询:简单嵌套查询:selectemp.empno,emp.ename,emp.job,emp.salfromscott.emp
wheresal>=(selectsalfromscott.empwhereename=‘WARD’)在这段代码中,子查询selectsalfromscott.empwhereename=‘WARD’的含义是从emp数据表中查询为WARD的员工的薪水,父查询的含义是要找出emp数据表中薪水大于等于WARD的薪水的员工。的嵌套查询:带in的嵌套查询:selectemp.empno,emp.ename,emp.job,emp.salfromscott.empwheresalin(selectsalfromscott.empwhereename=‘WARD’)查询薪水和WARD相等的员工,也可以使用notin来查询的嵌套查询:带any的嵌套查询:selectemp.empno,emp.ename,emp.job,emp.salfromscott.empwheresal>any(selectsalfromscott.empwherejob=‘MANAGER’)等价于:selectsalfromscott.empwherejob=‘MANAGER’查询结果为:1000,2500selectemp.empno,emp.ename,emp.job,emp.salfromscott.empwheresal>1000orsal>2500的嵌套查询:带some的嵌套查询:selectemp.empno,emp.ename,emp.job,emp.salfromscott.empwheresal=some(selectsalfromscott.empwherejob=‘MANAGER’)等价于:selectsalfromscott.empwherejob=‘MANAGER’查询结果为:1000,2500selectemp.empno,emp.ename,emp.job,emp.salfromscott.empwheresal=1000orsal=2500的嵌套查询:带all的嵌套查询:selectemp.empno,emp.ename,emp.job,emp.salfromscott.empwheresal>all(selectsalfromscott.empwherejob=‘MANAGER’)等价于:selectsalfromscott.empwherejob=‘MANAGER’查询结果为:1000,2500selectemp.empno,emp.ename,emp.job,emp.salfromscott.empwheresal>1000andsal>2500的嵌套查询:带exists的嵌套查询:selectemp.empno,emp.ename,emp.job,emp.salfromscott.emp,scott.deptwhereexists(select*fromscott.empwherescott.emp.deptno=scott.dept.deptno)
等价
于:selectsalfromscott.empwherejob=‘MANAGER’查询结果为:1000,2500selectemp.empno,emp.ename,emp.job,emp.salfromscott.empwheresal=1000andsal=2500并操作的嵌套查询:并操作的嵌套查询:并操作就是集合中并集的概念。属于集合A或集合B的元素总和就是并集。(selectdeptnofromscott.emp)union(selectdeptnofromscott.dept)交操作的嵌套查询:交操作的嵌套查询:交操作就是集合中交集的概念。属于集合A且属于集合B的元素总和是并集。(selectdeptnofromscott.emp)intersect(selectdeptnofromscottdept)差操作的嵌套查询:差操作的嵌套查询:差操作就是差集的概念。属于集合A且不属于集合B的元素总和是并集。(selectdeptnofromscott.emp)minus(selectdeptnofromscottdept)
用SQL进行函数查询
函数:ceil函数:selectmgr,mgr/100,ceil(mgr/100)fromscott.empceil(n),取大于等于数值n的最小整数。函数:floor函数:selectmgr,mgr/100,floor(mgr/100)fromscott.empfloor(n),取小于等于数值Nde最大整数。函数:mod函数:selectmgr,mod(mgr,1000),mod(mgr,100),mod(mgr,10)fromscott.empmod(m,n),取m整除n后的余数。函数:power函数:selectmgr,power(mgr,2),power(mgr,3)fromscott.emppower(m,n),取m的n次方。函数:round函数:selectmgr,round(mgr/100,2),round(mgr/1000,2)fromscott.empround(m,n),四舍五入,保留n位。函数:sign函数:selectmgr,mgr-7800,sign(mgr-7800)fromscott.empsign(n),n>0,取1;n=0,取0;n<0,取-1。
函数:avg函数:selectavg(mgr)平均薪水fromscott.empavg(字段名),求平均值。要求字段为数值型。函数:count函数:selectcount(*)记录总数fromscott.empcount(字段名)或count(*),统计总数。函数:min函数:selectmin(sal)最少薪水fromscott.empmin(字段名),计算数值型字段最小数。函数:max函数:selectmax(sal)最高薪水fromscott.empmax(字段名),计算数值型字段最大数。函数:sum函数:selectsum(sal)薪水总和fromscott.empsum(字段名),计算数值型字段总和。
用SQL录入数据
单行记录的录入:单行记录的录入:Insertinto数据表(字段名1,字段名2)values(字段名1的值,字段名2的值)注意:数值型字段,可以直接写值。字符型字段,要加单引号。日期型字段,要加上单引号。多行记录的录入:多行记录的录入:在数据的录入中,经常要将从数据表中查询到的数据稍做修改成批录入的情况,就是多行数据的录入。Insertinto数据表(字段名1,字段名2)(select(字段名1或运算,字段名2或运算)from数据表where查询条件)表间数据复制:表间数据复制:可以从一个数据表中选择需要的数据插入到全新的数据表中
。createtablescott.testas(selectdistinctempno,ename,hirdatefromscott.empwhereempno>=7000)
用SQL删除数据
删除记录:删除记录:deletefromscott.testwhereempno>=7500andempno<=8000整表数据删除:整表数据删除:truncatetablescott.testtruncatetable命令将快速删除数据表中的所有记录,但保留数据表的结构。这种快速删除与deletefrom数据表的删除全部数据表记录不一样,delete命令删除的数据将存储在系统回滚段中,需要的时候,数据可以回滚恢复,而truncate命令删除的数据是不可以恢复的。
用SQL更新数据
直接赋值更新:直接赋值更新:update数据表set字段名1=新的值,字段名2=新的值where条件例:updatescott.empsetempno=8888,ename=‘TOM’,hiredate=’03-9月-2002’whereempno=7878嵌套更新:嵌套更新:update数据表set字段名1=(select字段列表from数据表where条件),字段名2=(select字段列表from数据表where条件)例:updatescott.empsetsal=(selectsal+300fromscott.empwhereempno=8888)whereempno=8888……