--创建一个简单的表
create table student(
name varchar2(20),
age number(3)
);
--插入新纪录
insert into student values('Tom',18);
--查询记录
select * from student;
--查看表结构(desccribe)命令窗口
desc student;
--删除表
drop table student;
SQL语句分类
1.Select查询语句
2.DML语句(数据操作语言)
insert update delete merge
3.DDL语句(数据定义语言)
create alter drop truncate
4.DCL语句(数据控制语言)
grant revoke
5.事务控制语句
commit rollback savepoint
select *|{<列名或者字段名>,,,,} from <表名>;
算术表达式
在SELECT语句中,对NUMBER型数据可以使用算术运算符创建
表达式。
select name,age,sal,sal*12 from emp;
算术运算符
+ - * /
运算优先级
1.乘除高于加减
2.同级从左到右
3.用()强行改变运算顺序
select empno,ename,sal,sal*12+1000 from emp;
select empno,ename,sal,sal*(12+1000) from emp;
连接运算符
(实际应用较少,目的为了改变现实效果。实际中,会在其
他应用中进行此操作。--了解--)
连接运算符‘||’可以把列和字符 、或其他表达式连接在一
起,得到一个新的字符串,实现‘合成’列的功能。
("转义符,代表字符串常量中的单引号 --> SQL)
(‘代表字符串常量的分隔标记)
用法列举:
select ename||'is a'||job from emp;
select empno,ename||'"s annual salary is'||sal*12
from emp;
注意语句的可读性
字段别名
1.重命名查询结果中的字段,以增强可读性
2.如果别命中使用特殊字符,或者是强制大小写敏感、空格
、、、使用双引号
select <字段名>|<表达式>【【AS】<字段别名>】,,
from <表名>;
select empno as 员工编号,ename 员工姓名,sal*12 "年
薪" from emp;
select empno,ename"Ename",sal*12"Anual S alary"
from emp;
空值(掌握)
1.无效的、未指定的、未知的或不可预知的值。
2.空值不等于空格或者0。
类似相当于null吧
在表达式中使用空值
1.算术表达式中如果出现空值,则整个表达式结果为空。
后果很严重。
2.连接表达式中出现的空值被当做一个空的(长度为零的)
字符串处理
去除重复行
1.在缺省情况下,查询结果中包含所有符合条件的记录行,
包括重复行。
select deptno from emp;
(部门编号有可能很多相同)
2.使用distinct关键字可从查询结果中清楚重复行
select distinct deptno from emp;
3.distinct的作用范围是后面所有字段的组合
select distinct deptno,job from emp;
查询结果排序(掌握)
1.查询结果缺省按照记录的插入顺序进行排列
2.也可使用order by 子句对查询结果进行排序,排序方式包
括升序(asc,缺省)和降序(desc)两种;
select empno,ename,sal from emp order by sal;
select empno,ename,sal from emp order bu sal desc;
3.按多字段排序
select deptno,empno,name,sal from emp order by
deptmo(desc),sal(desc);
4.使用字段别名排序
select empno,ename,sal*12 annsal from emp order by
annsal;
条件查询(重中之重)
select *|{[distinct]<字段名>|<表达式>[<别名>],,,}
from <表名> [where <查询条件>];
查询语句中使用字符串和日期
1.字符串和日期值要用单引号扩起来
2.字符串常量内容大小写敏感
3.日期值格式敏感,缺省的日期格式是'DD-MON-RR'
select * from emp where ename='SMITH';
select * from emp where hiredate='02-4月-81';
4.获取当前缺省日期格式
select sysdate from dual;
(dual表是平时学习练习用的表,只有一行一列。真实中是
不用的。)
比较运算符
1. > >= = < <= <>不等于( != 较少用到)
2.between(小值)...and(大值)...
界于两值之间,包括边界
3.in(set) 出现在集合中
4.like 模糊(通配)查询
1>%表示零或多个字符
2>_表示一个字符
3>对于特殊符号可以使用escape标识符来查找
4>字符串常量中:两个单引号-->一个单引号(插入数据经常
用到)
select * from emp where ename like '%\_'
escape'\';
5.判断空值 is (not) null 为空值
select * from emp where comm is null;
注意:0和null的区别;
逻辑运算符(优先级)
1.not '非'(高)
select * from emp where deptno not in(20,30,40);
2.and '与'(中)
select * from emp where deptno=20 and sal>2000;
3.or '或'(低)
select * from emp where deptno=20 or sal>2000;
注意:与和或的查询结果差异性,后者比前者条件限制小
SQL-->关键字大小写不敏感;
运算符优先级(同级:左-->右)
1 * /
2 + -
3 ||
4 = > >= < <= <>(不等于 !=)
5 is (not) null;like;(not) in
6 (not)between...and...
7 not
8 and(但是)
9 or
10 可使用小括号强行改变运算顺序
select * from emp where job='SALESMAN' or job='CLERK' and sal>=1280;
分析:先=次and后or
翻译:工作是文秘但是薪资大于等于1280的记录或者工作是销售员的记录都符合所查条件;
select * from emp where (job='SALESMAN' or job='CLERK') and sal>=1280;
注意:小括号
翻译:查找要求即工作是销售员或文秘但是薪资大于等于1280的记录;
比较:
后者较之前者条件明显放宽;