花式了解---MySQL多表查询


花式了解---MySQL多表查询

一、使用SELECT子句进行多表查询

SELECT 字段名 FROM 表1,表2 … WHERE 表1.字段 = 表2.字段 AND 其它查询条件

SELECT a.id,a.name,a.address,a.date,b.math,b.english,b.chinese FROM tb_demo065_tel AS b,tb_demo065 AS a WHERE a.id=b.id

注:在上面的的代码中,以两张表的id字段信息相同作为条件建立两表关联,但在实际开发中不应该这样使用,最好用主外键约束来实现

二、使用表的别名进行多表查询
如:

SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065  a,tb_demo065_tel  b WHERE a.id=b.id AND b.id='$_POST[textid]'

SQL语言中,可以通过两种方式为表指定别名 
第一种是通过关键字AS指定,如

SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065 AS a,tb_demo065_tel AS b WHERE a.id=b.id

第二种是在表名后直接加表的别名实现

SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065  a,tb_demo065_tel  b WHERE a.id=b.id

使用表的别名应注意几下几点
(1)别名通常是一个缩短了的表名,用于在连接中引用表中的特定列,如果连接中的多个表中有相同的名称列存在,必须用表名或表的别名限定列名
(2)如果定义了表的别名就不能再使用表名

三、合并多个结果集
SQL语言中,可以通过UNION 或 ALL将多个SELECT语句的查询结果合并输出,这两个关键字的使用说明如下:
UNION:利用该关键字可以将多个SELECT 语句的查询结果合并输出,并删除重复行
ALL:利用该关键字可以将多个SELECT 语句的查询结果合并输出,但不会删除重复行
在使用UNION或ALL关键字将多个表合并输出时,查询结果必须具有相同的结构并且数据类型必须兼容,另外使用UNION时两张表的字段数量也必须相同,否则会提示SQL语句有错误。

e.x:SELECT id,name,pwd FROM tb_demo067 UNION SELECT  uid,price,date FROM tb_demo067_tel

四、简单嵌套查询
子查询:子查询是一个SELECT查询,返回单个值且嵌套在SELECT、INSERT、UPDATE和DELETE语句或其它查询语句中,任何可以使用表达式的地方都可以使用子查询.

SELECT id,name,sex,date FROM tb_demo068 WHERE id in(SELECT id FROM tb_demo068 WHERE id='$_POST[test]')

内连接:把查询结果作为WHERE子句的查询条件即称为内连接

五、复杂的嵌套查询
多表之间的嵌套查询可以通过谓词IN实现,语法格式如下:
test_expression[NOT] IN{<br> subquery<br>}
参数说明:test_expression指SQL表达式,subquery包含某结果集的子查询
多表嵌套查询的原理:无论是多少张表进行嵌套,表与表之间一定存在某种关联,通过WHERE子句建立此种关联实现查询

六、嵌套查询在查询统计中的应用
实现多表查询时,可以同时使用谓词ANY、SOME、ALL,这些谓词被称为定量比较谓词,可以和比较运算符联合使用,判断是否全部返回值都满足搜索条件.SOME和ANY谓词是存在量的,只注重是否有返回值满足搜索条件,这两个谓词的含义相同,可以替换使用;ALL谓词称为通用谓词,它只关心是否有谓词满足搜索要求.

SELECT * FROM tb_demo069_people WHERE uid IN(SELECT deptID FROM tb_demo069_dept WHERE deptName='$_POST[select]')
SELECT a.id,a.name FROM tb_demo067 AS a WHERE id<3)
>ANY 大于子查询中的某个值 >=ANY 大于等于子查询中的某个值  ALL 大于子查询中的所有值  >=ALL 大于等于子查询中的所有值 

七、使用子查询作派生的表
在实际项目开发过程中经常用到从一个信息较为完善的表中派生出一个只含有几个关键字段的信息表,通过子查询就可以来实现这一目标,如

SELECT people.name,people.chinese,people.math,people.english FROM (SELECT name,chinese,math,english FROM tb_demo071) AS people

注:子查询应遵循以下规则:
(1)由比较运算符引入的内层子查询只包含一个表达式或列名,在外层语句中的WHERE子句内命名的列必须与内层子查询命名的列兼容
(2)由不可更改的比较运算符引入的子查询(比较运算符后面不跟关键字ANY或ALL)不包括GROUP BY 或 H*ING子句,除非预先确定了成组或单个的值
(3)用EXISTS引入的SELECT列表一般都由*组成,不必指定列名
(4)子查询不能在内部处理其结果

八、使用子查询作表达式

