MySQL多表查询

添加练习表

-- 用户表(user)

CREATE TABLE `user`(

`id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户id(主键)',

`username` VARCHAR(50) COMMENT '用户姓名',

`age` CHAR(3) COMMENT '用户年龄'

);

-- 订单表(orders)

CREATE TABLE `orders`(

`id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '订单id(主键)',

`price` DOUBLE COMMENT '订单价格',

`user_id` INT COMMENT '用户id(外键)'

);

-- 给已经存在的表添加外键,语法如下

-- alter table 表名 add constraint [外键名字] foreign key (外键字段) references 父表(主键字段);

ALTER TABLE orders ADD CONSTRAINT user_fk FOREIGN KEY (user_id) REFERENCES `user` (id);

-- 向user表中添加数据

INSERT INTO USER VALUES(1,'第一',11);

INSERT INTO USER VALUES(2,'小二',12);

INSERT INTO USER VALUES(3,'张三',33);

INSERT INTO USER VALUES(4,'李四',24);

INSERT INTO USER VALUES(5,'王五',17);

INSERT INTO USER VALUES(6,'赵六',36);

INSERT INTO USER VALUES(7,'七七',18);

INSERT INTO USER VALUES(8,'粑粑',NULL);

-- 向orders 表中插入数据

INSERT INTO orders VALUES(111,1314,3);

INSERT INTO orders VALUES(112,122,3);

INSERT INTO orders VALUES(113,15,4);

INSERT INTO orders VALUES(114,315,5);

INSERT INTO orders VALUES(115,1014,NULL);

INSERT INTO orders VALUES(116,666,6);

INSERT INTO orders VALUES(117,1111,1);

INSERT INTO orders VALUES(118,8888,NULL);复制代码

MySQL数据库高级查询和多表查询-1.png (18.28 KB, 下载次数: 0)

2020-9-3 21:32 上传

MySQL数据库高级查询和多表查询-2.png (17.88 KB, 下载次数: 0)

2020-9-3 21:32 上传

笛卡尔积

笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。(笛卡尔积)百度百科什么笛卡尔积,如下所示

SELECT * FROM `user`,`orders`;复制代码

MySQL数据库高级查询和多表查询-3.png (142.91 KB, 下载次数: 0)

2020-9-3 21:32 上传

像如上图查出来的数据,对我们程序员是没啥用的。哪如何消除笛卡尔积呢?需要主外键的约束,去重复数据。

SELECT * FROM `user` AS u,`orders` AS o WHERE u.`id`=o.`user_id`;复制代码

MySQL数据库高级查询和多表查询-4.png (37.52 KB, 下载次数: 0)

2020-9-3 21:32 上传

1.内连接

1.1隐式内连接

from 后面直接出现多表表名,这个属于隐式内连接select * from 表a,表b where a.id = b.a_id;

SELECT * FROM `user` AS u,`orders` AS o WHERE u.`id`=o.`user_id`;复制代码

MySQL数据库高级查询和多表查询-5.png (37.48 KB, 下载次数: 0)

2020-9-3 21:32 上传

1.2显示内连接(推荐使用)

使用 inner join 来链接表,后面 on 跟条件。(inner 可以省略)select * from 表a inner join 表b on a.id = b.a_id;查询成年用户和订单数据;

SELECT * FROM `user` u JOIN `orders` o ON u.`id`=o.`user_id` WHERE age >= 18;复制代码

MySQL数据库高级查询和多表查询-6.png (35.48 KB, 下载次数: 0)

2020-9-3 21:32 上传

2.外连接

外链接可以显示单表的全部数据,包括null;2.1右外链接

显示右边表的全部数据使用 right outer join 来链接表,后面 on 跟条件。(outer 可以省略)select * from 表a right outer join 表b on a.id=b.a_id;

SELECT * FROM `user` u RIGHT JOIN `orders` o ON u.`id`=o.`user_id`;复制代码

MySQL数据库高级查询和多表查询-7.png (47.72 KB, 下载次数: 0)

2020-9-3 21:32 上传

左边表数据(user)

MySQL数据库高级查询和多表查询-8.png (16.97 KB, 下载次数: 0)

2020-9-3 21:32 上传

右边表数据(orders)

MySQL数据库高级查询和多表查询-9.png (16.68 KB, 下载次数: 0)

2020-9-3 21:32 上传

2.2左外链接(推荐使用)

显示左边表的全部数据使用 left outer join 来链接表,后面 on 跟条件。(outer 可以省略)select * from 表a left outer join 表b on a.id=b.a_id;

SELECT * FROM `user` u LEFT JOIN `orders` o ON u.`id`=o.`user_id`;复制代码

MySQL数据库高级查询和多表查询-10.png (48.84 KB, 下载次数: 0)

2020-9-3 21:32 上传

左边表数据(user)

右边表数据(orders)

3.子查询

子查询,嵌套的感觉。查询出来的结果给另外一个查询当条件使用。查询年龄最大的用户的订单数据

SELECT * FROM orders o WHERE o.`user_id` IN (

SELECT u.`id` FROM `user` u WHERE u.`age` IN(

SELECT MAX(u.`age`) FROM `user` u

)

);复制代码

MySQL数据库高级查询和多表查询-13.png (31.73 KB, 下载次数: 0)

2020-9-3 21:32 上传

4.全连接(MySQL不支持)

