mysql-sq199语法

mysql-sq199语法

语法

           select  查询列表

           from        表1  别名  【连接类型】

           join          表2  别名

           on           连接条件

          【where      筛选条件】

          【group by  分组】

          【having    筛选条件】

          【order by  排序列表】

分类

内连接(☆):inner

外连接   

              左外(☆):left【outer】

              右外(☆):right【outer】

              全外:  full 【outer】

交叉连接:cross

1.内连接

/*

语法:

select 查询列表

from 表1 别名

inner join 表2 别名

on  连接条件

分类:

等值连接

非等值连接

自连接

*/

1.1、等值连接

案例1.查询员工名、部门名

SELECT last_name,department_name
FROM departments d 
INNER JOIN employees e
ON e.'department_id' = d.'department_id';

案例2.查询名字中包含e的员工名和工种名(添加筛选)

SELECT last_name,job_tltle
FROM employees e
INNER JOIN jobs j
ON e.'job_id' = j.'job_id'
WHERE e.'last_name' like '%e%';

案例3.查询部门个数>3的城市名和部门个数(添加分组+筛选)

SELECT city,COUNT(*) 部门个数
FROM departments d
INNER JOIN locations l
ON d.'location_id' = l.'location_id'
GROUP BY city
HAVING CONT(*)>3;

案例4.查询哪个部门的员工个数>3的部门名和员工个数,并按个数降序排名(添加排序)

#1.查询每个部门的员工个数
SELECT COUNT(*),department_name
FROM employees e
INNER JOIN departments d
ON e.'department_id'=d.'department_id'
GROUP BY department_name
#2.在1的结果上筛选员工个数>3的记录,并排序
SELECT COUNT(*),department_name
FROM employees e
INNER JOIN departments d
ON e.'department_id'=d.'department_id'
GROUP BY department_name
HAVING COUNT(*)>3
ORDER BY COUNT(*) DESC;

1.2、非等值连接

案例1.查询员工的工资级别

SELECT salary,grade_level
FROM employees e
JOIN job_grades g
ON e.'salary' BETWEEN g.'lowest_sal' AND g.'highest_sal';

案例2.查询每个工资级别的个数>20的个数,并按工资级别降序排序

SELECT COUNT(*),grade_level
FROM employees e
JOIN job_grades g
ON e.'salary' BETWEEN g.'lowest_sal' AND g.'highest_sal'
GROUP BY grade_level
HAVING COUNT(*)>20
ORDER BY grade_level DESC;

1.3、自连接

案例.查询员工的名字、上级的名字

SELECT e.last_name,m.last_name
FROM employees e
JOIN employees m
ON e.'manager_id' = m.'employee_id';

2.外连接

/*

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

特点:

a.外连接的查询结果为主表中的所有记录

    如果从表中有和它匹配的,则显示匹配的值

    如果从表中没有和它匹配的,则显示null

    外连接查询结果=内连接结果+主表中有而从表没有的记录

b.左外连接,left  join 左边的是主表

   右外连接,right join 右边的是主表

c.左外和右外交换两个表的顺序,实现同样的效果

d.全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的

*/

2.1、左外连接

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

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;

2.2、右外连接

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

SELECT d.*,e.employee_id
FROM employees e
RIGHT OUTER JOIN departments d
ON d.'department_id' = e.'department-id'
WHERE e.'employee_id' IS NULL;

2.3、全外连接

3.交差连接

 

上一篇:mysql sql99语法 内连接等值连接


下一篇:3. JPA对象关系映射 -- 级联操作