5.1 SELECT 基本查询语句
1.使用计算列
1.查询scott方案下的emp表中每个雇员的姓名和将工资增sal加300后的新工资。
SELECT ename ||'的工作是'||job AS 雇员,sal + 300 AS 新工资 FROM scott.emp;
2.DISTINCT关键字
使用DISTINCT可以从结果中消除重复行。
例如:查询emp表中的job和deptno字段,要求去除重复行.
SELECT DISTINCT job,deptno FROM emp;
3.WHERE子句
where子句的功能是查找符合条件的记录:
1.比较运算符 (=、>、<、<=、>=、<>或!、!>、!<)
2.逻辑运算符 (OR AND NOT)
3.字符串模式匹配
%表示字符串包括0个或多个任意字符
_表示包含一个任意字符
倒数第二个字母是E的员工:SELECT * FROM emp WHERE ename LIKE '%E_';
4.范围比较
BETWEEN AND
5.使用查询列表
IN
: where column_name in (value1,value2,value3);
6.空值判定
IS NULL:空
NOT NULL:非空
4.ORDER BY子句
对查询结果进行排序:
ASC:升序排序
DESC:降序排序
默认为升序ASC排序,可以用字段序号或字段别名排序:
SELECT ename,sal FROM emp ORDER BY sal DESC;
可以指定多列数据排序,先将第一列数据排序,再按第二列排序。
5.使用统计函数
AVG、MAX、MIN、SUM、COUNT、COUNT(*)
6.GROUP BY子句
统计emp表中每个工作的员工人数:
SELECT job,COUNT(*) AS 人数 FROM emp GROUP BY job;
统计emp中每个部门中各种工作相同的员工人数:
SELECT dept,job,COUNT(*) AS 人数 FROM emp GROUP BY deptno,job;
7.HAVING子句
使用GROUP BY子句和统计函数后还可以使用HAVING子句进行再次的筛选。WHERE是对表中已有数据进行筛选。
1.统计平均工资大于2500的工作
SELECT job,AVG(sal) AS 平均工资 FROM emp GROUP BY job HAVING AVG(sal)>2500;
在SELECT语句中,先WHERE语句、再GROUP BY、后HAVING语句。
2.统计emp中1982年后参加工作的、雇员人数超过2人的部门编号
SELECT deptno,COUNT(8) AS 人数
FROM emp
WHERE hiredate>'1 -1月 -1982'
GROUP BY deptno
HAVING COUNT(*)>=2
5.2 SQL*PLUS 中常用函数介绍
1.字符串函数
- CONCAT:连接两个字符串
- LENGTH:返回字符串长度
- LOWER:转小写
- UPPER:转大写
- INITCAP:首字母转大写
- INSTR(string,value):查询字符value在string中的位置
- LPAD(string,length[,padding]):在字符串左侧填充padding字符length长度,没指定padding用空格填充
- RPAD(string,length[,padding]):同上在右侧填充
- REPLACE(string,old,new):用new字符串替换old字符串,如果没有指定new或new为空,则删除old字符串
- SUBSTR(string,start,length):获取子串,从start开始长度为length。
在使用这些函数时需要一个特殊的表--DUAL。
2.数值函数
- ABS:绝对值
- CEIL:大于或等于value的最小值
- FLOOR:等于或小于value的最大值
- COS:求余弦值
- COSH:求反余弦值
- EXP:返回以e为底的指数
- LN:返回自然对数值
- POWER(vakue,exponent):返回value^exponent
- SQRT:返回value的平方根
- ROUND(value,precision):将value按precision进行四舍五入
- MOD(value,divisor):求余
- TRUNC(value,precision):将value按精度precision进行截取
3.日期时间函数
- ADD_MONTHS(date,number):在指定日期date上增加number个月
- LAST_DAY(date):返回date所在月的最后一天
- MONTHS_BETWEEN(date1,date2):返回date1与date2之间间隔多少天
- NEW_TIME(date,old_zone,new_zone):将日期date从时区old_zone转换到new_zone
- NEXT_DAY(date,’day’):返回date后的下个星期day的日期
- SYSDATE:返回系统当前日期
- CURRENT_TIMESTAMP:返回当前的日期和时间
- EXTRACT(c1 from d1):从日期c1中抽取指定的年、月、日、时、分、秒
4.转换函数
- TO_CHAR(date,’format’):按照format格式将date转换为字符串
- TO_NUMBER(char):将包含数字的字符串转换为数值类型
- TO_DATE(string,’format’):将日期格式的字符串转换为日期型
- CHARTOROWID(char): 将字符串转换为ROWID格式
- ROWIDTOCHAR(x):将ROWID转换为字符串
5.3 SQL*PLUS格式化查询结果
- linesize:设置在一行中所能显示的总字符数
- space:设置每列之间的空格数
- timing:设置是否统计每个SQL命令的执行时间
5.4 SQL脚本文件的创建与执行
将sql语句保存为脚本文件:SELECT * FROM emp; SAVE D:\select_emp.sql
执行脚本文件:@D:\select_emp.sql 或 @@D:\select_emp.sql或 START D:\select_emp.sql
@:必须给出脚本完整路径
@@: 如果执行在当前路径可以不用完整路径