MySQL基础(二)


sql基础

069 连接查询——笛卡尔乘积

笛卡尔乘积现象:表1有m行,表2有n行,合成表有(m*n)行

select * from beauty;
select * from boys;
select name, boyname from boy,beauty
where beauty.boyfriend_id=boy_id;

添加有效的连接条件

等值连接

select job_title,COUNT(*)
FROM employees e, jobs j
where e.job_id=j.job_id
group by job_title
order by count(*) Desc;

非等值连接

自连接

在同一张表中需要在前面加上别名来区分查询的东西

外连接

应用场景:查询一个表中有另一个表中没有的记录

sql99语法

image-20200911170358758

同样连接

内连接包括:等值连接、非等值连接、自连接。

非等值连接例子

image-20200911170840537

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

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

子查询

image-20200911172446880

where后面加相关子查询

image-20200911173437211

查询最低工资大于50号部门最低工资的部门id和其最低工资

1.查询50号部门的最低工资(标量子查询)

select min(salary)
from employees
where department_id

2.查询每个部门的最低工资

select min(salary),department_id
from employees
group by department_id

3.合并

select min(salary),department_id
from employees
group by department_id
having min(salary)>(
    select min(salary)
    from employees
    where department_id
);

列子查询(多行子查询)

有多行值的情况下

操作符 含义
IN/NOT IN 等于列表中的任意一个
ANY/SOME 和子查询返回的某一个值比较
ALL 和子查询返回的所有值比较

image-20200911210147928

image-20200911205616600

行子查询

两个条件相似

image-20200911210457438

select 后面的子查询使用

image-20200911213632769

from后面的子查询使用

案例:查询每个部门的平均工资的工资等级

select
from(
select avg(salary) ag,department_id
    from employees
    group by department_id
)ag_dep
inner join job_grades g
on ag_dep.ag between lowest_sal and highest_sal

image-20200912211743064

取别名可以用于使用子表查询

exists 后面的子查询

语法:

exists(完整的查询语句)

结果:

1或0(有值和没值的差别)

案例

连接查询

image-20200912205146812image-20200912205146843

exists查询

image-20200912205202855

分页查询

image-20200912212557827

案例1:查询前五条员工信息

select * from employees limit 0,5

文章作者: 林秉逸
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 林秉逸 !
  目录