MySQL随记 - 连接查询

一、连接分类

1. 内连接
    (1)等值连接
    (2)非等值连接
    (3)自连接
2. 外连接
    (1)左外连接
    (2)右外连接
    (3)全外连接
3. 交叉连接

二、外连接

# 等值连接
# 案例1:查询员工名对应的部门名
SELECT last_name, department_name
FROM employees, departments
WHERE employees.`department_id` = departments.`department_id`;

# 案例2:查询有奖金的员工名、部门名
SELECT last_name, department_name, commission_pct
FROM employees AS e, departments AS d
WHERE e.`department_id` = d.`department_id`
AND commission_pct IS NOT NULL;

# 案例3:查询城市名中第二个字符为o的部门名和城市名
SELECT department_name, city
FROM departments AS d, locations AS l
WHERE d.`location_id` = l.`location_id`
AND city LIKE '_o%';

# 案例4:查询每个城市的部门个数
SELECT COUNT(*), city, department_name
FROM departments AS d, locations AS l
WHERE d.`location_id` = l.`location_id`
GROUP BY city;

# 案例5:查询有奖金的每个部门名和部门的领导编号和该部门的最低工资
SELECT department_name, d.manager_id,MIN(salary)
FROM departments AS d, employees AS e
WHERE d.`department_id` = e.`department_id`
AND commission_pct IS NOT NULL
GROUP BY department_name, d.manager_id;

# 案例6;查询每个工种的工种名和员工的个数,并且按员工个数降序
SELECT job_title, COUNT(*)
FROM employees AS e, jobs AS j
WHERE e.`job_id` = j.`job_id`
GROUP BY job_title
ORDER BY COUNT(*) DESC;

# 案例7:查询员工名、部门名和所在城市
SELECT last_name, department_name, city
FROM departments AS d, employees AS e, locations AS l
WHERE d.`department_id` = e.`department_id` AND d.`location_id` = l.`location_id`;

三、外连接

应用场景:用于查询一个表中有,另一个表没有的记录
特点:
1.外连接的查询结果为主表中的所有记录
    如果从表中有和它匹配的,则显示匹配的值
    如果从表中没有和它匹配的,则显示null
    外连接查询结果=内连接结果+主表中有而从表没有的记录
2.左外连接,left join左边的是主表;右外连接,right join右边的是主表
3.左外和右外交换两个表的顺序,可以实现同样的结果
4.全外连接=内连接的结果+表1中有但表2没有的+表2中有表1没有的·

原文地址:https://www.cnblogs.com/hq82/p/12243093.html

时间: 2024-08-28 19:19:20

MySQL随记 - 连接查询的相关文章

php使用mysql和mysqli连接查询数据

mysql: <?php $code = $_POST['code']; $status = ""; $success = ""; $scookies = ""; try { $dbname="root"; $dbpass="root"; $dbhost="127.0.0.1"; $dbdatabase="mysql"; //生成一个连接 $db_connect

MySQL中使用连接查询

连接查询: 将多张表(可以大于2张)进行记录的连接(按照某个指定的条件进行数据拼接): 最终结果是: 记录数有可能变化, 字段数一定会增加(至少两张表的合并)! 连接查询的意义: 在用户查看数据的时候,需要显示的数据来自多张表. SQL中将连接查询分成四类:交叉连接,内连接,外连接和自然连接. 在介绍之前先创建两张表作为联系(my_stu,my_class) 1.交叉连接 cross join, 从一张表中循环取出每一条记录, 每条记录都去另外一张表进行匹配: 匹配一定保留(没有条件匹配), 而

MySQL多表连接查询

多表连接查询: create table class( cid int primary key auto_increment, cname varchar(20) )default charset='utf8'; create tablr stu( sid int primary key auto_increment, sname varchar(20). cid int );default charset='utf8'; insert into class(name) values('一班')

Mysql联合,连接查询

一. 联合查询    UNION, INTERSECT, EXCEPT UNION运算符可以将两个或两个以上Select语句的查询结果集合合并成一个结果集合显示,即执行联合查询.UNION的语法格式为:       select_statement    UNION [ALL] selectstatement   [UNION [ALL] selectstatement][…n] 其中selectstatement为待联合的Select查询语句.     ALL选项表示将所有行合并到结果集合中.

MySQL随记 - 分页查询

# 进阶8:分页查询 /* 语法: select 查询列表 ⑦ from 表 ① [join type] join 表2 ② on 连接条件 ③ where 筛选条件 ④ group by 分组字段 ⑤ having 分组后的筛选 ⑥ order by 排序的字段 ⑧ limit 起始索引(offset), 条目个数(size) ⑨ 特点: size = 10 page 1 0 2 10 3 20 limit (page-1) *size, size; */ # 案例:查询前5条员工信息 SEL

Mysql 多表连接查询 inner join 和 outer join 的使用

JOIN的含义就如英文单词"join"一样,连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接.这里描述先甩出一张用烂了的图,然后插入测试数据. 首先先列举本篇用到的分类(内连接,外连接,交叉连接)和连接方法(如下): A)内连接:join,inner join B)外连接:left join,left outer join,right join,right outer join,union C)交叉连接:cross join 案例表: t_users: t_departme

MySQL随记 - 子查询

# 进阶7:子查询 /* 含义: 出现在其他语句中的select语句,成为子查询或内查询 外部的查询语句,称为主查询或外查询 分类: 按子查询出现的位置: select后面[标量子查询] from后面[表子查询] ☆where或having后面[标量子查询/列子查询/行子查询] exists后面(相关子查询)[表子查询] 按结果集的行列数不同 标量子查询(结果集只有一行一列) 列子查询(结果集只有一列多行) 行子查询(结果集有一行多列) 表子查询(结果集一般为多行多列) */ # 一.where

MySQL教程(四) SQL连接查询

更多情况下,我们查询的数据来源于多张表,所有有必要了解一下MySQL中的连接查询. SQL中将连接查询分成四类:交叉连接,内连接,外连接和自然连接. 数据准备 student表 -- ---------------------------- -- Table structure for `student` -- ---------------------------- DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` in

MySQL学习笔记-子查询和连接

MySQL学习笔记-子查询和连接 使客户端进入gbk编码方式显示: mysql> SET NAMES gbk; 1.子查询 子查询的定义: 子查询(Subquery)是指出现在其他SQL语句内的SELECT子句. 例如:  SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2); 其中SELECT * FROM t1 称为Outer Query / Outer Statement (外部查询) SELECT col2 FROM t2 , 被称为Su