MySQL 基础+高级篇- 数据库 -sql -尚硅谷 73-88章

下午去打了一下午球,晚上看了会,害,明天争取搞到120章
#2:非等值连接

/*
通过笛卡尔乘积,进行非等值连接
非等值连接支持等值连接的所有操作
*/
SELECT 
a.`salary` AS '工资',
b.`grade_level` AS '等级'
FROM
  `employees` AS a,
  `job_grades` AS b
WHERE
  a.`salary` BETWEEN b.`lowest_sal` AND b.`highest_sal`
ORDER BY a.salary;
#3:自连接,自己连接自己  
/* sql99语法
语法:
select 查询列表
from 表1 别名连接类型
join 表2 别名
on 连接条件
+
[where]
[group by 分组]
[having 筛选分组后的条件]
[order by 排序]
内连接:inner
外连接:
左外() left(outer)
右外()  right(outer)
全外()  full(outer)
交叉连接 cross
一:内连接
语法:
select 查询列表
from 表名1
inner join 表名2
别名 on连接条件
*/
SELECT b.`last_name`,a.`department_name` FROM `departments` AS a INNER 
JOIN `employees` AS b ON a.`department_id`=b.`department_id`;

SELECT 
a.`last_name`,b.`job_title`
FROM `employees` AS a INNER JOIN `jobs` AS b
ON a.`job_id`=b.`job_id`
WHERE a.`last_name` LIKE '%e%';

SELECT
b.`city`,COUNT(*)
FROM `departments` AS a INNER JOIN `locations` AS 
b ON a.`location_id`=b.`location_id`
GROUP BY b.`city` HAVING COUNT(*)>3;
SELECT 
COUNT(*),a.`department_name`
FROM `departments` a 
JOIN `employees` b
ON a.`department_id`=b.`department_id`
GROUP BY b.`department_id`
HAVING COUNT(*)>3
ORDER BY COUNT(*) DESC;
#自连接
/* 把join 两边的表名相同
*/
/*外连接
左外连接
右外连接
外连接的所有条件为住表中的所有记录
如果从表中有和主表中匹配的,显示
反则显示Null
right join 右边是主表
left join 左边是主表
*/
SELECT b.* FROM `beauty`;

SELECT a.`name`,b.`boyName` FROM `beauty` a
LEFT JOIN `boys` b
ON a.`boyfriend_id` =b.`id`
WHERE b.`boyName` IS NULL;

SELECT a.*,b.`employee_id` FROM 
`departments` a LEFT JOIN `employees` b
ON a.`department_id`=b.`department_id`
WHERE b.`employee_id` IS NULL
;
/*交叉连接
cross join 实现笛卡尔乘积
*/
SELECT 
  b.* 
FROM
  `beauty` AS a 
  LEFT JOIN `boys` AS b 
    ON a.`boyfriend_id` = b.`id` 
WHERE a.`id`>3 ;
/*
子查询
出现在其他语句中的select语句,称为子查询或内查询
分类:
按子查询出现的位置
select 后面
from 后面表子查询
where 或 having 后面标量子查询
exists 后面(相关子查询)
标量子查询(结果只有一行一列)
行子查询(一行多列)
列子查询(一列多行)
表子查询
*/
/*
where 或者having后面
in,some,any,all
*/
SELECT 
  * 
FROM
  `employees`
WHERE salary> 
  (SELECT 
    salary 
  FROM
    `employees` 
  WHERE last_name = 'Abel')
 ;
 
SELECT 
  `last_name`,
  `job_id`,
  `salary`
FROM `employees`
WHERE 
  job_id=(SELECT 
    job_id 
  FROM
    `employees` 
  WHERE `employee_id` = 141)
  AND
  salary>(SELECT 
    salary 
  FROM
    `employees` 
  WHERE `employee_id` = 143) ORDER BY salary DESC;
  
  
  
  

猜你喜欢

转载自blog.csdn.net/yangzijiangac/article/details/106725019