SELECT (SELECT *G(chinese)FROM tb_demo071),(SELECT *G(english)FROM tb_demo071),(SELECT *G(math)FROM tb_demo071) FROM tb_demo071

注:在使用子查询时最好为列表项取个别名,这样可以方便用户在使用mysql_fetch_array()函数时为表项赋值,如

SELECT (SELECT *G(chinese) FROM tb_demo071) AS yuwen ,(SELECT *G(english) FROM tb_demo071) AS yingyu,(SELECT *G(math) FROM tb_demo071) AS shuxue FROM tb_demo071

九、使用子查询关联数据

SELECT * FROM tb_demo072_student WHERE id=(SELECT id FROM tb_demo072_class WHERE className = '$_POST[text]')

十、多表联合查询
利用SQL语句中的UNION,可以将不同表中符合条件的数据信息显示在同一列中。

Trae国内版 Trae国内版

国内首款AI原生IDE,专为中国开发者打造

Trae国内版 2045 查看详情 Trae国内版
e.x:SELECT * FROM tb_demo074_student UNION SELECT * FROM tb_demo074_fasten

注:使用UNION时应注意以下两点:
(1)在使用UNION运算符组合的语句中,所有选择列表的表达式数目必须相同,如列名、算术表达式及聚合函数等
(2)在每个查询表中,对应列的数据结构必须一样。

十一、对联合后的结果进行排序
为了UNION的运算兼容,要求所有SELECT语句都不能有ORDER BY语句,但有一种情况例外,那就是在最后一个SELECT语句中放置ORDER BY 子句实现结果的最终排序输出。

e.x:SELECT * FROM tb_demo074_student UNION SELECT * FROM tb_demo074_fasten ORDER BY id

使用UNION条件上相对比较苛刻,所以使用此语句时一定要注意两个表项数目和字段类型是否相同

十二、条件联合语句

SELECT * FROM tb_demo076_BEIJING GROUP BY name H*ING name='人民邮电出版社' OR name='机械工业出版社' UNION SELECT * FROM tb_demo076_BEIJING GROUP BY name H*ING name <>'人民邮电出版社' AND name <>'机械工业再版社' ORDER BY id

上面语句应用了GROUP BY分组语句和H*ING语句实现条件联合查询。其实现目的是先保证将'人民邮电出版社'和'机械工业出版社'始终位于名单最前列,然后再输出其它的出版社

十三、简单内连接查询

SELECT filedlist FROM table1 [INNER] JOIN table2 ON table1.column1 = table2.column1

其中,filedlist是要显示的字段,INNER表示表之间的连接方式为内连接,table1.column1=table2.column1用于指明两表间的连接条件,如:

SELECT a.name,a.address,a.date,b.chinese,b.math,b.english FROM tb_demo065 AS a INNER JOIN tb_demo065_tel AS b on a.id=b.id

十四、复杂内连接查询
复杂的内连接查询是在基本的内连接查询的基础上再附加一些查询条件,如:

SELECT a.name,a.address,a.date,b.chinese,b.math,b.english FROM tb_demo065 AS a INNER JOIN tb_demo065_tel AS b on a.id=b.id WHERE b.id=(SELECT id FROM  tb_demo065 WHERE tb_demo065.name='$_POST[text]')

总之,实现表与表之间的关联的本质是两表之间存在共同的数据项或者相同的数据项,通过WHERE 子句或内连接INNER JOIN … ON 语句将两表连接起来,实现查询

十五、使用外连接实现多表联合查询
(1)LEFT OUTER JOIN表示表之间通过左连接方式相互连接,也可简写成LEFT JOIN,它是以左侧的表为基准故称左连接,左侧表中所有信息将被全部输出,而右侧表信息则只会输出符合条件的信息,对不符合条件的信息则返回NULL

e.x:SELECT a.name,a.address,b.math,b.english FROM tb_demo065 AS A LEFT OUTER JOIN tb_demo065_tel AS b ON a.id=b.id

(2)RIGHT OUTER JOIN表示表之间通过右连接方式相互连接,也可简写成RIGHT JOIN,它是以右侧的表为基准故称右连接,右侧表中所有信息将被全部输出,而左侧表信息则只会输出符合条件的信息,对不符合条件的信息则返回NULL

E.X:SELECT a.name,a.address,b.math,b.english FROM tb_demo065 AS A RIGHT OUTER JOIN tb_demo065_tel AS b ON a.id=b.id

十六、利用IN或NOTIN关键字限定范围

e.x:SELECT * FROM tb_demo083 WHERE code IN(SELECT code FROM tb_demo083 WHERE code BETWEEN '$_POST[text1]' AND '$_POST[text2]')

