普通用户连接:Conn scott/tiger
超级管理员连接:Conn"sys/sys as sysdba"
Disconnect: 断开连接
Save c:\1.txt 把SQL 存到文件
Ed c:\1.txt 运行SQL语句
Desc emp:描述Emp结构
Select *from tab:查看该用户下的所有对象
Show user:显示当前用户
如果在sys用户下:查询Select * from emp;会报错,原因是属于scott,所以此时必须使用:select * from scott.emp;
/ 运行上一条语句
SQL 简介查询基础
DML语句(数据操作语言) Insert、Update、Delete、Merge(合并)
DDL语句(数据定义语言)Create、Alter(改变)、Drop、Truncate(截短)
DCL语句(数据控制语言) Grant(授予)、Revoke(吊销)
事务控制语句 Commit、Rollback、Savepoint
使用算术表达式 用+ - /*
连接运算符 ||
使用字段别名 as
空值 is null
去除重复行 distinct
ps: select distinct * from tablename
显示当前时间用sysdate
Having 和Where的简单介绍
WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。
GROUP BY 子句用来分组 WHERE 子句的输出。
HAVING 子句用来从分组的结果中筛选行
ps:
having 必须group by having用在 group by 之后 where 用在from之后
having 可以用聚合函数
查询结果排序 order by asc(desc)
例子:
- SELECT 字段列表FROM 表名WHERE 条件
- ORDERBY 字段名1 [ASC|DESC][,字段名2 [ASC|DESC]...];
SELECT 字段列表 FROM 表名 WHERE 条件
ORDER BY 字段名1 [ASC|DESC][,字段名2 [ASC|DESC]...];
ORDER BY从句后跟要排序的列。ORDER BY 从句出现在SELECT语句的最后。
排序有升序和降序之分,ASC表示升序排序,DESC表示降序排序。如果不指明排序顺序,默认的排序顺序为升序ASC。如果要降序,必须书写DESC关键字
比较运算符 ><(!= or <>)between and
in 操作 not in
对于 in和exists的性能区别:
如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in,反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。
其实我们区分in和exists主要是造成驱动程序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我
们会以驱动表的快速返回为目标,那么会考虑到索引及结果集的关系了
另外 IN是对NULL进行处理的
如:select 1 from dual where null in(0,1,2,null)
为空
模糊查询 like
%表示零或多个字符
_ 表示一个字符
对于特殊符号可使用ESCAPE标志符来查找
select *from emp where ename like'%_%'escape'*'
上面的escape 表示*后面的那个符号不当成特殊字符处理,就是查找普通的_符号
逻辑运算符 or and not
练习(如果用的是system权限的话 下面的表的名字应改为 scott.emp)
选择在部门30中员工的所有信息
select * from emp where deptno=30;
列出职位位(MANAGER)的员工的编号,姓名
select empno,ename from emp where job='Manager';
找出奖金高于工资的员工
select * from emp where comm>sal;
找出每个员工奖金和工资的总和
select comm+sal ,ename from emp;
找出部门10中的经理(MANAGER)和部门 20的普通员工(CLERK)
select * from emp where (deptno=10 and job=‘MANAGER') or (deptno=30 and job='CLERK');
找出部门10中既不是经理也不是普通员工,而且工资大于2000的员工
select * from emp where deptno=10 and job not in('MANAGER','CLERK') and sal>2000;
找出没有奖金或者奖金低于500的员工
select * from emp where comm<500 or comm is null;
显示雇员姓名,跟军其服务年限,将最老的员工排在最前面
PS:因为最老的年份最小 所以默认还是从小到大的asc排序
select ename from emp order by hiredate;