sql99语法介绍:
语法:
select 查询列表 from
from 表一 别名 【连接类型】
join 表二 别名
on 连接条件
【where 筛选条件】
【group by 筛选条件】
【having 筛选条件】
【order by 排序列表】
分类:
内连接 ;inner
外连接 左外:left 【outer】
右外:right 【outer】
全外连接: full 【outer】
交叉连接: cross
一,内连接 语法
内连接是交集部分。
select 查询列表 from 表一 inner join 表二 on 连接条件
案例一,查询名字中包含a的员工名和工种名(添加筛选)
select last_name ,job_tilte from emp e innner join jobs on e.id=j.id
where e.last_name like '%e%';
(2)非等值查询
(3)自连接
二,左外连接
1,左连接 左边的表就是主表,右表的表是从表,如果在右表中查找不到的话,就会显示null
外连接的查询结果为主表中的全部数据,
如果从表中有和它匹配的,则显示匹配的值
如果从表中没有和它匹配的,则显示null
外连接查询结果=内连接结果+主表中有而从表中没有的记录。
2,左外连接,右外连接。
语法: select 查询列表 from 表名一 left out join 表名二 on 连接条件
3,全外连接 = 内连接结果+表一有表二没有,表二有表一没有的
语法: select 查询列表 from 表名一 full out join 表名二 on 连接条件
3,交叉连接 cross join 实现九九乘积。
多表连接
三,子查询
含义:出现在其他语句中的select语句,称为子查询或者内查询
外部的查询语句,称为主查询或者外查询
分类:
按子查询出现的位置,
select 后面(支持标量子查询)
from 后面 (支持表子查询)
where 或having 后面(支持标量子查询,列子查询)
exists 后面(相关子查询)支持表子查询
按结果集的行列数不同:标量子查询(结果集只有一行一列),列子查询(结果集只有一列多行)
行子查询(结果集有一行多列)
表子查询(结果集一般为多行多列)
where或者having后面
1,标量子查询(单行子查询)
2,列子查询(多行子查询)
3,行子查询(多列多行)
特点:(1)子查询放在小括号内
(2)子查询一般放在条件的右侧
(3)标量子查询,一般搭配着单行操作符
列子查询:一般搭配多行操作符使用 IN,any,some,all
案例一:查询abel的工资
select salary from emp where last_name ='abel'
案例二:查询员工大于员工(1)的信息
select * from emp where salary》(select salary from emp where last_name='abel');
案例三:返回id与141号员工相同,salary与143号员工多的员工,姓名,id和工资
select id from emp where id=141
select salary from emp where id=143
select id ,name,salary where id=(select id from emp where id=141) and salary>(select salary from emp where id=1430
案例四:返回公司工资最少的员工的名字,id和工资
(1)查询最低工资
select min(salary) from emp;
select name,id,salary from emp where salary=(select min(salary) from emp);
案例五 查询最低工资大于50号部门最低工资的部门id和其最低工资
(1)查询50号部门的最低工资
select min(salary) from emp where id=50;
(2)查询部门每个部门的最低工资
select min(salary),deptno from emp group by deptno
(3)进行筛选(2),满足min(salary)>(1)
select deptno , min(salary) from emp group by deptno having min(salary)>(select min(salary) from emp where id=50);
非法使用子查询的条件
返回localtion_id是1400或者1700的部门中的所有员工姓名:
select deptno from emp where id in (1400,1700)
select name from emp where id in (
select deptno from emp where id in (1400,1700)
);