mysql连接查询经典小例题

mysql连接查询:

Mysql连接查询支持多表连接

对同一张表可以重复连接多次(别名在多次连接同一张表时很重要)

例题1:

下面有2张表

teams表

比赛结果表:result

问题:

得出一张表:

主队,客队,比赛成绩,比赛时间

方法一:(子查询和连接查询混合)

step1:

select result.id, t_name as h_name,match_time,result from teams  join result on teams.t_id=result.h_id

step2:

select result.id ,t_name as g_name from teams  join result on teams.t_id=result.g_id

得到

step3:根据比赛的id 相等连接以上两表即可

select t1.id,h_name,g_name,result,match_time from
(select result.id, t_name as h_name,match_time,result from teams  join result on teams.t_id=result.h_id) as t1
 join
 (select result.id ,t_name as g_name from teams  join result on teams.t_id=result.g_id) as t2
 on t1.id=t2.id;

即可得到

结果是出来了,有点繁琐

方法二:多次连接查询

select result.id,t1.t_name as h_name ,t2.t_name as g_name ,result,match_time from result
join
teams as t1 on result.h_id=t1.t_id
join
teams as t2 on t2.t_id=result.g_id;

即可得到:

Teams表要连接2次所以要有别名

例题2:

现有下表 subject

求这样一个表

父栏目名 ,子栏目名称

连接查询

自己连接自己更需要别名了

select t1.name as p_name,t2.name as son_name from subject as t1 join subject as t2 on t1.id=t2.pid;

即可得到

为方便练习,或得建表和数据填充sql请点击获取练习sql

时间: 2024-10-05 22:29:18

mysql连接查询经典小例题的相关文章

Mysql连接查询介绍

场景: 从下表中得到一个学生列表.要求是,展示:学生,性别,班级名字 此查询需要不单从学生表获取数据,还需要从班级表获取数据,此时就需要: 连接查询:join     连接:多个表记录之间的连接~! 语法: from 表名1 join 表名2 on 连接条件 select stu_name,gender,class_id,class_name from select_student join select_class  on select_student.class_id=select_clas

mysql连接查询,封装mysql函数

连接查询 交叉连接语法: select  * | 字段列表 from 表1  cross join 表2 内连接: select *|字段列表 from 左表 inner join 右表 on 左表.字段 = 右表.字段; (inner可以省略) 左外连接(左连接)   select *|字段列表 from 左表 left outer join 右表 on 左表.字段 = 右表.字段; (outer可以省略) 右外连接(右连接) select *|字段列表 from 右表 left outer

mysql连接查询和子查询

一.连接查询 1.交叉连接 就是从一张表的一条记录去连接另一张表中的所有记录,并且保存所有的记录,其中包括两个表的所有的字段! 从结果上看,就是对两张表做笛卡尔积! 笛卡尔积也就是两个表中所有可能的连接结果!如果第一张表有n1条记录,第二张表有n2条记录,那么笛卡尔积的结果有n1*n2条记录! 交叉连接语法: select  * | 字段列表 from 表1  cross join 表2 2.内连接 数据在左表中存在,同时在右表中又有对应的匹配的结果才会被保存.匹配得到才显示.如果没有匹配上,我

mysql连接查询,子查询,联合查询

一.连接查询(多表查询) emp表 dept表 1.交叉连接 实际上,交叉连接是将两个表不设定任何条件的连接结果. 交叉连接通常也被叫做"笛卡尔积"--数学上可能比较多. 语法: from  表1  [cross]  join  表2  ; //可见交叉连接只是没有on条件而已. cross这个词也可以省略,还可以使用inner这个词代替 2.内连接: 语法: from  表1  [inner]  join  表2  on  表1.字段1=表2.字段2: 含义:找出(过滤)在交叉连接的

MySql 子查询经典案列

# 1. 查询工资最低的员工信息: last_name, salary #①查询最低的工资SELECT MIN(salary)FROM employees #②查询last_name,salary,要求salary=①SELECT last_name,salaryFROM employeesWHERE salary=( SELECT MIN(salary) FROM employees); # 2. 查询平均工资最低的部门信息 #方式一:#①各部门的平均工资SELECT AVG(salary),

MySQL:连接查询

每个实体,一个表 当一个业务需要多个实体的数据,显然需要多张表在一起使用,即将多张表的记录连接起来. 1. 总体思路: 先将所有数据按照某种条件,连接起来,再进行筛选处理. 2. 分类方式: 根据连接的条件不同,分为一下几类: ① 内连接(Inner):要求连接的多个数据都必须存在,才能进行连接. [举个栗子]如下三张表,分别记录了老师的信息,班级信息,以及老师们的代课情况. 此时,若想获得所有老师的代课信息,'韩信'在表3中有与之配对的记录(内连接) 但发现孙武没有带过课,即表1中的'孙武'在

mysql连接查询

一:新建两张表 student表 CREATE TABLE student( idINT PRIMARY KEY AUTO_INCREMENT, snameVARCHAR(20) NOT NULL ); SELECT * FROM student; INSERT INTO student VALUES (1,'张三'),(2,'李四'),(3,'王五'); course表 CREATE TABLE course( idINT PRIMARY KEY, cnameVARCHAR(20) NOT N

MySQL连接查询流程源码分析

初始化 main |-mysqld |-my_init // 初始话线程变量,互斥量 |-load_defaults // 获取配置 |-init_common_variables // 初始化变量 |-init_server_components // 初始化插件 | |-plugin_init | | |-plugin_initialize | |-initialize_storage_engine |-network_init // 监听网络 |-grant_init |-servers_

MySQL 连接查询 学习笔记

#交叉连接(返回笛卡尔交集)AXB={(a,b)|a属于A且b属于B },则AXB所形成的集合就叫笛卡尔集 1 SELECT * from employees cross join depts; 2 SELECT * from employees,depts; #内连接(只返回满足连接条件的记录,不返回不满足连接条件的记录) 1 select * from employees t1 INNER join depts t2 2 on t1.dept_id = t2.dept_id; #右外连接(不