Oracle上课学习笔记<1>

简单的select查询语句

1.select查询语句基本语法
使用两个关键字:
select 指定要查询的字段和内容
from 从哪张表中查询
语法:select 字段名 from 表名;

三种不同的用法:
1)查询某张表中特定的某一个字段
select 字段名 from 表名;
例如:查询员工表中所有员工的id
SQL:select id
from s_emp;
2)查询某张表中的多个字段
字段之间通过逗号分隔
select 字段1,字段2,字段3.... from 表名;
例如:查询员工表中所有员工的id、last_name?
SQL:select id,last_name
from s_emp;
查询所有员工的id、last_name、salary?
SQL:select id,last_name,salary
from s_emp;
3)查询一张表中的所有字段
1)将所有字段名全部定义出来进行查询
2)使用*符号 代表全部字段的含义
例如:查询部门表中全部字段的全部内容?
SQL:select id,name,region_id
from s_dept;
等同于:select * from s_dept;

区别:方式1)直接根据字段名取字段值
效率较高
方式2)使用*号,要先查询当前表中
有哪些字段,再根据查询的结果
去取对应的字段值。
效率较低。

2.算数运算
1)数值类型的运算
包括 加减乘除
+ - * /
例如:查询员工12个月的总收入?
select salary*12 from s_emp;

练习:员工每个月涨了200元
查询加薪之后的12个总收入?
select (salary+200)*12
from s_emp;

练习:在加薪200元的基础上,每位员工有
年终奖500元。
查询每位员工一年的薪水?
(该公司一年为员工付薪18月)
select (salary+200)*18+500
from s_emp;


2)日期类型的运算
日期类型运算只有加减法
加法代表向指定日期的未来数几天
减法代表向指定日期的过去数几天

例如:查询所有员工入职时间的前一天?
select start_date-1 from s_emp;

3.处理空值
查询所有员工的id、提成(commission_pct)?
select id,commission_pct
from s_emp;

查询所有的员工id、工资+提成?
select id,salary+commission_pct
from s_emp;

单值函数:nvl(字段名,默认值)
把有可能出现空值的字段,写在nvl函数中。
如果字段值查询结果不为空,则使用原来的值。
如果字段值为空,使用默认值。
SQL:select id,salary+nvl(commission_pct,0)
from s_emp;

错误写法:
select id,nvl(salary+commission_pct,0)
from s_emp;

4.字符串拼接
可以把多个字段的结果拼接成一个字段显示。
例子:查询员工的全名?
first_name last_name

select first_name,last_name
from s_emp;
在Oracle数据库中拼接字符串使用 ||
语法:字符串1||字符串2||字符串3.....
SQL:select first_name||last_name
from s_emp;

练习:查询所有员工的全名?
要求:姓氏和名字之间使用“-”分割。
select first_name||'-'||last_name
from s_emp;

concat:字符串拼接
select first_name||last_name
from s_emp;
等同于:
select concat(first_name,last_name)
from s_emp;

5.查询结果起别名
1)查询结果可以看作是一张表
2)这张表中的字段名取决于
select关键字后面定义的内容(默认)。

四种方式:
1)select 字段 别名 from 表名;
2)select 字段 as 别名 from 表名;
3)select 字段 "别名" from 表名;
4)select 字段 as "别名" from 表名;

方式1和方式2没区别。

例如:查询所有员工的id以及12个月的薪水?
并且12个月的薪水显示结果为Sal?
select id,salary*12 as "Sal"
from s_emp;
加双引号和不加双引号的区别:
在Oracle数据库中,查询的结果字段名默认
为全部大写字母。
如果需要使用特定的格式(例如包含小写字母)
就需要把别名用双引号包含。

6.设置查询结果的显示格式
column 修改字段显示格式
简写为col
语法:
column/col 字段名 format 格式;
例如:
把last_name字段设置为显示15个字符长度。
col last_name format a15;
a:代表要处理的数据是字符类型。
15:要显示的长度。
字段名不是特指某张表中的某个特定字段。
而是指查询结果字段。

 注:例题、例题中的表格是上课时插入的表格

练习题:

1)查询员工的工资和last_name,对工资进行升序排列
select salary,last_name
from s_emp
order by salary asc;
2)查询员工的工资和last_name,对last_name进行降序排列。
select salary,last_name
from s_emp
order by last_name desc;
字符类型根据首个字母的字典顺序。ASCII码排序
65-90 A-Z 97-122 a-z


3)查询员工的工资和last_name,先对salary进行降序排列,再对last_name进行升序排列。
select salary,last_name
from s_emp
order by salary desc,last_name asc;
4)请举例说明空值的排序规则
空值在排列时视为无限大。
所以在降序排列中空值排在最前。
在升序排列中空值排在最后。

5)查询41号部门员工的信息?;
select id,last_name,salary,dept_id
from s_emp
where dept_id = 41;
6)查询工资大于1000的员工的信息?
select id,last_name,salary
from s_emp
where salary > 1000;
7)查询工资大于1000小于1500员工的信息,
使用两者方式来做?
a)select id,last_name,salary
from s_emp
where salary>1000 and salary<1500;
b)select id,last_name,salary
from s_emp
where salary between 1000 and 1500;
8)查询41或者42部门员工的信息,
使用两者方式来做?
a)select id,last_name,salary
from s_emp
where dept_id = 41 or dept_id = 42;
b)select id,last_name,salary
from s_emp
where dept_id in(41,42);

9)查询last_name包含n的员工的信息?
select id,last_name
from s_emp
where last_name like '%n%';

10)查询last_name包含n或者N的员工的信息?
select id,last_name
from s_emp
where last_name like '%n%'
or last_name like '%N%';

方法二:
select id,last_name
from s_emp
where upper(last_name) like '%N%';

select id,last_name
from s_emp
where lower(last_name) like '%n%';

upper函数:可以把指定字符串转换成全部大写的形式。

11)查询last_name第二个字母为g的员工的信息?
select id,last_name
from s_emp
where last_name like '_g%';

12)查询last_name最后一个字母为o的员工的信息?
select id,last_name
from s_emp
where last_name like '%o';

13)查询last_name以N开头的员工的信息?
select id,last_name
from s_emp
where last_name like 'N%';

14)先插入这条数据
insert into s_emp(id,last_name)
values(999,'_briup');
commit;
然后查询以_开头的员工的信息?
select id,salary
from s_emp
where last_name like 'a_%' escape 'a';
15)找出部门41中所有经理和部门43中的所有办事员的详细资料
职称字段为:Title
经理职称为:Warehouse Manager
办事员的职称为:Stock Clerk
select id,last_name,salary,dept_id
from s_emp
where dept_id=41
and title='Warehouse Manager'
or dept_id=43 and title='Stock Clerk';

猜你喜欢

转载自www.cnblogs.com/weixinyu98/p/9934266.html