全连接,左右两张表的全部数据包括null。相当于右外链接和左外链接的结合。select * from 表a full outer join 表b on a.id=b.a_id;(MySQL不支持,不做演示)MySQL其它文章,请看下面链接

MySQL DDL 语句

MySQL CRUD 语句

MySQL 聚合函数

MySQL 多表查询

END…

到此这篇关于MySQL数据库高级查询和多表查询的文章就介绍到这了,更多相关MySQL高级查询和多表查询内容请搜索咔叽论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持咔叽论坛!

mysql数据库查询游戏_MySQL数据库高级查询和多表查询相关推荐

  1. mysql 子表 关联查询语句_MySQL基本SQL语句之单表查询、多表查询和子查询

    一.简单查询: 基本语法:SELECT * FROM tb_name;查询全部 SELECT field1,field2 FROM tb_name; 投影 SELECT [DISTINCT] * FR ...

  2. mysql3表查询语句_MySQL基础语句三(多表查询)

    今天让我们来学习mysql的多表查询,爱学习的你就是我的好朋友哦! 多表设计的两种方式:通过id关联(还可以是其他不重复的字段) 通过外键关联 主键: 能够唯一表示数据表中的每个记录的字段或者字段的组 ...

  3. mysql数据库优化命令_MySQL数据库优化总结

    一个:MySQL标准数据库优化注意事项 1.数据库设计(表设计合理)三范式(规范的模式) 三范式包含: 第一范式:1NF是对属性的原子性的约束.要求属性具有原子性,不可再分解.(仅仅要是关系型数据库都 ...

  4. mysql伪列的使用,mysql伪列的妙用,mysql获取近几天的日期用来连表查询

    文章目录 写在前面 伪列的使用 初步 获取前几行 获取近几天的日期(用于关联查询) 配合UNION的妙用 UNION获取几行数据 获取近50天的日期(不使用其他表) 举一反三 写在前面 我们都知道or ...

  5. MySQL学习思维导图(MySQL简介、SQL基础命令、约束、单表查询、多表查询、内置函数、存储过程、视图、事务、索引)

    MySQL学习思维导图 内容包括:MySQL简介.SQL基础命令.约束.单表查询.多表查询.内置函数.存储过程.视图.事务.索引 文章目录 MySQL学习思维导图 一.MySQL简介 二.SQL基础命 ...

  6. 上岸后分享:SELECT查询解题思路(尤其是不同多表查询对比) 力荐力荐力荐

    阅读前请看一下:我是一个热衷于记录的人,每次写博客会反复研读,尽量不断提升博客质量.文章设置为仅粉丝可见,是因为写博客确实花了不少精力.希望互相进步谢谢!! 文章目录 阅读前请看一下:我是一个热衷于记 ...

  7. mysql 创建查询 删除_MYSQL数据库查询删除创建企业基本知识

    数据查询语言(DQL)从表中获取数据 select  + where (位置)  order by(排序)  group by  haveby 查询用户:select user,host,passwo ...

  8. mysql数据库查询笔记_MySql数据库基础笔记(一)

    一.表与库的概念 数据库管理数据,它是以什么样的形式组成的? 生活中的表---->表 table 多行多列,传统的数据库都是这样的;声明了表头,一个表创建好了,剩下的就是往表中添加数据 多张表放 ...

  9. mysql关键字使用顺序_MySQL数据库之单表查询中关键字的执行顺序

    MySQL数据库之单表查询中关键字的执行顺序 1 语法顺序 select distinct from where group by having order by limit 2 执行顺序 from ...

最新文章

  1. Mongo、Redis、Memcached对比及知识总结
  2. 存储的瓶颈--大型网站技术演进思考
  3. 交叉验证分析每一折(fold of Kfold)验证数据的评估指标并绘制综合ROC曲线
  4. eureka/zookeeper/consul 三个注册中心的异同点
  5. 【数据结构与算法】浅析堆栈以及数据结构的堆和栈
  6. python爬虫模块_python之爬虫_模块
  7. 跳出框架iframe的操作语句
  8. sql语句mysql_MySQL基本的Sql语句
  9. windows注册表启动项
  10. nacos + springcloud gateway 出现503错误
  11. 老佛爷“驾到”潮爆的IT Bag也来了(组图)
  12. 摩斯电码php源码,摩斯密码: 用php实现摩斯密码 morse
  13. fiddler提示the system proxy was changed,Click to reanable capturing.导致无法抓包
  14. HTTP超文本传输协议详解
  15. JS高级程序设计精简版(第五章:引用类型)附思维导图
  16. 运维常用命令大全,从入门到精通就靠它了!
  17. clickhouse源码:函数分析和自定义函数UDF
  18. 华为、苹果,为何“盯”上二手机?
  19. 西北农林科技大学接口技术设计性实验一——8255并行接口实验
  20. mmTrix大数据分析平台构建实录

热门文章

  1. 软测5班课程-软件测试概论
  2. utf8改成utf8mb4实战教程
  3. 移动硬盘数据丢失恢复教程
  4. JIEMI人体美化技术-职业重要
  5. 计算机应用基础五笔试题,计算机应用基础必考题「附答案」
  6. Java实验四,星号题最终版(暂定。。。也许还能找到问题)
  7. 堡垒机JumpServer(五):数据库应用权限管理
  8. 我的数据库大作业——学生选课系统实现(准备)
  9. django-admin动态多选框表单实现
  10. 引用 Hibernate 配置属性