# 没有条件——笛卡儿积SELECT NAME,boyName
FROM boys,beauty;## 等值连接# tips:# 一般需要起别名# 顺序没有要求# 等值连接获得的是两个表的交集部分SELECT NAME,boyName
FROM boys,beauty
WHERE beauty.boyfriend_id = boys.id;# 为表起别名# tips: 为表起了别名以后就不能再使用原名字了SELECT last_name,e.job_id,job_title
FROM employees AS e,
jobs AS j
WHERE e.`job_id`=j.`job_id`;# 可以分组嘛?查询每个城市的部门个数SELECTCOUNT(*) 个数,city
FROM departments d,locations l
WHERE d.`location_id`=l.`location_id`GROUPBY city;# 查询有奖金的每个部门的部门名和部门领导编号和该部门最低工资SELECT department_name,d.manager_id,MIN(salary)FROM departments d,employees e
WHERE d.`department_id`=e.`department_id`AND commission_pct ISNOTNULLGROUPBY department_name,d.`department_id`# 查询每个工种的公众名和员工个数,并按工种个数排序SELECT job_title,COUNT(*)FROM employees e,jobs AS j
WHERE e.`job_id`= j.`job_id`GROUPBY job_title
ORDERBYCOUNT(*)DESC## 非等值连接# 指若干个表之间,同通过不等关系连接在一起## 自连接# 指一个表自身若干个字段间相等进行的查询/*
Sql 99 语法
select 查询列表
from 表1 别名 【连接类型】
join 表2 别名
on 连接条件
【where 语句】
【group by 语句】
【having 语句】
【order by 语句】
连接类型:
内链接——【inner】
外联结
左外——left
右外——right
*/# 等值连接SELECT last_name,job_title
FROM employees e
INNERJOIN jobs j
ON e.`job_id`=j.job_id
WHERE last_name LIKE"s%";# 分组外加筛选# 查询部门个数大于3的城市名及其部门个数SELECT city,COUNT(*) 部门个数
FROM departments d
INNERJOIN locations l
ON d.`location_id`=l.`location_id`GROUPBY city
HAVINGCOUNT(*)>3;# 查询员工个数大于3的部门名和员工个数,并按个数降序排序SELECT department_name,COUNT(*) 员工个数
FROM departments d
INNERJOIN employees e
ON d.`department_id`=e.`department_id`GROUPBY d.department_id
HAVINGCOUNT(*)>3ORDERBYCOUNT(*)DESC;## 外连接:一般用于查询,一个表中有,另一个表中没有# tips: 如果从表中有和它匹配的,则显示匹配的值# 如果从表中没有和他匹配的,则显示null# 外连接查询结果=内连接结果+主表中有而从表中没有的记录# left join : 左边的是主表# right join:右边的是主表# 查询没有男朋友的女神,左外连接SELECT b.name,bo.*FROM beauty b
LEFTOUTERJOIN boys bo
ON b.boyfriend_id=bo.id
WHERE bo.id ISNULL;# 查询没有女票的男神,右外连接SELECT b.name,bo.*FROM beauty b
RIGHTOUTERJOIN boys bo
ON b.`boyfriend_id`=bo.`id`# 全外连接=内链接 并 左外连接 并 右外连接,mysql不支持,orical支持SELECT b.*,bo.*FROM beauty b
FULLJOIN boys bo
ON b.boyfriend_id=bo.id;# 交叉连接——笛卡儿积SELECT b.`name`,bo.`boyName`FROM boys bo
CROSSJOIN beauty b;# 查询哪个城市没有部门SELECT city
FROM locations l
LEFTOUTERJOIN departments d
ON l.`location_id`=d.`location_id`WHERE d.`department_id`ISNULL# 查询部门名为SAL或IT的员工信息SELECT d.`department_name`,d.`department_id`, e.*FROM departments d
LEFTJOIN employees e
ON d.`department_id`= e.department_id
WHERE d.`department_name`IN("SAL","IT")