利用IN可指定在范围内查询,若要求在某范围外查询可以用NOT IN代替它

十七、由IN引入的关联子查询

e.x:SELECT * FROM tb_demo083 WHERE code IN(SELECT code FROM tb_demo083 WHERE code = '$_POST[text]')

十八、利用H*ING语句过滤分组数据
H*ING子句用于指定组或聚合的搜索条件,H*ING通常与GROUP BY 语句一起使用,如果SQL语句中不含GROUP BY子句,则H*ING的行为与WHERE子句一样.

e.x:SELECT name,math FROM tb_demo083 GROUP BY id H*ING math > '95'

推荐学习:mysql教程

以上就是花式了解---MySQL多表查询的详细内容,更多请关注其它相关文章!


# 解锁  # 网络营销推广的公司  # 赣州建材公司网络营销推广  # 长沙抖音seo优化加盟  # 福田营销网站优化的方法  # 北京网站建设签约  # 宁波网站建设个人工作室  # 网站制作与推广外包  # 资阳推广营销  # 网络营销如何推广业绩提升  # 阿勒泰地区网站seo  # mysql  # 可以通过  # 数据结构  # 是在  # 镜像  # 符合条件  # 查询结果  # 运算符  # 多个  # 子句 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 告别繁琐SEO!如何使用SyliusSitemap插件自动化生成网站地图,提升搜索引擎排名  智慧团建活动报名入口 智慧团建活动报名入口手机端官网​  除了Copilot,还有哪些值得一试的VS Code AI插件?  使用CSS :has() 选择器实现父元素样式控制:从子元素反向应用样式  视频号视频怎么提取文案?提取的文案如何优化与使用?  Yandex世界探索 最新官方免登录入口全知道  猫眼电影app怎么查询电影院的营业时间_猫眼电影影院营业时间查询教程  Microsoft Edge网页字体太淡看不清怎么办_Microsoft Edge字体渲染优化技巧  CodeIgniter 3 连接 SQL Server:正确获取查询结果的教程  VS Code快捷键when上下文子句的妙用  酷狗音乐多音轨设置教程  192.168.1.1路由器后台入口 192.168.1.1默认登录入口  mysql中如何配置字符集和排序规则_mysql字符集排序配置  PyEZ 配置提交中 RpcTimeoutError 的健壮性处理策略  TikTok网页版入口快速访问 TikTok官网账号登录方法  MySQL多重关联查询:利用别名高效获取同一表的多个关联字段  繁花漫画使用教程  Win10输入法不见了怎么办 Win10找回语言栏图标教程  修复UI元素交互障碍:从“开始”按钮到信息框的平滑过渡实现  钉钉任务无法提醒如何处理 钉钉任务提醒优化方法  口腔诊所管理软件推荐  J*aScript中高效处理用户输入:从Keyup事件到表单提交的优化实践  Python实战:高效处理实时数据流中的最小/最大值  实现可重用自定义Python Range类  Python实时数据流中高效查找最大最小值  抖音小程序怎么开通?小程序开通条件是什么?  济南公交卡手机充值指南  《华夏千秋》龙女试炼功法获取方法  Lar*el 关联查询:同时筛选父表与子表数据的高效策略  Scipy Sparse CSR 矩阵非零元素行级遍历的最佳实践  如何在Python中安全地将环境变量转换为整数并满足Mypy类型检查  Windows Audio服务启动失败怎么办_电脑没声音的终极服务修复法【修复】  顺丰快递怎么查物流_顺丰快递物流信息实时查询操作指南  《花瓣》创建专辑方法  VS Code源代码管理(SCM)视图的进阶使用技巧  iCloud官方网站 iCloud网页版在线登录入口  CSS如何控制元素外边距_margin实现布局间隔  优酷官网登录入口电脑版 优酷官网网址入口  荣耀Magic7拍照夜景噪点处理_荣耀Magic7相机优化  win11怎么启用或禁用休眠 Win11 powercfg命令管理休眠文件【技巧】  C++如何使用CMake构建项目_C++ CMakeLists.txt编写入门教程  优化2xN网格最大路径和的动态规划算法实践  实时数据流中高效查找最小值与最大值  抖音火山版如何进行提现  Cassandra中复合主键、二级索引与ORDER BY排序的限制与解决方案  Go语言中方法接收器的选择:值类型还是指针类型?  C++ priority_queue怎么用_C++优先队列底层实现与自定义比较器  毒蘑菇VOLUMESHADER_BM官网首页登录入口 毒蘑菇VOLUMESHADER_BM官网首页登录入口说明  外卖小程序对接第三方配送  《荔枝fm》导出文件教程 

 2020-05-06

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.