简单的表操作
指令创建简单表createtable student(name varchar() age number() );
插入新记录insert into studentvalues(stone);
查看表结构desc student;
查询记录select * from student;
删除表drop table student;
删除表中的数据delete from studentwhere 条件;
说明SQLPlusWorksheet中用“”作为单行注释标记varchar()标明可变长度的字符串上限为
number()标明age为不包含小数点的位的整数如果只定义成number则系统默认为位的整数
单引号引起来的字符是SQL语言中字符串常量的表示方式SQL语言中的关键字大小写是不敏感的
数据库开发人员喜欢使用大写关键字应用程序开发人员多数使用小写的以实现良好的可读性
插入记录后其实并没有在数据库中立即永久生效这时可以使用commit;提交数据的更新操作
简单的Select语句
语法格式SELECT *|{<字段名>} FROM <表名>;字段间用逗号隔开在逗号后面添加空格可以增强可读性
例如select * from emp;或select empno ename sal from emp;
显示效果Sql*plus的默认显示Date和character型数据左对齐Numeric型数据右对齐列标题默认显示为大写
iSql*plus的默认显示列标题默认显示为大写列标题缺省居中对齐
使用算术表达式
概述在Select语句中对NUMBER型数据可以使用算术运算符(+*/)创建表达式
举例select empno ename sal sal* from emp;查询emp中员工的编号姓名工资和年薪
select empno ename sal sal*+ from emp;
select empno ename sql sal*(+) from emp;可以使用括号更改计算顺序
连接运算符
概述即“||”可以把列与字符或其它表达式连接在一起得到一个新的字符串实现“合成”列的功能
举例select ename || is a || job from emp;
select empno ename ||s annual salary is|| sal* from emp;
说明用一个单引号代表字符串常量的分隔标记用两个单引号代表字符串常量中出现的一个单引号字符
在查询的时候也不需要转义符直接用两个单引号代表字符串常量中出现的一个单引号即可
使用字段别名
概述重命名查询结果中的字段以增强可读性如果别名中使用特殊字符或强制输出大小写时需使用双引号
格式SELECT <字段名>|<表达式> [[AS]<字段别名>] FROM<表名>;
举例select empno ename "Ename" sal* "年 薪" from emp;
select empno as 员工编号 ename 员工姓名 sal* "年薪" from emp;
说明as可以不加别名可以用双引号引起来如果别名中不包含特殊字符双引号可以省略
如果别名中包含了空格如"年 薪"就必须加双引号否则将被解析成两个成份导致语法上出问题
如果Ename不加双引号那么执行后会显示为ENAME只有给它加上双引号之后才会遵重大小写来显示
空值
概述空值是无效的未指定的未知的或不可预知的值空值不等同于或空格
举例select empno ename sal comm from emp;执行后某些记录的comm属性会显示一片空白即空值
insert into student(age) values();插入数据时如果没有指定name值那么默认的name就是空值
补充算术表达式中如果出现空值则整个表达式结果为空
连接表达式中出现的空值被当作一个空的(长度为零的)字符串处理
如select ename sal comm ename || || comm sal+comm from emp;
在算术表达式中如果涉及到空值的话可以使用相应的函数对可能存在空值的字段进行缺省值的设置
经过判断之后如果它是空值则返回如果不是空值则返回它真正的值然后再进行算术运算
去除重复行
概述缺省情况下查询结果中显示所有符合条件的记录行包括重复行可以使用DISTINCT可以清除重复行
DISTINCT的作用范围是后面所有字段的组合即后面的多个字段的组合不出现重复就可以了
举例select deptno from emp;本意是查询部门编号的种类显示的却是所有的编号包括重复编号
select distinct deptno from emp;清除查询结果中重复的部门编号
select distinct deptno job from emp;只要deptno和job组合后的结果不重复那么就都显示输出
说明通常把极为简单的数据处理包括数据的查询组合过滤或转换类型等操作均交给数据库进行处理
比如分组统计求和求平均值过滤空值过滤重复值数据开头和结尾的空格过滤字符串转日期型等等
而对于复杂些的业务逻辑或者与商业逻辑相关的内容建议在应用程序中处理这样也就实现了松散的耦合
查询结果排序
概述查询结果缺省按照记录的插入顺序进行排列可以使用ORDER BY子句对查询结果进行排序
排序方式包括升序(ASC缺省)和降序(DESC)两种也可以使用字段别名排序或按多字段排序
举例select empno ename sal from emp order by sal;按sal进行升序排列ASC可以省略不写
select empno ename sal from emp order by sal desc;按sal进行降序排列
select empno ename sal* annsal from emp order by annsal;
select deptno empno ename sal from emp order by deptno sal;
说明多字段排序时先按照deptno排序如果在得到的排列结果中存在重复的deptno记录的话
就将重复的deptno记录再按照sal排序至于具体的排序方式则需要对两个字段进行单独指定
如deptnosal表示二者均按升序排列deptnosal desc表示deptno按升序排列sal按降序排列
如deptno descsal表示deptno按降序排列sal按升序排列依此类推
这种逻辑适合由数据库在查询阶段进行处理在应用程序中通过代码来实现的话就会困难一些
条件查询
说明在查询语句中或查询条件中使用字符串或日期的时候字符串和日期值要用单引号括起来
字符串大小写敏感日期值格式敏感缺省的日期格式是DDMONRR
注意凡涉及到字符串内容的比较大小写都是敏感的
格式SELECT *|{[DISTINCT]<字段名>|<表达式>[<别名>]} FROM<表名> [WHERE <查询条件>];
举例select * from emp where ename=SMITH;这里所要查询的SMITH严格区分大小写
select * from emp where hiredate=月;系统会自动将符合约定格式的字符串转换成Date型
select sysdata from dual;以缺省的日期格式获取当前的系统时间
说明表dual中只有一行一列它本身并不保存系统时间sysdate永远代表当前的系统时间
通常在进行简单的查询或运算的时候dual表起一个媒介的作用使得形式上看起来像是查询
dual的好处在于只有一行记录它一般用在练习时测试某些指令一般不在真实的开发使用它
比如select + from dual;返回又如select + from emp;则会返回很多行的
它会对emp中每一行记录都查询但查的不是真正保存的内容而是逐行的计算一遍+
再把得到的作为一个唯一的结果也是唯一的一个字段返回来所以结果就是多行的
对于Oracle数据库即使是想让它做一个简单的常量表达式的运算也要采用问答的形式
即便此时所有的数据都在用户的手中那也要装作是查询给它一个指令令其返回结果
关系运算符
符号BETWEENAND界于两值之间包括边界并且必须把小的数值放在前面
IN(set)出现在集合中判断是否存在某字段等于集合中的值的记录
LIKE模糊查询也叫通配查询
IS NULL判断空值
示例select * from emp where sal between and ;查询工资界于和之间的员工的信息
select * from emp where ename in(SMITHKINGKing);返回姓名为set中的元素的值的记录
select * from emp where comm is null;返回所有comm字段的值为空的记录
select * from emp where comm is not null;返回非空的注意和空是不同的
注意凡涉及到字符串内容的比较大小写都是敏感的即in()中的值需要与ename值完全匹配方可查询出记录
LIKE%代表零或多个字符_代表一个字符可以使用ESCAPE标识特殊符号
select * from emp where ename like S%;查询以S开头的姓名的记录这里S仍然是大小写敏感的
select * from emp where ename like _A%;查询第二个字母是A的姓名的记录
select * from emp where ename like %_% escape ;返回姓名存在下划线的记录
这里的escape标明“”起到转义符的作用在真实的开发中这种转义符用的并不多
Oracle中的转义符可以随便定义所以例句中的“”也可以换成其它的符号如“K”
说明用一个单引号代表字符串常量的分隔标记用两个单引号代表字符串常量中出现的一个单引号字符
在模糊查询的时候也不需要转义符直接用两个单引号代表字符串常量中出现的一个单引号即可
逻辑运算符
概述优先级由高至低NOT→AND→OR
举例select * from emp where deptno= and sal>;返回部门编号为而且工资大于的记录
select * from emp where deptno= or sal>;返回部门编号为的人或者工资大于的记录
select * from emp where deptno not in();返回部门编号没有出现在该集合中的人的信息