- (假设有四个表 id对应 department employee job location)
# 查询每个城市的部门个数
SELECT
COUNT(), city
FROM
departments d,
locations l
WHERE
d.id = l.id
GROUP BY city;
#加排序
#查询每个工种的工种名和员工的个数,并且按员工个数降序
SELECT
job_title, COUNT()
FROM
employees e,
jobs j
WHERE
e.job_id = j.job_id
GROUP BY job_title
ORDER BY COUNT(*) DESC; - 三表连接呢
# …… where =AND =;
#2、非等值连接
#查询用户名字的长度和长度级别
SELECT
LENGTH(user_name), grade_level
FROM
user_info,
length_level
WHERE
LENGTH(user_name) BETWEEN lowest_level AND high_level
AND grade_level = ‘A’; - 3、自连接 自己表连接自己 找员工对应的领导 看成两张表 我自己和领导表
select e.id,e.name,boss.id,boss.name from 领导关系 e ,领导关系 boss where e.boss_id = boss.id; - sql99语法
/
select 查询列表
from 表1 别名 【连接类型】
join 表2 别名
on 连接条件
【where 筛选条件】
【group by 分组】
【having 筛选条件】
【order by 排序列表】
/
/内连接 :inner 等值连接 非等值 自连接
外连接 :左外left [outer] 右外right 全外full [outer]
交叉连接 :cross
/ - 查询 id个数大于50的英语级别 (添加了分组 加筛选
SELECT
english_level, COUNT()
FROM
user_info
INNER JOIN user_detail_info ON user_detail_info.id = user_info.id
# inner join ** on * 多表连接 inner可以省略
GROUP BY english_level
HAVING COUNT() > 50; - 非等值连接 自连接同上
- 左外 left join左边主表 右外 right join右边主表
- 查询id不在前一千的 用户生日 说明生日信息是主表 查交集 (例子不好
select * from user_detail_info where id>=1001;


# 连接查询 多表查询 #笛卡尔乘积现象 表1 m 行 表2 n 行 结果 m n行
SELECT
user_name, birthday
FROM
user_info,
user_detail_info
WHERE
user_detail_info.id = user_info.id;
/ 内连接 :等值连接 非等值 自连接
外连接 :左外 右外 全外
交叉连接
/
#1、等值连接
# 查询对应的 select , from, where =【And*】……;表顺序可以换
#加分组
(假设有四个表 id对应 department employee job location)
# 查询每个城市的部门个数
SELECT
COUNT(), city
FROM
departments d,
locations l
WHERE
d.id = l.id
GROUP BY city;
#加排序
#查询每个工种的工种名和员工的个数,并且按员工个数降序
SELECT
job_title, COUNT()
FROM
employees e,
jobs j
WHERE
e.job_id = j.job_id
GROUP BY job_title
ORDER BY COUNT(*) DESC;
三表连接呢
# …… where =AND =;
#2、非等值连接
#查询用户名字的长度和长度级别
SELECT
LENGTH(user_name), grade_level
FROM
user_info,
length_level
WHERE
LENGTH(user_name) BETWEEN lowest_level AND high_level
AND grade_level = ‘A’;
3、自连接 自己表连接自己 找员工对应的领导 看成两张表 我自己和领导表
select e.id,e.name,boss.id,boss.name from 领导关系 e ,领导关系 boss where e.boss_id = boss.id;
sql99语法
/
select 查询列表
from 表1 别名 【连接类型】
join 表2 别名
on 连接条件
【where 筛选条件】
【group by 分组】
【having 筛选条件】
【order by 排序列表】
/
/内连接 :inner 等值连接 非等值 自连接
外连接 :左外left [outer] 右外right 全外full [outer]
交叉连接 :cross
/
#一 内连接
/select 查询列表
from 表1 别名
inner join 表2 别名
on 连接条件
/
#1 等值连接
# 查询 用户名 和 生日(假设id对应
SELECT
user_name, birthday
FROM
user_info
INNER JOIN
user_detail_info
ON user_info.id = user_detail_info.id;
查询 id个数大于50的英语级别 (添加了分组 加筛选
SELECT
english_level, COUNT()
FROM
user_info
INNER JOIN user_detail_info ON user_detail_info.id = user_info.id
# inner join ** on * 多表连接 inner可以省略
GROUP BY english_level
HAVING COUNT() > 50;
非等值连接 自连接同上
# 二、外连接 主表去从表查一个一个匹配 显示主表的所有结果 和从表匹配结果
#如果没有匹配从表则显示null
左外 left join左边主表 右外 right join右边主表
查询id不在前一千的 用户生日 说明生日信息是主表 查交集 (例子不好
select * from user_detail_info where id>=1001;
SELECT birthday,user_info.*
FROM user_detail_info
LEFT OUTER JOIN user_info ON user_detail_info.id = user_info.id where user_info.id is null ;

# 若只想查null的部分 男朋友boys为null的部分 则加where条件
SELECT beauty.name, boys.
FROM beauty
LEFT OUTER JOIN boys
ON boyid = id
WHERE boys.id is null;
![U]Q}$`I{H4K)L}KNK9YNYB.png
*#三、全外连接 full outer join 不支持
# 全外连接=内连接+表1有但表二没有的 +表2有但表1没有的
#四、交叉连接 cross join m*n行
SELECT beauty., boys.
FROM beauty
CROSS JOIN boys ;
