精华内容
下载资源
问答
  • mysql多表查询
    千次阅读
    2021-01-19 03:03:04

    匿名用户

    1级

    2016-12-03 回答

    MySQL在多个数据表上创建视图

    在MySQL中,使用CREATE VIEW语句也可以在两个或两个以上的数据表上创建视图。

    实例

    在department表和worker表上创建一个名为worker_view1的视图。

    1. 创建视图的代码如下:

    CREATE ALGORITHM=MERGE VIEW

    worker_view1(name,department,sex,age,location)

    AS SELECT name,department.d_name,sex,birthday,address

    FROM worker,department WHERE worker.d_id=department.d_id

    WITH LOCAL CHECK OPTION;

    在DOS提示符窗口中查看MySQL在多个数据表上创建视图的操作效果。如下图所示:

    在DOS提示符窗口中查看MySQL在多个数据表上创建视图的操作效果

    从上图中可以看出,代码的执行结果显示视图创建成功。

    2. 使用DESC语句查询虚拟表的结构。如下图所示:

    使用DESC语句查询虚拟表的结构

    从上图中可以看出,视图worker_view1的属性分别为name、department、sex、age和location。

    视图指定的属性列表对应着两个不同的表的属性列(字段)。

    视图的属性名与属性列表中的属性名相同。

    该实例中的SELECT语句查询出了department表的d_name字段,还有worker表的name、sex、birthday和address。其中,department表的d_name字段对应视图的department字段;worker表的birthday字段对应视图的age字段。

    同时,视图worker_view1的ALGORITHM的值指定为MERGE。还增加了WITH LOCAL CHECK OPTION约束。

    本示例说明,视图可以将多个表上的操作简洁的表示出来。

    提示

    同时在多个表上创建视图是非常有用的。比如,系统中有student表、department表、score表和grade表,分别存储学生的信息、院系信息、课程信息和成绩信息。可以在这4个表上创建一个视图,用来显示学生姓名、学号、班级、院系、所选课程和课程成绩。

    追问:

    能针对性点嘛?

    更多相关内容
  • MySQL多表查询

    万次阅读 多人点赞 2020-05-08 20:34:47
    在关系型数据库中,表与表之间是有练习的,所以在实际应用中,经常使用多表查询多表查询就是同时查询两个或两个以上的表 ...在 MySQL 中,多表查询主要有 **交叉连接**,**内连接**,**外连接**,**子查询**

    多表查询

    在关系型数据库中,表与表之间是有练习的,所以在实际应用中,经常使用多表查询。多表查询就是同时查询两个或两个以上的表

    在 MySQL 中,多表查询主要有 交叉连接内连接外连接子查询

    交叉连接

    交叉连接 ( CROSS JOIN ) 一般用来返回连接表的笛卡尔积

    语法格式如下:

    # 多表交叉连接时,使用 `cross join` 或者 `,` 皆可,前者是官方建议的标准写法
    select <字段名> from <tab_name> cross join <tab_name> [where子句]
    select <字段名> from <tab_name>,<tab_name> [where子句]
    

    当连接的表之间没有关系时,我们会省略掉 where子句,这时返回结果就是两个表的笛卡尔积,返回结果数量就是两个表的数据行相乘,如果每个表有 1000 行,那么返回数量就有 1000*1000=1000000 行,数据量是非常巨大的!

    如果在交叉连接时使用 where子句,MySQL会先生成两个表的笛卡尔积,然后再选择满足 where条件的记录。因此,表的数量较多时,交叉连接会非常非常慢,一般情况下不建议使用交叉连接

    笛卡尔积

    笛卡尔积( Cartesian product ) 是指两个集合 x 和 y 的乘积

    例如,有两个集合,它们值如下:

    A = {1,2}
    B = {3,4,5}
    
    # 集合 A*B 的结果集为:
    A×B={(1,3), (1,4), (1,5), (2,3), (2,4), (2,5) };
    
    # 集合 B*A 的结果集为:
    B×A={(3,1), (3,2), (4,1), (4,2), (5,1), (5,2) };
    

    以上 AB 和 BA 的结果就叫做两个集合各自的笛卡尔积

    内连接

    内连接 ( inner join ) 使用 inner join 关键字连接两张表,并使用 on 子句来设置连接条件

    语法格式如下:

    select <字段名> from <tab_name> <tab_name> inner join <tab_name> [on子句]
    

    多个表连接时,再 from 后边连续使用 inner joinjoin 即可

    案例操作:

    # 在 学生表 和 课程表中,查询 学生对应的课程
    select s.name c.course_name from student as s inner join course as c on s.course_id = c.id
    

    注意:当对多个表进行查询时,要在 select 语句后面指定字段是来源自哪一张表
    语法为 表名.列名 ,如果表名较长,可以给表设置别名,这样就可以直接在 select 后写 表的别名.列名

    外连接

    内连接查询的结果都是符合连接条件的结果,为外连接会先将连接的表分为基表和参考表,再以基表为依据返回满足与不满足条件的记录

    外连接区分为 左外连接右外连接

    左外连接

    左外连接又称为左连接,使用 left outer join 关键字连接两个表,也可以简写为 left join,并使用 on 设置连接条件

    语法格式如下:

    select <字段名> from <tab1> left join <tab2> [on子句]
    

    上述语法中,tab1 为基表tab2 为参考表,左连接查询时,可以查询处 tab1 中的所有记录和 tab2 中匹配连接条件的记录。如果 tab1 的某行在 tab2 中没有匹配行,那么在返回结果中,tab2 的字段值均为空值 NULL

    img

    右外连接

    右外连接又称为右连接,右连接是左连接的反向连接。使用 right outer join 关键字连接两个表,可以简化为 right join ,并使用 on 子句来设置连接条件

    语法格式如下:

    select <字段名> from <tab1> right outer <tab2> [on子句]
    

    与左连接相反,右连接以 tab2 为基表,tab1 为参考表,可以查询出 tab2 中所有记录和 tab1 中匹配连接条件的记录。如果 tab2 的某行在 tab1 中没有匹配项,那么在返回结果中,tab1 的字段值均为 NULL

    img

    多个表 左/右 连接时,在 on 子句后连续使用 left/right join 即可

    子查询

    子查询是 MySQL 中比较常用的查询方法,通过子查询可以实现多表查询。子查询指将一个查询语句嵌套在另一个查询语句中。子查询可以在 select,update 和 delete 语句中使用,而且可以进行多层嵌套,实际开发中,子查询经常出现在 where 语句中

    语法格式如下:

    select <字段> from <tab_name>
        where <字段><操作符>(子查询)
        );
    

    其中,操作符可以是 innot inexistsnot exists 等关键字

    案例:

    # 查询学习 python 课程的学生
    select name from student s
        where s.course_id = (select id from course c where c.name = "Python")
    
    # 查询学习 python 和 html 的学生
    SELECT name FROM student s WHERE s.course_id in
        (SELECT id FROM course c WHERE c.name="Python" OR c.name="Html");
    

    进阶用法:

    子查询语句可以嵌套在 SQL 语句中任何表达式出现的位置

    select (子查询) from 表名;
    
    select * from (子查询) as 别名;
    
    展开全文
  • MySQL多表查询语句

    千次阅读 热门讨论 2021-05-30 08:59:12
    MySQL多表查询语句 1.内连接查询 1.隐式内连接:使用where条件消除无用数据 例子: --查询所有员工信息和对应的部门信息 SELECT * FROM emp,dept WHERE emp.dept_id=dept.id; --查询员工表的姓名,性别,...

    MySQL多表查询语句

    1.内连接查询

    1.隐式内连接:使用where条件消除无用数据
    	例子:
    
    		--查询所有员工信息和对应的部门信息
    		SELECT * FROM emp,dept WHERE emp.dept_id=dept.id;
    
    	--查询员工表的姓名,性别,部门表的名称
    		SELECT 
    			t1.name,   -- 员工表姓名
    			t1.gender, -- 员工表性别 
    			t2.name   -- 部门表名称
    		FROM 
    			emp t1,
    			dept t2 
    		WHERE 
    			t1.dept_id=t2.id;
    
    2.显示内连接
    	语法:select 字段列表 from 表名1 [inner] join 表名2 on 条件
    	例子:
    
    SELECT * FROM emp INNER JOIN dept ON emp.dept_id=dept.id;
    		SELECT * FROM emp JOIN dept ON emp.dept_id=dept.id;
    

    2.外连接查询:

    1.左外连接:
    	语法:select 字段列表 from 表1 left [outer] join 表2 on 条件;
    	查询的是左表所有数据以及其交集部分
    	例子:
    
    SELECT t1.*,t2.name FROM emp t1 LEFT JOIN dept t2 ON t1.dept_id = t2.id;
    
    2. 右外连接:
    	语法:select 字段列表 from 表1 right [outer] join 表2 on 条件;
    	查询的是右表所有数据以及其交集部分
    	例子:
    
    SELECT t1.*,t2.name FROM dept t2 RIGHT JOIN emp t1 ON t1.dept_id = t2.id;
    
    展开全文
  • mysql多表查询的分类

    万次阅读 2021-07-15 17:39:01
    内连接 等值连接 非等值连接 自连接 外连接 inner join 等值连接 非等值连接 自连接 外连接

    内连接

    等值连接

    在这里插入图片描述

    非等值连接

    在这里插入图片描述

    自连接

    在这里插入图片描述

    外连接

    在这里插入图片描述

    inner join

    等值连接

    在这里插入图片描述

    非等值连接

    自连接

    外连接

    在这里插入图片描述

    展开全文
  • Mysql 多表查询详解

    万次阅读 多人点赞 2016-04-27 16:33:48
    1)多表连接有哪些分类; 2)针对这些分类有哪些连接方法? 3)这些连接方法分别作用于哪些应用场景? 这篇针对这三个点通过实例来讲述,目的是穷尽所有的场景和所有的方法,并且对每个方法的使用做实例。 2.假设有两张...
  • mysql多表查询,三张表或者以上

    千次阅读 2019-12-18 16:29:06
    mysql多表查询关键知识点 inner join inner join (内连接,或等值连接):获取两个表中字段匹配关系的记录。 left join(左连接):获取左表所有记录,即使右表没有对应匹配的记录。 right join(右连接): 与 LEFT...
  • [图片说明](https://img-ask.csdn.net/upload/201806/03/1528023942_245734.png)如图,有张中间,怎么通过article的id查询article中所有的值已经tag中的name字段的值,name可能是个,小弟刚入行没多久,...
  • mysql 多表 多个条件 查询

    千次阅读 2021-01-19 13:21:06
    mysql 查询关键字SELECT 类名 FROM 主表名INNER JOIN 子表名1ON 主表=次表 同样的内容 WHERE 查询条件多表请用INNER JOIN连接 且加 同样条件内容SELECT 类名 FROM 主表名INNER JOIN 子表名1INNER JOIN 子表名2ON 主...
  • MySQL-多表查询

    万次阅读 多人点赞 2021-10-19 20:08:43
    一、架构 student(sid,sname,sage,ssex) 学生 course(cid,cname,tid) 课程 sc(sid,cid,score) 成绩 teacher(tid,tname) 教师 二 、建表sql语句 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---...
  • MySQL中的多表查询(超级详细)

    千次阅读 2022-01-30 13:58:32
    MySQL中的多表查询 多表查询的分类 等值连接—— 非等值连接 自连接 —— 非自连接 内连接 —— 外连接 # 等值连接 vs 非等值连接 # 非等值连接的例子 SELECT* FROM job_grades; SELECT last_name, salary,grade_...
  • MySQL多表联合查询、连接查询、子查询

    万次阅读 多人点赞 2019-06-03 17:08:20
    联合查询的意义: 查询同一张表,但是需求不同 如查询学生信息, 男生身高升序, 女生身高降序 多表查询: 多张表的结构是完全一样的,保存的数据(结构)也是一样的. 联合查询order by的使用 在联合查询中: order by不能...
  • Mysql多表查询效率的研究(一)

    万次阅读 2017-08-18 21:44:10
    Mysql多表查询效率的研究(一)本文探究了mysql InnoDB引擎在多表查询的应用场景下,使用子表、内连接和左联接运行速度的差别,并且比较了索引使用与否对查询效率的影响。 第一部分简略地概括了索引、子表查询、...
  • MySQL多表查询之纵向合并

    千次阅读 2020-04-21 17:27:06
    纵向合并查询又称为联合查询,它是用union关键字把条select语句的查询结果合并为一个结果集。 纵向合并的前提是被合并的结果集的字段数量、顺序和数据类型必须完全一致。字段名不一样的情况下,会将第一个结果集的...
  • MySQL多表查询之GroupBy

    千次阅读 2014-11-24 17:34:21
    需求是根据主键id查询到顾客
  • 遇到一个问题,mysql库下A有几万条数据;B也有几万条数据,结果两关联的时候,查询超级慢,30s内没反应。 解决方案: 1. 加索引,但索引不要乱加,两关联,必须要创建的索引是两的管理字段 e.g select ...
  • springboot+mybatis+mysql 多表联合查询

    万次阅读 2018-07-02 20:10:31
    springboot+mybatis+mysql 多表查询 这里有两张表 用户表和用户信息表user、info 两个实体类展示他们一对一的关系 通过springboot**注解的方式**实现多表联合查询 通过userId查询User及其对应的Info信息 /** ...
  • 根据业务需要,需要使用如下的命令进行多表联查 select a.id as a_id, b.id as b_id, b.protocol as protocol, b.priority as priority from (a, b) left join c on (a.network_id = c.network_id) where (a.id = b...
  • MySQL多表关联查询添加索引

    千次阅读 2021-08-12 15:23:12
    explain语句 优化: 1、给大加索引 没有任何变化 2、给小加索引 ogb: coa: explain语句有用到索引, 查询时间2.7 但是大显示还是没有用到索引。 大索引没有加对,经过尝试,大索引为 再次执行 思考...
  • mysql 多表查询中 根据一个表中一个字段的最大值求另一个字段,获取 查询最大值的这条数据。 示例 表a: id name 1 张三 2 李四 表b: id sex a_id 1 女 1 2 男 2 表c: id a_id age ...
  • mysql多表多字段查询并去重

    千次阅读 2019-03-15 14:33:00
    mysql多表多字段查询并去重 - MySQL-ChinaUnix.nethttp://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4254936 MySQL多表查询 - 淋哥 - 博客园https://www.cnblogs.com/xuchunlin/p/6045263.html mysql-...
  • MySQL 数据表查询

    千次阅读 2022-03-31 14:12:39
    查询数据指从数据库中获取所需要的数据。查询数据是数据库操作中最常用,也是最重要的操作。用户可以根据自己对数据的需求,...1.1、MySQL查询所有字段 查询所有字段 MySQL命令: select * from students; 1.2、MyS
  • Mysql 多表连接查询

    万次阅读 多人点赞 2018-05-08 19:27:21
    本文部分内容转载至:Mysql 多表查询详解,同时感谢原作者的整理与创作;
  • mysql多表连接查询(去掉重复列)

    万次阅读 2019-10-16 01:25:37
    多表连接查询,且去掉重复列,使用 USING() select * from (select * from school left join course USING (courseid)) e left join student USING (studentid); select * from school left join cou...
  • MySQL多表联查给null赋值

    万次阅读 2021-10-28 08:23:15
    MySQL多表联查给null赋值
  • 由于mysql的自动优化,在多表关联查询&大数据量下,可能出现没有使用最优索引或者最优驱动表。 2.方案: 使用 强制索引 force index,示例 SELECT * FROM TABLE1 FORCE INDEX (IDX_NAME) JOIN TABLE2 使用...
  • MySQL联合查询多表查询

    万次阅读 2022-03-02 19:33:11
    on从语法上可省略,但如果省略它,将查询的是多表的笛卡尔积; 1.select *from 表1 join 表2 [ on过滤条件 ] [ where查询条件 ] ; 2.select *from 表1,表2 [ where查询条件 ] ; 3.select *fro
  • mysql查询表,指定排除字段

    千次阅读 2021-01-19 02:28:03
    查询user中除email以外的所有字段假设数据库bbs中有user,字段如下id,username,password,gender,email-------------------------------------------------------------------------在命令行窗口输入:SET @sql =...
  • mysql查询语句 和 多表关联查询 以及 子查询

    万次阅读 多人点赞 2017-03-28 14:12:15
    mysql(三):mysql查询语句 和 多表关联查询 以及 子查询 1.查询一张表: select * from 表名; 2.查询指定字段:select 字段1,字段2,字段3….from 表名; 3.where条件查询:select字段1,字段2,字段3 from...
  • mysql查询语句中,为了实现查询到某些信息,我们会用到多表的联合查询。那么如何去实现三表的联合查询呢?下面我给大家举一个例子,现在 我这里有三个表,一个是文件表wenjian,一个是管理角色表admin_group,还有...
  • mysql倒序查询

    千次阅读 2022-03-28 09:03:38
    通过 ”order by“实现,语法 :order by 字段 asc/desc。 sql:select * from ...解释:上面语句的意思就是根据”filename1字段“排序,倒叙输出tablename中的数据。 备注:asc是表示升序,desc表示降序。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,381,563
精华内容 552,625
关键字:

mysql多表查询

mysql 订阅
友情链接: EOF.zip