最新要闻
- 詹姆斯二儿子全美排名 詹姆斯现身执教二儿子 基本情况讲解
- NASA帕克探测器第16次贴着太阳飞过:100万度高温下为啥不会融化?|当前关注
- 时讯:全新火车票来了:299元 一张票打卡三个城市
- 挑战马斯克“农民”弟弟!上海交大工科博导带队种菜:三个月出奇迹_观速讯
- 焦点速读:五星耐摔认证!荣耀X50图赏:十面抗摔的硬核曲屏
- 全员共赢20万!2023魅族王者荣耀冠军杯招募开启
- 温网第4日:中国金花4人出战,王欣瑜冲击32强!3位金花亮相女双
- 王一博的机场穿搭如同秀场,飞往上海参加戏剧节,有点期待
- 当前焦点!越来越热不是错觉 2024年或成为最热一年
- 马斯克:未来地球上的机器人数量将超过人类 物质不再短缺
- 免费MMO也能不卖数值:《逆水寒》手游登顶AppStore畅销榜-天天快资讯
- 全球今日讯!如果重来你还愿意选我当你的导师吗?“杀马特”少年的成长
- 焦点精选!博主在呼伦贝尔拍下绝美照片:几乎和WinXP蓝天白云壁纸一模一样
- 香港立法会三读通过区议会修例草案|焦点关注
- 哈工大回应网传抢教授话筒男生被录取:还没开始投档呢
- RTX 4090无限逼近4GHz:逆天功耗1127W!_环球今热点
手机
光庭信息跌4.57% 2021上市超募11亿2022扣非降74% 时快讯
搜狐汽车全球快讯 | 大众汽车最新专利曝光:仪表支持拆卸 可用手机、平板替代-环球关注
- 光庭信息跌4.57% 2021上市超募11亿2022扣非降74% 时快讯
- 搜狐汽车全球快讯 | 大众汽车最新专利曝光:仪表支持拆卸 可用手机、平板替代-环球关注
- 视点!美国首位女总统即将诞生?拜登恐怕要提前下岗,美政坛迎来变局?
- 当前速递!用理想仪器实现更好的颗粒 德国新帕泰克亮相CPHI & PMEC China获好评
- 微粒贷怎么申请开通 开通方法如下
- 焦点简讯:心疼!这位40岁的云南缉毒警,已是满头白发
家电
全球快资讯:【技术积累】Mysql中的SQL语言【技术篇】【二】
什么是多表查询?如何在MySQL中进行多表查询?
多表查询就是在一个查询中涉及到多个表,通过特定的关联方式连接多个表,并根据条件从中查询出所需要的数据。
(相关资料图)
多表查询是关系型数据库中最为基础的应用之一。
一个比较典型的例子就是,我们在查询一个订单的详细信息时,需要从订单表中获取订单编号,然后根据订单编号关联到商品表,获取商品信息,再根据商品信息关联到库存表中,查询商品数量。一个完整的查询操作需要同时查询多个表才能完整获取所需信息。
在MySQL中,进行多表查询的方式有多种,比较常用的有三种:内连接、左连接、右连接。其中:
- 内连接是一种常用的表连接方式,只有在两个表中都具有相同的数据时,才会将两个表进行连接。内连接包含四种:等值连接,非等值连接,自连接和多表连接。
- 左连接也是一种常用的表连接方式,左连接会保留左表中的所有数据,并将右表中符合条件的数据进行匹配,如果没有匹配的数据则返回NULL。左连接只会返回左表中的数据。
- 右连接和左连接很相似,只是保留的是右表的数据。
建表语句
# 1.订单表CREATE TABLE orders (id int(11) NOT NULL AUTO_INCREMENT,order_num bigint(20) NOT NULL,order_time datetime NOT NULL,user_id int(11) NOT NULL,PRIMARY KEY (id)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;INSERT INTO orders (id, order_num, order_time, user_id)VALUES(1, 1111111, "2022-11-11 12:00:00", 1),(2, 2222222, "2022-10-10 10:00:00", 2),(3, 3333333, "2022-09-09 09:00:00", 3);# 2.商品表CREATE TABLE goods (id int(11) NOT NULL AUTO_INCREMENT,goods_name varchar(20) NOT NULL,price decimal(10,2) NOT NULL,PRIMARY KEY (id)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;INSERT INTO goods (id, goods_name, price)VALUES(1, "商品1", 99.00),(2, "商品2", 399.00),(3, "商品3", 199.00);# 3.订单商品关联表CREATE TABLE order_goods (id int(11) NOT NULL AUTO_INCREMENT,order_id int(11) NOT NULL,goods_id int(11) NOT NULL,goods_num int(11) NOT NULL,PRIMARY KEY (id)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;INSERT INTO order_goods (id, order_id, goods_id, goods_num)VALUES(1, 1, 2, 2),(2, 1, 3, 1),(3, 2, 1, 3),(4, 2, 2, 1),(5, 3, 3, 2);
多表查询的SQL语句
# 1.查询订单表中所有订单的详细信息,包括订单编号、订单时间、用户ID、商品名称、商品价格、商品数量等。SELECT o.order_num, o.order_time, o.user_id, g.goods_name, g.price, og.goods_numFROM orders oINNER JOIN order_goods og ON o.id = og.order_idINNER JOIN goods g ON og.goods_id = g.id;# 2.查询订单表中所有订单的详细信息,包括订单编号、订单时间、用户ID、商品名称、商品价格、商品数量等。但只显示2019-12-10之后的订单。SELECT o.order_num, o.order_time, o.user_id, g.goods_name, g.price, og.goods_numFROM orders oINNER JOIN order_goods og ON o.id = og.order_idINNER JOIN goods g ON og.goods_id = g.idWHERE o.order_time >= "2019-12-10";# 3.查询用户ID为1的用户所下的所有订单的详细信息,包括订单编号、订单时间、用户ID、商品名称、商品价格、商品数量等。SELECT o.order_num, o.order_time, o.user_id, g.goods_name, g.price, og.goods_numFROM orders oINNER JOIN order_goods og ON o.id = og.order_idINNER JOIN goods g ON og.goods_id = g.idWHERE o.user_id = 1;
什么是子查询?如何在MySQL中进行子查询?
子查询是指在一个查询语句中嵌套另一个查询语句的过程。子查询可以作为一个完整的查询来使用,也可以作为其他查询的一个子部分。子查询可以返回一个值或一组值,这些值可以用来过滤主查询中的结果,或者作为主查询的一部分。
在MySQL中,可以使用子查询来执行复杂的数据查询和分析。子查询可以嵌套在SELECT、INSERT、UPDATE 和 DELETE等语句中。
下面是一些常用的MySQL子查询语句:
# 1.基本子查询语法SELECT column1, column2, …FROM table1WHERE column1 = (SELECT column1 FROM table2 WHERE condition);# 2.带IN操作符的子查询SELECT column1, column2, …FROM table1WHERE column1 IN (SELECT column1 FROM table2 WHERE condition);# 3.带EXISTS操作符的子查询SELECT column1, column2, …FROM table1WHERE EXISTS (SELECT column1 FROM table2 WHERE condition);
现在,我们来看一个具体的例子:假设我们有两张表,一张是学生表,另一张是成绩表。学生表包含学生的信息,包括姓名、学号、性别等。成绩表包含学生的成绩信息,包括学号、科目、成绩等。我们通过子查询来查询某个学生的平均成绩和最高成绩。
CREATE TABLE student (id INT NOT NULL AUTO_INCREMENT,name VARCHAR(50) NOT NULL,gender ENUM("male", "female") NOT NULL,PRIMARY KEY (id));CREATE TABLE score (id INT NOT NULL AUTO_INCREMENT,student_id INT NOT NULL,course VARCHAR(50) NOT NULL,grade INT NOT NULL,PRIMARY KEY (id));INSERT INTO student (name, gender) VALUES("Alice", "female"),("Bob", "male"),("Charlie", "male");INSERT INTO score (student_id, course, grade) VALUES(1, "math", 80),(1, "physics", 90),(2, "math", 85),(2, "physics", 95),(3, "math", 90),(3, "physics", 80);
现在,我们来写一个子查询,查询Bob的平均成绩和最高成绩:
SELECT name,(SELECT AVG(grade) FROM score s WHERE s.student_id = student.id) AS avg_grade,(SELECT MAX(grade) FROM score s WHERE s.student_id = student.id) AS max_gradeFROM studentWHERE name = "Bob";
在这个例子中,我们使用了两个子查询来计算Bob的平均成绩和最高成绩。第一个子查询使用了AVG聚合函数来计算平均成绩,第二个子查询使用了MAX聚合函数来计算最高成绩。在子查询中,我们使用了WHERE子句来限制查询结果的范围,以便仅查询与当前学生相关的成绩。最后,我们把子查询的结果作为主查询的一部分输出。
总的来说,子查询是一个非常强大的工具,可以用来执行复杂的数据分析和查询。在MySQL中,子查询可以嵌套在其他查询中,以实现更灵活、更高效的数据查询和操作。
子查询和多表查询有什么区别?
子查询是在一个SQL语句中嵌套另一个完整的SELECT语句,用于提供一个参考对象或结果集,这个结果集将被嵌入到更大的查询中。它用于在一个查询中检索条件的子集,它可以被用于任意的SELECT, INSERT, UPDATE和DELETE语句中。
多表查询是指从多张表中检索信息的查询,它可以结合使用JOIN, UNION等等,以检索或计算来自多个表的特定数据集。多表查询经常用于大型数据库中,其中将数据分布在许多表中而不是一个表中。
主要区别在于:
子查询一般是单独的SQL语句,而多表查询通常涉及到多个表格。
子查询一般只返回一行,而多表查询可以返回多行。
子查询用于在一个查询中检索条件的子集,而多表查询则用于在多个表中联结,计算或筛选出需要的结果集。
子查询可以嵌套在其他语句中,而多表查询中嵌套其他SELECT语句时候通常使用JOIN等关键字。
在实际使用中,两种类型的查询可以结合使用,以实现更复杂和更灵活的数据库操作。
什么是联合查询?如何在MySQL中进行联合查询?
联合查询(Union)是将多个SELECT语句的结果合并成一个结果集输出的查询方式。它的关键字是UNION,它可以连接两个或多个SELECT语句的结果集,并去除重复数据。
在MySQL中进行联合查询,需要满足以下几个条件:
联合查询的每个SELECT语句的列数必须相同。
联合查询的每个SELECT语句的列名可以不同,但是需要用AS关键字定义别名。
联合查询的每个SELECT语句的列的数据类型必须相同或可自动转换。
CREATE TABLE `table1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;INSERT INTO `table1` (`id`, `name`, `age`) VALUES(1, "张三", 18),(2, "李四", 19),(3, "王五", 20);CREATE TABLE `table2` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;INSERT INTO `table2` (`id`, `name`, `age`) VALUES(1, "张三", 18),(2, "李四", 19),(3, "赵六", 22);
下面是一个SQL语句的示例,用于查询两个表的name和age列的联合结果,并去除重复数据:
SELECT name, age FROM table1UNIONSELECT name, age FROM table2;
联合查询和多表查询有什么区别?
联合查询和多表查询都是SQL语言中用于从多个表中获取数据的查询方法,但它们的方式和作用略有不同。
联合查询(UNION)是指将两个或多个表中相同列的数据连接在一起,形成一个结果集。比如在两个表中查询出相同的列,可以使用UNION将它们合并成一个结果集。使用UNION操作时,查询语句必须返回相同的列名和数据类型,而且返回的结果集将自动去除重复行。
而多表查询(JOIN)是指用户可以使用SQL语言将多个表连接起来,形成一个虚拟的表,允许在其中进行查询或数据操作。其作用是将多张表中有关联的数据重新组合,从而可以更方便的查询和操作数据。在多表查询中有不同的连接类型,例如INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)等,它们表示不同的数据连接方式和结果集输出方式。
因此,联合查询和多表查询是两种不同的查询方式。联合查询适用于查询相同结构的数据集,而多表查询则适用于查询在多个相关表之间的数据。
什么是交叉查询?如何在MySQL中进行交叉查询?
交叉查询(Cross Join)是一种在数据库中组合两个或多个表的查询方法,即返回每个表的所有行的组合。交叉查询用于从多个表中检索数据,它返回两个(或更多)表的所有可能的组合。交叉查询不使用任何条件过滤数据,它仅仅是将数据组合在一起。
在MySQL中进行交叉查询,需要使用关键字“CROSS JOIN”或者省略掉关键字“CROSS”,直接使用“JOIN”。
下面是建立两个表的建表语句,我们用交叉查询找到这两个表的笛卡尔积:
CREATE TABLE table_a (id int(11) NOT NULL AUTO_INCREMENT,name varchar(10) DEFAULT NULL,PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE table_b (id int(11) NOT NULL AUTO_INCREMENT,age int(11) DEFAULT NULL,PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO table_a (id, name) VALUES (1, "张三"), (2, "李四");INSERT INTO table_b (id, age) VALUES (1, 20), (2, 30);
交叉查询语句:
SELECT * FROM table_a CROSS JOIN table_b;SELECT * FROM table_a JOIN table_b;
交叉查询和多表查询有什么区别?
交叉查询和多表查询都用于从多个表中检索数据。但是,它们之间存在明显的区别。
交叉查询: 交叉查询也称为笛卡尔积查询。它是指从表中取出所有可能的组合并生成结果集。也就是说,交叉查询会返回一个表和另一个表中所有行的组合。如果有两个表,每个表都有10行,则结果集将包含100个行。交叉查询的结果集非常大,往往会消耗大量的时间和系统资源。通常不建议使用交叉查询。
多表查询: 多表查询指的是从多个表中检索有关联的数据。多表查询通常使用JOIN操作符将多个表连接起来,然后根据各个表之间的关系提取数据。JOIN操作符将返回一个表中的行与另一个表中的行相关联。根据JOIN操作符的类型,多表查询可以分为内连接、左连接、右连接和全连接。
总体来说,交叉查询的结果集包含了两个表中所有行的组合,而多表查询能够检索有相关联的数据。虽然交叉查询能够检索到所有数据,但它的结果往往特别冗长且不可操作。相反,多表查询更为常见,它能更精准地提取需要的数据,也能够更高效地操作数据。
关键词:
全球快资讯:【技术积累】Mysql中的SQL语言【技术篇】【二】
第十八期 | 知名手游开启公测,大批游戏账号遭抢注倒卖 天天最新
13.字符串
VSCode如何通过Ctrl+P快速打开node_modules中的文件
js的中的函数(二) 全球焦点
詹姆斯二儿子全美排名 詹姆斯现身执教二儿子 基本情况讲解
转股价下修难破局 12家银行可转债转股率不足1%
【新华500】新华500指数(989001)6日跌0.67% 环球热消息
NASA帕克探测器第16次贴着太阳飞过:100万度高温下为啥不会融化?|当前关注
时讯:全新火车票来了:299元 一张票打卡三个城市
挑战马斯克“农民”弟弟!上海交大工科博导带队种菜:三个月出奇迹_观速讯
焦点速读:五星耐摔认证!荣耀X50图赏:十面抗摔的硬核曲屏
全员共赢20万!2023魅族王者荣耀冠军杯招募开启
温网第4日:中国金花4人出战,王欣瑜冲击32强!3位金花亮相女双
王一博的机场穿搭如同秀场,飞往上海参加戏剧节,有点期待
快播:植信投资首席经济学家连平:下半年宏观政策将加力提效 三季度稳增长政策或集中出台
当前焦点!越来越热不是错觉 2024年或成为最热一年
马斯克:未来地球上的机器人数量将超过人类 物质不再短缺
免费MMO也能不卖数值:《逆水寒》手游登顶AppStore畅销榜-天天快资讯
全球今日讯!如果重来你还愿意选我当你的导师吗?“杀马特”少年的成长
焦点精选!博主在呼伦贝尔拍下绝美照片:几乎和WinXP蓝天白云壁纸一模一样
香港立法会三读通过区议会修例草案|焦点关注
常用的生物医学科研工具合集 世界实时
哈工大回应网传抢教授话筒男生被录取:还没开始投档呢
RTX 4090无限逼近4GHz:逆天功耗1127W!_环球今热点
世界看热讯:“长江禁捕 打非断链”专项行动 湖北5集体、9人上榜
7月6日 13:18分 京基智农(000048)股价快速拉升-世界即时
环球观焦点:滨州市直机关工委到滨州中院调研机关党建工作
这届年轻人盯上了电动轮椅 通勤不带头盔不上牌不违规:专家痛批占用公共资源
40%果肉 层层爆浆!榴莲西施千层蛋糕400gx2盒+戚风蛋糕x1盒69元大促_天天热资讯
三亚海鲜店缺斤短两被网友曝光 官方通报:商户清退出场罚款30万元
全球新资讯:同级唯一!宝骏云朵全球首创“云朵沙发”座椅:直接把大沙发搬进车里
李玟遗嘱财产全部留给母亲 网友:妈妈想要的是女儿 天天滚动
中国三人女篮积分升至世界第1 至11月排名前3球队将直通巴黎奥运_环球关注
天天热头条丨直播软件开发知识:实现感知网络质量功能
女学生拒客服工作被HR攻击 别上班了去死:公司回应 网友吐槽太过分
华为轮值董事长胡厚崑:华为盘古大模型3.0将在7月7日发布-热点聚焦
弹力修身透气:361度男运动裤夏季薄款梭织长裤69元 世界热资讯
中石化出品:鸥露竹浆抑菌抽纸28包/29.9元抄底 天天热资讯
每日热闻!实现AI全球天气精准预报!华为成果登上顶级科研杂志《Nature》
环球滚动:资金流向(7月5日)丨华工科技、新易盛、北方稀土获融资资金买入排名前三
荣耀MagicBook X 16 2023笔记本发布 首发价3699元起
16-7系统启动和内核管理
全球速递!超达装备7月6日快速上涨
清明节吃什么传统食物英语(清明节吃什么传统食物)
环球快资讯:@毕业生,从求职到入职,这份避坑指南请收好→
世界上最小的相机问世!宽4cm 重17g 只要350元_当前聚焦
【天天快播报】曝iPhone 15全系将配备更大的电池:续航大大改善
电动车的底 让自己弄掉了 热讯
15万元珠宝被家人当垃圾丢了 网友:我想当门口那个垃圾桶-报道
每日速讯:马斯克称中国会有很强的AI能力:中国下定决心做一件事就一定能做好
中方呼吁国际社会采取行动让每一个儿童都远离战火硝烟 当前速看
当前时讯:为什么要使用消息队列
三大亮点提前打卡世界人工智能大会
5年超长保质期:碳性电池40节19.9元大促
手机被大妈捡走男子狂追100多公里:从平顶山追到白云山
全球球精选!真矿泉 含锶矿物离子!峨眉山N30古岩矿泉水大促 1.24元/瓶
天天观焦点:15万以内大五座纯电 宝骏云朵内饰官图发布:值得友商一学
环球即时看!被污名化要还其清白 教授呼吁别把玩游戏当不务正业:人性需要释放
女生毕业删除90%同学被骂有病 都是塑料感情:无效社交越来越多
世界新资讯:实拍日本拉链式交替通行 还会双闪感谢后车 网友感叹素质真高
【世界播资讯】没人买!RTX4060发布近一周就跌破首发价 商家还在狂降价
视焦点讯!小米电视蝉联榜首:上半年出货量逼近400万台 今年第一或不保
研究报告:美国近一半自来水中含有“永久化学物质”
全球即时:读发布!设计与部署稳定的分布式系统(第2版)笔记20_实例层之代码
存款流向多渠道 固收类理财产品最受青睐_天天短讯
世界看点:【读财报】FOF基金透视:上半年超五成产品录得正收益 兴证全球基金规模、回报均居前
厄尔尼诺再现 农产品价格波动 各方期盼推出天气指数期货-快看
看热讯:中兴全球首发5G车地系统!地铁网速破2.1Gbps 全车看视频不卡
全球新消息丨存储行业拐点来了:SSD等要涨价 有厂商财报明确!
首发2999元!华为MatePad Air原野绿开售:首款144Hz高刷全面屏平板
今日看点:《碟中谍7》成就系列最佳
抑郁症有多可怕 看完让人不寒而栗:李玟等明星都因它离世
天天快播:国际原子能机构:未在扎波罗热核电站发现地雷或爆炸物痕迹
即时:iPhone的无线充电 特斯拉要用到车上了
苹果以旧换新突然涨价!iPhone、Mac又升值了 最高能抵2万元
李玟生命的最后时刻:中医母亲在她头顶扎针,求西医救女儿多一分钟 当前快播
学习C++这一篇就够了(基础篇) 每日速看
一天吃透Kafka面试八股文 全球报道
2023年年中总结_世界新资讯
天天热点!看完沉默:那些我们想买 却无法得手的半导体公司
天天滚动:千元续航怪兽!荣耀X50开启预售:1399元起
在民科吧里 我找到了“中华有史以来最接近神的人”
【全球速看料】你发现没?苹果从来不提什么虚拟现实、AI:只有华为学会了!
银河麒麟才是第一国产操作系统!连续12年无敌
上单奶妈出装 快来看看
环球关注:俄媒:中国新的对外关系法意味着什么?
环球观热点:22-数码管的动态显示
数年前患上抑郁症 轻生去世!李玟轻生当天还在给粉丝发语音 多名演艺界人士悼念|天天观天下
微博崩了!歌手李玟轻生去世 姐姐发声:数年前患上抑郁症
【后端面经-计算机基础】HTTP和TCP的区别-环球最资讯
每日热讯!文心一言 VS 讯飞星火 VS chatgpt (55)-- 算法导论6.3 1题
每日时讯!华擎出品 第一次半高刀卡!Intel显卡也如此娇小可爱
AI加持江湖更自由!《逆水寒》手游体验:单人也能自由探索 告别“每日一条龙”
女子花盆里种出2.5米高向日葵 网友:不愧是山东的
2023年女足世界杯最终名单公布 王霜与唐佳丽等中国女足主力队员悉数入选
一头搁浅的抹香鲸吸引动物学家注意 体内含重达9.5公斤的龙涎香
苹果最新旗舰iPhone 15系列预计今年上市 其电池容量具有较大提升
重庆出现入汛以来最强降水 江滩公园部分道路被淹导致成为江心岛
女孩花费两个月在鱼缸中做出“海市蜃楼” 曾是哈尔滨工业大学硕士