sql查询语句

  • 格式:doc
  • 大小:1.71 MB
  • 文档页数:30

数据定义语言DDLcreate 数据库对象的创建alter 修改数据库对象drop 删除数据库对象truncate 清空表数据数据操纵语言DMLinsert 插入操作update 更新操作delete 删除操作数据查询语言DQLselect 查询操作事务控制语句DCLcommit 提交数据rollback 数据回滚savepoint 保存点数据类型数字:number(n) 数字( 最长n位)number(n , m) 浮点数( 总长n为, 小数点后m位) 例:number(7,2) 表示最大数为99999.99字符串:char(n) 表示定长字符串( 方便查询)最长放入n个字符, 放入的数据如果不够n个字符则补空格, 无论如何都占n个字符长度。

varchar(n) 表示变长字符串( 节省空间)最长放入n个字符, 放入的数据是几个长度就占多大空间varchar2(n) Oracle自己定义的变长字符串日期date 日期三种SQL语句总结建表create table 表名(列名1 列类型,列名2 列类型,…..);插入数据insert into 表名values(列值, ……);查询select * from 表名;Sql语句中函数的使用nvl(d1 , d2)作用:如果d1为null则用d2替代,nvl函数的两个参数可以是数字、字符或日期, 但两个参数的数据类型必须一致。

例子:查询emp表中所有员工的工资,若工资为空,则返回0;Select nvl(salary,0)from emp ;“||” 符号“||” 符号表示两个数据串接起来, 类似于Java中的两个字符串之间的+号;例子:连接职员表中的职员名字、职位、薪水,列之间用逗号连接,列头显示成OUT_PUT 提示1: 字符串连接符|| 提示2:用别名控制列头显示select ename || ', ' || job || ', ' || salary OUT_PUT from emp;as 复制表例子:把emp_yyy表的内容复制到新建的emp_xxx表中;SQL > create table emp_xxxasselect * from emp_yyy ;distinct关键字注意:distinct必须( 只能)跟在select后边例子:显示出职员表中的不重复的职位;select distinct job from emp;lower()函数将字符数据转换为小写( 如果不知道职位的大小写形式, 可以使用lower函数, 忽略大小写)例子:查找职位为“analyst”的员工Select * from emp where lower(job)=‘analyst’;upper()函数将数据转换为大写例子:忽略大小写, 查找职位为“analyst”的员工select * from emp_xxx where upper(job) = 'ANALYST' ;between …and…在区间中:between 低值and 高值闭区间:[低值, 高值]例子:薪水大于5000并且小于10000的员工数据?in( 列表)例子:列出职位是Manager或者Analyst的员工模糊匹配like %“% ”表示0到多个字符, 跟like配合使用“_”下划线表示一个字符例子:列出职位中第二个字符是a的员工数据?s elect * from emp_xxx where job like '_a%' ;count(1)例子:查询数据库中有多少个名字中包含'EMP' 的表?select count(1) from user_tables where table_name like '%EMP%' ;SQL> select count(1) from emp_xxx where hiredate is not null;等同于SQL> select count(hiredate) from emp_xxx;--注意:count函数忽略空值count(*)例子:查询数据库中有多少个名字中以'S_' 开头的表?select count(*) from user_tables where table_name like 'S\_%' escape '\' ;如果要查询的数据中有特殊字符( 比如_或% ), 在做模糊查询时, --需要加上\符号表示转义, 并且用escape短语指明转义字符\;is null例子:查询哪些员工没有奖金?is not null例子:哪些员工有奖金?select * from emp_xxx where bonus is not null ;薪水不在5000至8000的员工?select * from emp_xxx where salary not between 5000 and 8000 ;not in (list)例子:不是部门20和部门30的员工?select * from emp_xxx where depno not in( 20 , 30 ) ;round( 数字, 小数点后的位数)用于数字的四舍五入例子:计算金额的四舍五入trunc()trunc( 数字, 小数点后的位数)用于截取,如果没有第二个参数, 默认是0 例子:计算金额, 末尾不做四舍五入函数coalesce()coalesce( 参数列表)函数的作用:返回参数列表中第一个非空参数, 参数列表中最后一个值通常为常量例子:计算员工的年终奖金要求:1) 如果bonus不是null , 发年终奖金额为bonus2) 如果bonus是null , 发年终奖金额为salary * 0.53) 如果bonus和salary都是null, 发100元安慰一下select ename , bonus , salary , coalesce( bonus , salary*0.5 , 100 ) bonus f romemp_xxx ;返回参数列表中第一个非空数据最后一个参数通常是常量decode函数decode()函数是Oracle中等价于case when语句的函数, 作用同case语句相同。

decode函数语法如下:decode(判断条件, 匹配1 , 值1 , 匹配2 , 值2 , …, 默认值) 表达的意思是:如果判断条件= 匹配1 , 则返回值1 判断条件= 匹配2 , 则返回值2例子:根据员工的职位, 计算加薪后的薪水数据要求:和case语句相同1) 如果职位是Analyst:加薪10%2) 如果职位是Programmer:加薪5%3) 如果职位是clerk:加薪2%4) 其他职位:薪水不变select ename , salary , job , decode( job , 'Analyst' , salary * 1.1 ,'Programmer' , salary * 1.05 , 'clerk' , salary * 1.02 , salary) new_salary from emp_xxx ;order by例子:薪水由低到高排序( 升序排列)select * from emp_xxx order by salary asc;--正序排列, asc可以省略空值被看做最大--desc( descend )降序排列不可省略select * from emp_xxx order by salary desc;数据字典1) user_tables 用户所有的数据表2) user_constraints 用户所有的约束条件3) user_objects 用户所有的对象( 表、视图、索引等)4) all_tables 用户能访问的数据表包括自己的和别的用户允许自己访问的5) all_constraints 用户能访问的约束条件6) all_objects 用户能访问的对象( 表、视图、索引等)7) 数据字典的格式如:user_XXX: 用户自己的对象all_XXX:用户能访问的对象dba_XXX:数据库所有的对象1) user_tables字段table_name 表名例子:当前帐户( scott)下有多少个表?select count(1) from user_tables;例子:scott帐户下有多少个名字中包含emp的表?select count(1) from user_tables where lower(table_name) like '%emp%';2) user_objects字段created 表的创建时间例子:1年12月07日后创建的表, 删除过时的表。

例子2:计算五个月之前创建的数据表的个数select count(a.table_name) from user_tables a join user_objects b on a.table_name = b.object_name where b.created < add_months(sysdate, -5);分组查询:group bygroup by 列名:表示按指定列分组查询例子:按部门计算每个部门的最高和最低薪水分别是多少?select deptno , max(salary) max_s , min(salary) min_s from emp_xxx group by deptno ;例子:计算每个部门的薪水总和和平均薪水?select deptno, max(salary),min(salary),sum(salary),avg(nvl(salary,0)) from emp_xxx group by deptno;例子:每个部门的统计信息:select deptno, max(salary) max_s , min(salary) min_s , sum(salary) sum_s ,avg(nvl(salary , 0)) avg_s , count(*) emp_num from emp_xxx group by deptno ;例子:按职位分组, 每个职位的最高、最低薪水和人数?select job , max(salary) max_s , min(salary) min_s , count(*) emp_num from emp_xxx group by job order by emp_num注意:select后出现的列, 凡是没有被组函数包围的列, 必须出现在group by 短语中having子句having子句用于对分组后的数据进行过滤。