sq99语法跟sq92语法要区分开来

SELCET  查询列表
FROM 表一 别名1 【连接类型】
JOIN 表二 别名2
ON 连接条件
【WHERE 筛选条件】
【group by 分组】
【having 筛选条件】
【order by 排序条件】

内连接  inner

外连接:左外 lef outer,右外right outer,全外full outer。

交叉连接

等值连接 

假设有一个表格,上面有employees,location,apartment,包含有员工,地点,部门等信息

case1 查询员工名,部门名

SELECT last_name,department_name
FROM department d
INNER JOIN employees e  #表示内连接
ON e.'department_id' = d.'department_id';

case 2 查询名字中包含e 的员工名和工种名

SELECT job_title,last_name
FROM employees e 
INNER JOIN jobs j
ON e.'job_id' = j.'job_id';
WHERE e.'last_name' LIKE '&e&';  #模糊匹配

case 3 查询部门个数大于3的城市名和部门个数,这里增加啦一个分组后查询

SELECT city,count(*) 部门个数
RROM location l
INNER JOIN department d
ON l.'location_id' = d.'location_id'  #连接条件
GROUP BY city  #先筛选城市
HAVING count(*) >3
ORDER BY COUNT(*) DESC;  #按照个数排序,降序

当有n个表的时候,需要n-1个条件,n个表 的时候,连接顺序由变化,需要一个可以和大多数表可以连接的

SELECT 所需要的数据
FROM 表1 
INNER JOIN 表2  ON 表一个表2相等的内容
INNER JOIN 表3  ON 表一个表3相等的内容
INNER JOIN 表n  ON 表一个表n相等的内容

非等值连接

情景:当你想要筛选期末考试学生成绩的级别的时候,比如大于90分为A,80-90为B,70-80为C这类的问题,就可以用非等值查询。

设学生成绩表为STU_SCORE  成绩比对表为SCORE 

成绩比对表

成绩分级

最高成绩

最低成绩

A

100    

90

B

90

80

C

80

70

SELECT stu_score 成绩,fenji
FROM STU_SCORE s
INNER JOIN chengjibiao c ON s.'STU_SCORE' between c.'lower' and c.'high'
GROUP BY STU_SCORE;

显示大致结果

成绩 

fenji

95

A

88

B

82

B

79

C

自连接

自连接就是通过一个表中的两个互相有联系的内容进行筛选查询,比如学校中的学生和导师查询,员工与上级查询,适合于同一张表两个栏目出现相同的内容适合查询

case 查询班上有姓李的同学主管老师的名字

#case 
SELECT s.last_name,t.last_name
FROM classmate c
JOIN classmate t
ON c.'teacher_id' =  t.'manager_id'
WHERE s.last_name LIKE '&李&'

外连接

用于查询一个表有,另外一个表没有的表,是求两个表的差集

主要应用场景: 1.外连接的查询结果为主表中所有记录

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

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

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

左外连接:left join 左边的是主表反正,右外连接右边是主表

case1查询部门没有员工

#左外
SELECT d.*,e.employee_id
FROM department d
RIGHT OUTER JOIN employee e
ON d.'department_id' =  e.'deparetment_id'
WHERE e.employee_id IS NULL;

 全外连接

目前MySQL不支持,出现情况是查询两个表的交集部分,没有的用NULL填充,外连接结果,以及表一和表二中互相没有的内容。