精华内容
下载资源
问答
  • mysql连接查询
    千次阅读
    2022-04-07 12:40:56

    连接关系数据模型的主要特点,连接查询是关系数据库中最主要的查询,包括内连接、外连接等。
    当两个或多个表中存在相同意义的字段时,便可以通过这些字段对不同的表进行
    连接查询,得到存放在多个表中的记录数据。
    所谓表中相同意义的字段,是指在多个表中名字不一定相同,但取值的含义相同的字段,这是表之间实现连接查询的前提。
    在实现表内连接的实验前需要对mysql的语法进行扎实的掌握,以下有mysql的基础知识可以查看
    mysql的增删改查
    mysql修改表结构
    mysql的约束
    select语句详解
    mysql表的修改和删除

    内连接查询(INNER JOIN)

    内连接查询(INNER JOIN):
    INNER JOIN使用比较运算符(=)根据每个表共有列的列值匹配两个表中的行,
    其查询结果仅包含符合查询条件和连接条件的行。即查询结果为两个表的交集。
    注意:多表查询时,为避免混淆,在查询字段前应添加表名称作为前缀!

    如何分析连接查询

    • 查询结果包含哪些字段
    • 这些字段来源于哪些表
    • 表之间的连接字段是哪个

    SELECT table1.column, table2.column
    FROM table1, table2 WHERE table1.column1 = table2.column2;
    – 在 WHERE子句中书写连接条件。
    – 如果在多个表中出现相同的列名,则需要使用表名作为来自该表的列名的前缀。
    – N个表相连时,至少需要N-1个连接条件。

    请添加图片描述
    如以上两个表,teacher和department表
    我们要查询的字段是
    teacher.Teacher_id
    teacher.Teacher_name
    department.Department_name
    我们从表结构可以看出两个表的连接字段是teacher_id和department_id
    下面我们看sql查询代码

    SELECT
    teacher.teacher_id,
    teacher.teacher_name,
    department.department_name
    FROM teacher INNER JOIN department
    ON teacher.department_id=department.department_id;

    其中inner join是内连接关键字,on的后面是连接的条件

    teacher.department_id=department.department_id;

    这条语句的含义是将教师的部门id和部门的id对应上,在进行输出。
    比如刘老师是计算机学院的,计算机学院编号是0012,刘老师的部门编号也是0012,所以将教师表和学院表进行相连,来输出我们想要的结果。

    那么我们发现,这些表的名称较长,我们也可以通过给表名起一个简略的名称来减少代码的长度,我们把teacher表命名为A,department为B,代码如下

    SELECT
    A.teacher_id,
    A.teacher_name,
    A.department_id,
    B.department_name
    FROM teacher A INNER JOIN department B
    ON A.department_id=B.department_id;

    这样的代码简单明了,看的清晰

    下面我们来看多个表内连接查询

    多个表内连接查询比两个表内连接查询的复杂一点点,不过原理和用法是相同的,下面看图
    请添加图片描述
    如图我们要查询学生所在班级、年纪和学院,由图可以看到我们需要的连接结构
    代码如下

    SELECT student.student_id,
    student.student_name,
    classes.class_name,
    classes.year,
    department.department_name
    FROM student
    INNER JOIN classes on student.class_id=classes.class_id
    INNER JOIN department on classes.department_id=department.department_id;

    通过学生的班级号和class的id相连,classes的id和学院的id相联系,就可以进行查询,比较简单,查询结果后若有重复或者需要筛选的可以用where进行修改。

    更多相关内容
  • MySQL连接查询

    千次阅读 2019-05-08 23:43:02
    首先创建两个表 ...1.内连接查询(INNOR JOIN) 使用普通sql语句 select fruits.id,name,price,num from fruits,orders where fruits.id=orders.id; 使用内连接查询语句(结果与上图相同) s...

    目录

    1.内连接查询(INNOR JOIN)

    2.自连接查询

    3.外连接查询

    4.复合条件连接查询


    创建两个表

    fruits表,包含水果 id、名字、价格

    orders表,包含 id 和订单号(num)

    1.内连接查询(INNOR JOIN)

    1.隐式内连接使用普通sql语句

    select fruits.id,name,price,num from fruits,orders where fruits.id=orders.id;

    2.显式内连接 查询语句(结果与上图相同)

    select fruits.id,name,price,num from fruits [inner] join orders on fruits.id=orders.id;

    inner join语法是ANSI SQL的标准规范,使用inner join连接语法能够确保不会忘记连接条件

    2.自连接查询

    例如:

    select f1.id,f1.name

    from fruits AS f1,fruits AS f2

    where f1.id = f2.id and f2.id = '01';

    3.外连接查询

    两个表进行外连接查询时,以主表为基准(将主表的数据全部显示),从表显示与主表对应的数据,如果对应的没有,则以null补齐

    • LEFT JOIN(左连接):返回左边表中的所有记录和右表中与连接字段相等的记录。(左边是主表)
    • RIGHT JOIN(右连接):返回右边表中的所有记录和右表中与连接字段相等的记录。(右边是主表)

    1.LEFT JOIN(左连接)

    select fruits.id,orders.num from fruits left join orders on fruits.id=orders.id;

    2.RIGHT JOIN(右连接)

    select fruits.id,orders.num from fruits right join orders on fruits.id=orders.id;

    4.复合条件连接查询

    select name,price,num

    from fruits inner join orders

    on fruits.id=orders.id AND fruits.price>4;

    展开全文
  • MySQL 数据库————连接查询

    千次阅读 2022-04-10 23:24:35
    MySQL连接查询,通常都是将来自两个或多个表的记录行结合起来,基于这些表之间的共同字段,进行数据的拼接 首先,要确定一个主表作为结果集,然后将其他表的行有选择性的连接到选定的主表...

    目录

    一、多表连接查询

    1.内连接——inner join

     2.左连接——left join

     3.右连接——right join

    二、存储过程

    1、简介

    2、优点 

    3、语法 

     ②、参数分类

     ③、带参数的存储过程

     ④、修改存储过程

    ⑤、删除存储过程


    一、多表连接查询

    • MySQL 的连接查询,通常都是将来自两个或多个表的记录行结合起来,基于这些表之间的共同字段,进行数据的拼接

    • 首先,要确定一个主表作为结果集,然后将其他表的行有选择性的连接到选定的主表结果集上

      使用较多的连接查询包括:内连接、左连接和右连接

    1.内连接——inner join

    • MySQL中的内连接就是两张或多张表中同时符合某种条件的数据记录的组合。
    • 通常在 from 子句中使用关键字 inner join 来连接多张表,并使用 on 子句设置连接条件
    •  内连接是系统默认的表连接,所以在 from 子句后可以省略 inner 关键字,只使用关键字 join ,同时有多个表时,也可以连续使用 inner join 来实现多表的内连接,不过为了更好的性能,建议最好不要超过三个表
       select 字段 from 表1 inner join 表2 on 表1.字段=表2.字段

       2.左连接——left join

    •  左连接也可以被称为左外连接,在 from 子句中用 left join 或者 left out join 关键字来表示。
    •  左连接以左侧表为基础表,接收左表的所有行,并用这些行与右侧参考表中的记录进行匹配,也就是说匹配左表中的所有行以及右表中符合条件的行。
    •  左连接中,左表的记录会全部表示出来,而右表只会显示符合搜索条件的记录,不足的地方均为 null

    SELECT 字段 FROM 表1 LEFT JOIN 表2 ON 表1.字段 = 表2.字段;

     3.右连接——right join

    •  右连接也被称为右外连接,在 from 子句中用 right join 或者 right out join 关键字来表示。
    •  右连接跟左连接正好相反,它是以右表为基础表,用于接收右表中的所有行,并用这些记录与左表中的行进行匹配

     

    二、存储过程

    1、简介

    •  MysQL数据库存储过程是一组为了完成特定功能的SQL语句的集合。
    •  存储过程这个功能是从5.0版本才开始支持的,它可以加快数据库的处理速度,增强数据库在实际应用中的灵活性。
    •  存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。
    •  操作数据库的传统SQL语句在执行时需要先编译,然后再去执行,跟存储过程一对比,明显存储过程在执行上速度更快,效率更高。存储过程在数据库中创建并保存,它不仅仅是SQL语句的集合,还可以加入一些特殊的控制结构,也可以控制数据的访问方式。
       

    2、优点 

    •  执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
    •  SQL语句加上控制语句的集合,灵活性高
    •  在服务器端存储,客户端调用时,降低网络负载
    •  可多次重复被调用,可随时修改,不影响客户端调用
    •  可完成所有的数据库操作,也可控制数据库的信息访问权限

    3、语法 

    create procedure <过程名> ([过程参数……]) <过程体>
    [过程参数……] 格式
    <过程名>:尽量避免与内置的函数或字段重名
    <过程体>:语句
    [in|out|inout] <参数名><类型>
    
    例:
    delimiter $$    								#将语句的结束符号从分号;临时修改,以防出问题,可以自定义
    create procedure ee(in inname varchar(16))  	#创建存储过程,过程名自定义,()可带参数
     	begin   		    						#过程体以关键字BEGIN开始
     	select * from test1 where a_name='aaaa';  	#过程体语句
     	end$$    									#过程体以关键字END结尾
    delimiter ; 			    					#将语句的结束符号恢复为分号
    call ee('aaaa');	  							#调用存储过程
    
    --------------查看存储过程--------------
    show create procedure XXX\G               		 #查看某个储存过程的具体信息
    
    
    

     

     ②、参数分类

    • 存储过程的主体部分,即过程体
    •  以 begin 开始,end 结束,若只有一条SQL语句,可省略 begin 和 end
    •  以 delimiter 开始和结束

     ③、带参数的存储过程

    • 输入参数:in 表示调用者向过程传入值(传入值可以是字面量或变量)
    •  输出参数:out 表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
    •  输入/输出参数:inout ,即表示调用者向过程传入值,又表示过程向调用者传入值(只能是变量)

     

     ④、修改存储过程

    alter procedure <过程名> [<特征>……]
    alter procedure ff modifies sql data sql security invoker;
    
    modifies sql data:表名子程序包含写程序的语句
    
    security:安全等级
    
    invoker:当定义为 invoker 时,只要执行者有执行权,就可以成功执行
    

    ⑤、删除存储过程

    drop procedure if exists ff;
    

    å¨è¿éæå¥å¾çæè¿°
     

    展开全文
  • Mysql—— 内连接、左连接、右连接以及全连接查询

    万次阅读 多人点赞 2018-10-05 23:03:31
    一、内连接查询 inner join 关键字:inner join on 语句:select * from a_table a inner join b_table b on a.a_id = b.b_id; 说明:组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集...

    获取 boy 、girl 表下载地址

    一、内连接查询  inner join

    关键字:inner  join   on

    语句select * from a_table a inner join b_table b on a.a_id = b.b_id;

    说明:组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部分。

    案例解释:在boy表和girl 表中查出两表 hid 字段一致的姓名(gname,bname),boy表和girl 表如下:

          

    采用内连接查询方式:

    SELECT boy.hid,boy.bname,girl.gname FROM boy INNER JOIN girl ON girl.hid = boy.hid;

    查询结果如下:

    二、左连接查询 left join

    关键字:left join on / left outer join on

    语句:SELECT  * FROM a_table a left join b_table b ON a.a_id = b.b_id;

    说明: left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种。 左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。

    案例解释:在boy表和girl 表中左连接查询,boy表和girl 表如下:

          

    采用内连接查询方式:

    SELECT boy.hid,boy.bname,girl.gname FROM boy LEFT JOIN girl ON girl.hid = boy.hid;

    查询结果如下:

    三、右连接 right join

    关键字:right join on / right outer join on

    语句:SELECT  * FROM a_table a right outer join b_table b on a.a_id = b.b_id;

    说明:right join是right outer join的简写,它的全称是右外连接,是外连接中的一种。与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。

    案例解释:在boy表和girl 表中右连接查询,boy表和girl 表如下:

          

    采用内连接查询方式:

    SELECT boy.hid,boy.bname,girl.gname FROM boy RIGHT JOIN girl ON girl.hid = boy.hid;

    查询结果如下:

    四、全连接 union

    关键字:union /union all

    语句:(select colum1,colum2...columN from tableA ) union (select colum1,colum2...columN from tableB )

             或 (select colum1,colum2...columN from tableA ) union all (select colum1,colum2...columN from tableB );

    union语句注意事项:

             1.通过union连接的SQL它们分别单独取出的列数必须相同;

             2.不要求合并的表列名称相同时,以第一个sql 表列名为准;

             3.使用union 时,完全相等的行,将会被合并,由于合并比较耗时,一般不直接使用 union 进行合并,而是通常采用union all 进行合并;

             4.被union 连接的sql 子句,单个子句中不用写order by ,因为不会有排序的效果。但可以对最终的结果集进行排序;

               (select id,name from A order by id) union all (select id,name from B order by id); //没有排序效果

               (select id,name from A ) union all (select id,name from B ) order by id; //有排序效果

    案例解释:将a表和b表合并,表结构如下:

              

    采用 union 全连接:

    union会自动将完全重复的数据去除掉,a、b表中"c"的值都为15,所以只显示一行。

    采用 union all 全连接:

    union all会保留那些重复的数据;

    左右连接练习题:

    根据给出的表结构按要求写出SQL语句。t 表(即Team表)和 m 表(即Match表) 的结构如下:

         

    t 表(即Team表)和 m 表(即Match表) 的内容如下:

             

    t 表和 m 表下载地址

    m 表(即Match表) 的 hostTeamID 与 guestTeamID 都与 t 表(即Team表) 中的 teamID 关联。请查出 2006-6-1 到2006-7-1之间举行的所有比赛,并且用以下形式列出: 拜仁   2:0  不来梅  2006-6-21

    ===============================================================================

    解决方案:

    第一步:先以 m 表左连接 t 表,查出 m 表中 hid 这列对应的比赛信息:

    SELECT m.mid,t.tname,m.mres,m.matime as time FROM m LEFT JOIN t ON t.tid = m.hid;

    查询结果记为结果集 t1 ,t1 表如下:

    第二步:先以 m 表左连接 t 表,查出 m 表中 gid 这列对应的比赛信息:

    SELECT m.mid,t.tname,m.mres,m.matime FROM m LEFT JOIN t ON t.tid = m.gid;

    查询结果记为结果集 t2 ,t2 表如下:

    第三步:以结果集 t1 为基础左连接查询结果集 t2,查询条件为两者比赛序号(mid)相同。

    SELECT t1.tname,t1.mres,t2.tname,t1.time FROM 
    (SELECT m.mid,t.tname,m.mres,m.matime as time FROM m LEFT JOIN t ON t.tid = m.hid) 
    as t1 
    LEFT JOIN 
    (SELECT m.mid,t.tname,m.mres,m.matime as time FROM m LEFT JOIN t ON t.tid = m.gid) 
    as t2 
    ON t1.mid = t2.mid WHERE t1.time BETWEEN '2006-06-01' AND '2006-07-01';

    查询结果如下:

    全连接练习题:

    A表和B表结构如下,请将两表合并:

                

    合并要求:A表中a:5,B表中a:5,因此合并后表中a对应的值为10;要求查出的结果样本如下:

    采用 union all 全连接,然后使用from 子查询:

    SELECT id,SUM(num) as num FROM ((SELECT id,num FROM a) UNION ALL(SELECT id,num FROM b)) as tb GROUP BY id;
    

     

     

    展开全文
  • 数据库版本:mysql8。0.27 如果以下代码执行有问题欢迎留言,一起探讨 文章目录内连接自然连接和等值连接的区别内连接的实现方式外连接连接连接连接连接连接INNERJOIN是最常用的连接操作。从数学的角度...
  • MySQL连接查询语句(内连接,外连接)

    千次阅读 2018-11-30 15:19:45
    连接查询 内连接 select suppliers.s_id,s_name,f_name,f_price from suppliers,fruits where suppliers.s_id = fruits.s_id 上述查询等价于inner join on 内连接查询 select suppliers.s_id,s_name,f_...
  • MySQL 连接查询 1.使用连接查询的场景 将多张表进行记录的连接查询(按照某个字段指定的条件进行数据的拼接); 进行数据的拼接(两张表的内容显示在一个结果表中 使用连接查询) 最终的结果是:记录数有可能变化,...
  • 前言:正常情况下,连接查询是比子查询效率要高的,因为子查询需要创建临时表。但是,在实际测试中,有部分情况子查询效率会比连接查询要高 1:去重的情况下 ①连接查询 SELECT DISTINCT itm.team_id FROM ...
  • MYSQL中,如何使用多表连接查询

    千次阅读 2021-06-02 11:10:33
    一,多表连接查询方法 如果查询的信息来源与多张表,则可通过两两相连的方式建立多表连接查询。 其三表连接查询语法如下: SELECT feldlist FROM table1 JOIN table2 ON table1.column1=table2.column2_1 JOIN ...
  • MySQL连接查询——MySQL 基础查询你会了吗?

    千次阅读 多人点赞 2020-05-09 20:30:49
    文章目录2、MySql连接查询2.1、内连接(sql92 和sql99)2.1.1、sql92`1、等值连接`2、 为表起别名6、可以加排序吗?7、可以实现三表连接吗?2、非等值连接3、自连接2.1.2、sql99标准1、等值连接2、非等值连接3、 自...
  • mysql左右连接查询(有示例图)

    千次阅读 2021-02-01 18:40:39
    小小的连接查询,其实里面有很多学问,今天我就来简单剖析一下。左连接,右连接,内连接的本质:将两个表的数据依据一定条件横向连接起来。给出建表语句:--------------------------------------------------create...
  • MySQL数据高级查询之连接查询、联合查询、子查询

    万次阅读 多人点赞 2017-02-04 15:17:13
    大圣网络 2017-01-31 09:19 ...连接查询 ...连接查询: 将多张表(>=2)进行记录的连接(按照某个指定的条件进行数据拼接)。...连接查询的意义: 在用户查看数据的时候,需要显示的数据...连接查询分类:SQL中将连接查询分成
  • mysql连接查询和in的效率取舍

    万次阅读 2016-01-15 17:42:55
    例如: A表 id 子id 父id 1 3 2 2 5 2 3 4 3 B表 id name 3 xxx 5 xxx 首先我要得到a表父id为2的项 在用获得的子id去查B表 连接查询:select name from A right join B on
  • MySQL数据库连接查询(外连接)

    千次阅读 2021-06-01 12:45:27
    *外连接查询 语法:SELECT 字段列表 FROM 表名1 LEFT|RIGHT|FULL JOIN 表名2 ON 表名1.字段名1 = 表名2.字段名1 ON后面表示两张表通过某种连接条件,多半为主键与外键关系 TIPS: 1.语法的写法可以同多表查询一样写,...
  • Mysql表关系 连接查询

    万次阅读 2022-06-15 09:05:09
    连接查询只会查找到符合条件的记录,其实结果和表关联查询是一样的,官方更推荐使用内连接查询。 左连接 左表全部显示,显示右表中与左表匹配的项 右连接 右表全部显示,显示左表中与右表匹配的项...
  • MySQL】多表联合查询、连接查询、子查询

    万次阅读 多人点赞 2019-06-03 17:08:20
    文章目录 【1】连接查询连接查询连接查询 左连接 右连接 【2】联合查询 【3】子查询 带in关键字的子查询 带比较运算符的子查询 带exists的子查询 带any关键字的子查询 带all关键字的子查询 【1】连接查询 连接...
  • mysql联合查询(UNION)

    万次阅读 多人点赞 2018-12-26 17:23:21
    mysql联合查询(UNION) 下面我就直接po截图和代码 #联合查询 /* union 联合 合并:将多条查询语句的结果合并成一个结果 语法: 查询语句1 union 查询语句2 union ... 应用场景: 要查询的结果来自于多个...
  • MySQL如何查看连接数和连接状态

    千次阅读 2021-01-18 20:50:41
    MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而...本文我们就来和大家分享一个小知识关于MySQL如何查看连接数和连接状态。1、mysql> show status like & 39;%connect%& 39;;Con...
  • 基于MySQL数据库的连接查询

    千次阅读 多人点赞 2018-12-04 15:43:23
    用两个表(a_table、b_table),关联字段a_table.a_id和b_table.b_id来演示一下MySQL的内连接、外连接( 左(外)连接、右(外)连接、全(外)连接)。 MySQL版本:mysql5.1.17 管理工具版本:navicat12 数据库表:a_...
  • mysql连接参数配置

    千次阅读 2021-01-17 17:11:10
    在上一篇中通过explain打印出sql的执行计划可以作为指导开发人员进行sql优化是一个方面,另外,mysql自身的参数配置也很多,比如连接参数(connection),查询缓存等,合理的设置mysql参数对于性能优化也是非常重要的 ...
  • MySQL 三表连接查询实例

    千次阅读 2020-06-13 23:23:05
    如图,三个表 MySQL 语句: select s.no,name,subname,score from stu s inner join score sc on s.no=sc.no LEFT JOIN sub sb on sc.subno=sb.subno; 结果如图

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,360,693
精华内容 544,277
关键字:

mysql连接查询

mysql 订阅