您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > Oracle_SQL小宝典
SQL语句定义:SQL语言是数据库的核心语言。全称是“结构化查询语言(StructuredQueryLanguage)。特点:1)SQL语句对大小写不敏感2)SQL语句可以写成一行或多行3)关键字不能简写或分开折行4)子句通常放在不同的行5)缩进用于增强可读性应用:关系型数据库采用结构化查询语(SQL)作为客户端程序与数据库服务器间沟通的桥梁——客户端发送SQL指令到服务器端,服务器端执行相关的指令并返回其查询的结果。显示表结构:descemp;(雇员表)显示表结构名称类型备注-------------------------------------------------EMPNONOTNULLNUMBER(4)雇员编号ENAMEVARCHAR2(10)雇员姓名JOBVARCHAR2(9)工种MGRNUMBER(4)经理人HIREDATEDATE入职日期SALNUMBER(7,2)薪水COMMNUMBER(7,2)津贴DEPTNONUMBER(2)部门编号descdept;(部门表)名称是否为空?类型备注-----------------------------------------------------------------DEPTNONOTNULLNUMBER(2)部门编号DNAMEVARCHAR2(14)部门名称LOCVARCHAR2(13)部门地址descsalgrade;(薪水等级)名称是否为空?类型备注--------------------------------------------------------------GRADENUMBER薪水等级LOSALNUMBER最低等级HISALNUMBER最高等级1.数据操纵语言(DML)DML(DataManupilateLanuage)用以完成对数据的操作,常见DML关键字包括select、insert、update、delete。1.1.查询语句功能:从数据库中返回相应信息。基本语法:SELECT*|{[DISTINCT]column|expression[alias],...}FROMtable说明:SELECT子句,确定被显示的列。FROM子句,确定表,该表包含SELECT子句中的字段列表。在语法中:SELECT是一个或多个字段的列表*选择所有的列DISTINCT禁止重复column|expression选择指定的字段或表达式alias给所选择的列不同的标题FROMtable指定包含列的表1.1.1.单表查询查询所有列。select*fromemp;选择指定的列。selectempno,ename,jobfromemp;查询去除重复字段的不同记录:selectdistinctjobfromemp;查询去除两者组合不同的记录。selectdistinctdeptno,jobfromemp;单条件查询:(where指定查询条件)selectempno,ename,jobfromempwherejob=‘MANAGER;like和notlike适合字符型字段的查询,%代表任意长度的字符串,_下划线代表一个任意的字符。Like’m%’代表m开头的任意长度的字符串,like‘m_’代表m开头的长度为3的字符串。组合条件查询:selectempno,ename,jobfromempwherejob’clerk’andsal=2000;排序查询:(orderby指定查询结果的排序方式)selectempno,ename,jobfromempwherejob=’clerk’orderbyjobasc,saldesc;分组查询:分组查询是指将查询结果按照字段分组。Where检查每条记录是否符合条件,having检查分组后的各组是否满足条件,having语句只能配合groupby语句使用。Selectempno,ename,job,salfromempgroupbyjob,empno,ename,salwheresal=2000;--在没有分组函数的时候--相当于distinct的功能selectjobfromempgroupbyjob;selectdistinctjobfromemp;--有分组函数的时候--分组统计的功能统计每种工作的工资总额是多少??selectjob,sum(sal)fromempgroupbyjob;--行之间的数据相加selectsum(sal)fromemp;--公司的工资总额字段运算查询:可以利用几种基本的算术运算符来查询数据。Selectempno,ename,sal,mgr,sal+mgrfromemp;利用算术运算符仅仅适合多个数值型字段或字段与数字之间的运算。1.1.2.多表查询所谓多表查询是相对单表而言的,指从多个数据表中查询数据。无条件查询:无条件多表查询是将各表的记录以“笛卡尔”积的方式组合起来。如scott.dept表共有4条记录,scott.emp表共有14条记录,其“笛卡尔”积将有4*14=56条记录。selectename,dnamefromemp,dept;等值多表查询:等值多表查询将按照等值条件查询多个数据表中相关联的数据。要求关联的多个数据表的某些字段具有相同的属性,即具有相同的数据类型、宽度和取值范围。92年的语法:Selectempno,ename,emp.deptno,dnamefromemp,deptwhereemp.deptno=dept.deptnoandename=’张三’;99年的语法:Selectempno,ename,emp.deptno,dnamefromempjoindeptonemp.deptno=dept.deptnowhereename=’张三’;非等值查询:Selectempno,ename,deptno,dnamefromemp,deptwhereemp.deptno!=dept.deptnoandemp.deptno!=10;1.1.3.嵌套查询在select查询语句里可以嵌入select查询语句,称为嵌套查询。有些书上将内嵌的select语句称为子查询,子查询形成的结果又成为父查询的条件。子查询可以嵌套多层,子查询操作的数据表可以是父查询不操作的数据表。子查询中不能有orderby分组语句。简单嵌套查询:Selectempno,ename,job,salfromempwheresal=(selectsalfromempwhereename=’ward’);上面的查询等价于两步:1)执行selectsalfromempwhereename=’ward’得出sal=1250;2)执行selectempno,ename,job,salfromempwheresal=1250;带in的嵌套查询Selectempno,ename,job,salfromempwheresalin(selectsalfromempwhereename=’ward’);带any的嵌套查询Selectempno,ename,job,salfromempwheresalany(selectsalfromscott.empwhereJOB=’MANAGER’);带any的查询过程等价于两步的执行过程。(1)执行“selectsalfromempwherejob=’MANAGER’”,其结果为2975,2850,2450.(2)父查询执行下列语句。Selectempno,ename,jobsalfromempwheresal2975orsal2850orsal2450带some的嵌套查询:Selectempno,ename,job,salfromempwheresal=some(selectsalfromscott.empwhereJOB=’MANAGER’);带some的嵌套查询与any的步骤相同。(1)执行“selectsalfromempwherejob=’MANAGER’”,其结果为2975,2850,2450.(2)父查询执行下列语句。Selectempno,ename,jobsalfromempwheresal=2975orsal=2850orsal=2450注:带any的嵌套查询和some的嵌套查询功能是一样的。早期的sql仅仅允许使用any,后来的版本为了和英语的any相区分,引入了some,同时还保留了any关键词。带all的嵌套查询:Selectempno,ename,job,salfromempwheresalall(selectsalfromscott.empwhereJOB=’MANAGER’);带all的嵌套查询和some查询步骤相同。执行过程:(1)执行“selectsalfromempwherejob=’MANAGER’”,其结果为2975,2850,2450.(2)父查询执行下列语句。Selectempno,ename,jobsalfromempwheresal2975andsal2850andsal2450带exists的嵌套查询:Selectempno,ename,job,salfromemp,deptwhereexists(select*fromempwhereemp.deptno=dept.deptno);并操作的嵌套查询:(集合中的并集操作,即属于集合A或集合B的元素)Selectdeptnofromempunionselectdeptnofromdept;交操作的嵌套查询:(集合中的交集,即属于集合A且属于集合B的元素)Selectdeptnofromempintersectselectdeptnofromdept;差操作的嵌套查询(集合中的差集,即属于集合A而不属于集合B的元素)Selectdeptnofromempminusselectdeptnofromdept;分页查询select*from(selectrownumasnum,emp.*fromemp)wherenum=9andnum=12;1.1.4.函数查询1数学函数Ceil函数:(ceil(n),大于等于数值n的最小整数)。Selectmgr,mgr/100,ceil(mgr/100)fromemp;Floor函数:(floor(n),取小于等于数值n的最大整数)Selectmgr,mgr/100,floor(mgr/100)fromemp;Mod函数:(mod(m,n),取m整除n后的余数)Selectmgr,mod(mgr,1000),mod(mgr,100),mod(mgr,10)fromemp;Power函数:(power(m,n),取m的n次方)Selectmgr,power(mgr,2),power(mgr,3)fromemp;Round函数:(round(m,n),四舍五入,保留n位)Selectmgr,round(mgr/100,2),round(mgr/1000,2)fromemp;Sign函数:(sign(n).n0,取1;n=0,取0;n0,取-1。)Selectmgr,mgr-7800,sign(mgr-7800)fromemp;Avg函数:(avg(字段名),求平均值。要求字段为数值型)Selectavg(mgr)平均薪水fromemp;Count函数:(count(字段名)或count(*),统计总数)Selectcount(*)记录总数fromemp;Selectcount(distinctjob)工作类别总数fromemp;Min函数:(min(字段名),计算数值型字段最小数)。Selectmin(sal)最少薪水fromemp;Max函数:(max(字段名),计算数据字段最大数)Selectmax(sal)最高薪水fromemp;Sum函数:sum(字段名),计算数值型字段总和。Selectsum(sal)薪水总和fromemp;2字符函数concat连接||1显示dname和loc中间用-分隔selectde
本文标题:Oracle_SQL小宝典
链接地址:https://www.777doc.com/doc-4896755 .html