结果集是表里的部分行:选择操作
结果集来在多张表的记录的组合:连接操作
单表操作
多表操作
sql语句经sqlplus送给server process(连接建好后标志创建server process进程),对语句进行语法分析,语义分析,产生执行计划并执行,生成结果集, 把结果集传回sqlplus.
课堂练习
1列出每个员工的名字和他的工资?
2列出部门表的所有信息?
*表示所有列
3列出每个员工的名字和他的年薪?
4列出每个员工的名字和他一年的总收入
6公司里有哪些职位?
7公司里有哪几类奖金?
8各个部门有哪些不同的职位?
9哪些员工的工资比5000高?
10哪些员工的工资比5000高,列出名字,年薪
11哪些员工的年薪大于60000?列出名字,年薪
12 zhangwuji的年薪是多少?
课外练习
1不知道ename存储的大小写,找出zhangwuji的年薪?
2哪些员工的工资在[5000,10000]之间.
3 哪些员工的奖金是400,500,1000
4 哪些员工的工资不在[5000,10000]之间.
5 哪些员工的奖金不是400,500,1000.
SQL比较运算符
1 >= and <= between ... and,范围,闭区间
where salary between 5000 and 10000
2= or = or in =any 集合 离散
where bonus in (400,500,1000)
= 单值运算符 in 多值运算符
= -> =any 等于任意一个值
3 like 像...一样 模糊 字符型
通配符 % 表示0过任意多个字符
_ 表示任意一个字符
'S' like 'S%'1-任意 like 'S_' 条件长度2
课堂练习
1哪些员工名字的第二个字符是h?
2哪些员工的职位是以J_开始?
3哪些员工没有奖金?
4哪些员工有奖金?
6找出3月份入职的员工?
7 十分钟之前,十分之之后
10 有奖金的平均值,和,个数,最大值,最小值
11所有人的奖金的平均值,和,个数,最大值,最小值
14各个部门的平均工资?(emp)
15每种奖金有多少人?
第二天课外练习
1substr(p1,p2,p3) 求子串,p1要处理的串,p2是起始位置(1开始,从左往右数,-1从右往左数),p3子串的长度
显示每个员工名字的最后两个字符?
2工资小于5000的涨10%,
在[5000,10000]涨5%,
其他人不变
3 每种奖金有多少人?
4 10部门的平均工资?(只显示平均工资)
结论:在没有group by子句的情况下,select语句后面如果有一个组函数,其他的都得是组函数
5 10部门,30部门的平均工资,显示部门号,平均工资
6估算语句的结果集
第三天内容
select语句的语法顺序
select from where group by
select语句的执行顺序
from where group by select(组信息)
平均工资比5000高的那些部门的人数?
where和having比较
共同点:过滤,都执行在select之前,都不可以跟列别名
不同点:
where过滤的是记录,后面可以跟任意列名,单行函数,不能跟组函数,执行在group by之前
having过滤的是组,后面可以跟组函数,组标识,不能跟任意的列名(除组标识),单行函数,执行在group by之后
order by子句
select语句的语法顺序
select from where group by having
order by
select语句的执行顺序
from where group by having select(组信息)
课堂练习
1哪种奖金的人数多于2人?
2 各个部门不同职位的平均工资?
2列出员工的名字,部门号,工资,部门号升序,同一部门按工资降序.
3 列出员工的名字和年薪,按年薪降序排列
4哪些员工的工资是最低的.
执行顺序
先执行子查询(只执行一遍),若返回多条记录,去重,拿到该结果执行主查询.主查询的比较运算符的选择由子查询返回的记录数决定.(单值运算符,多值运算符)
5哪些员工的工资比zhangwuji的工资高?
6哪些部门的平均工资比30部门的平均工资高?
7哪些人是领导?
8哪些人是员工? 哪些人不是领导?
9哪些员工的工资等于本部门的平均工资
10 找出每个部门工资做高的员工?
11哪些员工的工资大于本部门的平均工资
exists和not exists
如果找到匹配,立即返回,exists(记录放入结果集),not exists(过滤)
如果找不到匹配(跟所有的都不匹配),exists(过滤),not exists (记录放入结果集)
哪些部门有员工?部门名称,部门位置,部门号
哪些人是员工?那些人不是领导?
子查询
非关联子查询(单列和多列)
关联子查询(exists not exists)
多表查询
连接join
cross join(交叉连接)
inner join(内连接)
outer join(外连接)
课外练习
1 zhangwuji的领导是谁?
2 zhangwuji领导谁?
3 哪些人是领导?
4 哪些人是员工?哪些人不是领导?
5 哪些部门有员工?
6 哪些部门没有员工?
7 结果集是什么?为什么?
第四天
1列出部门名称和职位?
2哪些员工在beijing上班?
3各个部门的平均工资,列出部门名称,地区名称,平均工资?
哪些员工的工资比本部门的平均工资高?
列出员工名字和他领导的名字
外连接结果集=内连接的结果集+(t1表中匹配不上的记录和t2表的null记录的组合)
各个部门的平均工资,显示部门名称,地区,平均工资(包含40部门)
哪个部门没有员工?
哪个部门没有叫zhangwuji的?
哪些人是员工?(哪些人不是领导)
课外练习
1 zhangwuji领导谁?
2 zhangwuji的领导是谁?
3各个部门的平均工资,显示部门名称,地区,平均工资(包含40部门)三种写法
4 各个级别的人数(两种都要)