美文网首页
SQL99语法

SQL99语法

作者: 弦好想断 | 来源:发表于2020-04-19 19:55 被阅读0次

/*
语法:select 查询列表
from 表1 别名 【连接类型】
join 表2 别名
on 连接条件
【where 筛选条件 】
【group by 分组】
【having 筛选条件】
【order by 排序列表】
内连接:inner
外连接
左外:left [outer]
右外:right [outer]
全外: full [outer]
交叉连接:cross

*/

一、内连接

/*
语法:
select 查询列表
from 表1 别名
inner join 表2 别名
on 连接条件;
分类:
等值
非等值
自连接
特点:
一:添加排序、分组、筛选
二:inner可以省略
三:筛选条件放在where后面,
连接条件放在on后面,提高分离性,便于阅读
四:inner join连接和sql92语法中的
等值连接效果是一样的,都是查询多表的交集

*/

1.等值连接

案例:

查询员工名、部门名

select last_name,department_name 
from employees e 
inner join departments d 
on e.department_id = d.department_id;

查询名字中包含员工名和工种名

select last_name,job_title 
from employees e 
inner join jobs j 
on e.job_id = j.job_id 
where job_title like '%e%';

查询部门个数大于3的城市名称和部门个数(分组+筛选)

①查询每个城市的部门个数

②在①结果上筛选满足条件的

select city,count(*)
from departments d 
inner join locations l
on d.location_id = l.location_id 
group by city
having count(*)>3;

查询员工个数大于3的部门名和员工个数,并按个数降序排序(添加排序)

select department_name,count(*) 员工个数
from departments d 
inner join employees e 
on d.department_id = e.department_id 
group by department_name
having count(*)>3 
order by 员工个数 desc ;

查询员工名、部门名、工种名,并按部门名排序

select last_name,department_name,job_title 
from departments d
inner join employees e on e.department_id = d.department_id 
inner join jobs j on j.job_id = e.job_id 
order by department_name asc;

2.非等值连接

查询员工的工资级别

select * from job_grades;
select salary,grade_level  
from employees e 
inner join job_grades j 
on e.salary between j.lowest_sal and j.highest_sal;

查询工资级别的个数大于二的个数,并且按工资级别降序排序

#1先查工资级别的个数
#2再查工资级别个数大于二的个数
#3最后按工资级别降序排序
select count(*) 工资级别个数,grade_level 
from employees e 
inner join job_grades j 
on e.salary between j.lowest_sal and j.highest_sal 
group by grade_level
having count(*)>3 
order by grade_level desc;

3.自连接

查询员工的名字、上级的名字

select * from employees;
select e.last_name,m.last_name 
from employees e
inner join employees m 
on e.manager_id = m.employee_id ; 

查询姓名中包含字符k的员工的名字、工资、上级的名字,并按工资升序排序

select e.last_name 员工名,e.salary 员工工资,m.last_name 上级名
from employees e
inner join employees m 
on e.manager_id = m.employee_id 
where e.last_name like '%k%'
order by 员工工资 asc; 

三:外连接

/*
应用场景:用于查询一个表中有,另一个表中没有的记录
特点:1.外链接的所有结果为主表中的所有记录
如果从表中有和他匹配的则显示匹配的值,反之则显示null
外连接查询结果=内连接结果+主表中有而从表中没有的记录
2.左外连接:left join左边的是主表
右外链接:right join 右边的是主表
3.左外和右外交换两个表的顺序,可以实现同样的效果
4.全外连接=内连接的结果+表一中有但表二中没有的+表二中有但表一中没有的

*/

引入:查询没有男朋友的女神名(查询男朋友不在男神表的女神名)

use girls;
show databases;
select * from beauty;
select * from boys;

左外连接

select b.name,bo.* 
from beauty b
left outer join boys bo
on b.boyfriend_id = bo.id
where bo.id is null;
#

右外连接

select b.name,bo.* 
from boys bo right outer join beauty b
on b.boyfriend_id = bo.id
where bo.id is null;
#
#
select b.name,bo.* 
from boys bo left outer join beauty b 
on b.boyfriend_id = bo.id 
where bo.id is null;

案例:查询哪个部门没有员工

左外

use myemployees;
select d.*,e.employee_id 
from departments d 
left outer join employees e on d.department_id = e.department_id 
where e.employee_id is null;

右外

select d.department_name
from employees e right outer join departments d 
on d.department_id = e.department_id
where e. employee_id is null;

全外 (mysql不支持)

select b.*,bo.* 
from beauty b 
full outer join boys bo 
on b.boyfriend_id = bo.id ;

交叉连接 (笛卡尔乘积)

select b.*,bo.* 
from beauty b 
cross join boys bo ;

sql92和SQL99 PK

功能:SQL99支持的较多

可读性:SQL99实现连接条件和筛选条件的分离,可读性较高

练习

一、查询编号》3的女神的男朋友信息,如果有则列出详细,如果没有,用null填充

select b.*,bo.* 
from beauty b 
left outer join boys bo 
on b.boyfriend_id = bo.id
where b.id>3;

二、查询哪个城市没有部门

use myemployees;
select city,d.*
from departments d
right outer join locations l 
on d.location_id = l.location_id
where d.department_id is null;

三、查询部门名为sal或it的员工信息

select e.*,d.department_name ,d.location_id
from departments d
left join employees e 
on d.department_id = e.department_id 
where d.department_name in ('sal','it'); 

相关文章

  • sql99语法连接查询

    二、sql99语法 /*语法:select 查询列表from 表1 别名 【连接类型】join 表2 别名on 连...

  • sql99语法

    二、sql99语法 /*语法:select 查询列表from 表1 别名 【连接类型】join 表2 别名on 连...

  • sql99语法

  • SQL99语法

    /*语法:select 查询列表from 表1 别名 【连接类型】join 表2 别名on 连接条件【where ...

  • SQL99语法

    一、语法 1.1、内连接

  • 22 SQL99语法的新特性

    SQL99 在 SQL92 的基础上提供了一些特殊语法,比如 NATURAL JOIN 用来表示自然连接。我们可以...

  • MySQL学习-数据查询语言(DQL)四之连接查询语法差异和总结

    七丶连接查询sql99语法 1)含义:连接查询又称多表查询,当查询的字段来自于多个表时,就会用到连接查询 笛卡尔乘...

  • 多表查询

    一、oracle的连接 sql99的连接 1、等值连接 ...

  • sql99: 连接

    内连接用于查询两个表都有外连接用于查询一个表有,另一个表没有

  • sql99总结

    1.内连接 select 查询列表from 表1 别名【inner】join 表2 别名on 连接条件where ...

网友评论

      本文标题:SQL99语法

      本文链接:https://www.haomeiwen.com/subject/soobbhtx.html