关于Mysql的高级查询的操作
前言:作为一名后端的程序员操作数据库的能力是我们基本的技能,而连表查询是我们的这个技能的关键点所在.注意这里顾明思义是对数据的查询的操作
(一).联合查询(关键字union/union all)
什么是联合查询:联合查询其实就是通过关键字将多条查询SQL语句连接起来。
例:(select * from teacher where 1 order by days desc limit 1) union (select * from teacher where 1 order by days desc limit 1);小结[1.常用于相反的业务逻辑,2.字段要保持一致3.会去除重复]
例:(select * from teacher where 1 order by days desc limit 1) union all (select * from teacher where 1 order by days desc limit 1);小结[1.常用于相反的业务逻辑,2.字段要保持一致3.不会去除重复]
(二).子查询
1.标量子查询
概念:标量子查询就是 本条查询语句的查询条件 是 另一个查询语句查询出来的单个值。
例:select * from teacher_class where teacher_id = (select id from teacher1 where name='zhansan');[小结本条查询的语句是另外一条查询的结果]
2.列子查询
概念:本条查询语句的查询条件 是 另一个查询语句查询出来的一列结果。
select * from teacher_class where teacher_id in (select id from teacher1 where name='孔子' or numb='n10078');[小结本条查询是另外一条查询结果的一个集合]
3.行子查询
概念:本条查询语句中的查询条件 是 另一个查询语句所查出来的一行记录。
select * from stu2 where (teacher_name,teacher_numb) = (select name,numb from teacher1 where id=4);
4.exists子查询
概述:TIPS:exists子查询和查询的具体数据没有关系,只和是否查询的出数据有关。
select * from stus where exists (select name from teacher1 where stu2.teacher_name=teacher1.name);
(三)连接查询
1.内连接(inner join)
概念:内连接就是左右两个表连接时候两边都相同的时候会显示查询结果否则不显示(关键字 [inner] join)
select * from stu3 [inner] join class2 on stu3.class_name = class2.name; [where可以替换on,使用using必须字段相同]
2.左外连接(left [outer] join)
概念:左连接就是以左表为主表连接右表如果右表不存在则显示为NULL
select * from stu3 left [outer] join class2 on stu3.class_name = class2.name; [只能用on、using]
3.右外连接(right [outer] join)
概念:右连接就是以右表为主表连接左表如果左表不存在则显示为NULL
select * from stu3 right[outer] join class2 on stu3.class_name = class2.name; [只能用on、using]
4.全外连接是通过union和union all 实现的(此处省略)
5.自然连接其实就是内连接使用using的条件因此可以根据自己条件掌握前面就够用
关于Mysql的高级查询的操作的更多相关文章
- mysql常用快速查询修改操作
mysql常用快速查询修改操作 一.查找并修改非innodb引擎为innodb引擎 # 通用操作 mysql> select concat('alter table ',table_schema ...
- MYSQL SQL高级查询技巧
1.UNION,EXCEPT,INTERSECT运算符 A,UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表. ...
- Mysql 基础 高级查询
在西面内容中 car 和 nation 都表示 表名 1.无论 高级查询还是简单查询 都用 select.. from..语句 from 后面 加表名 可以使一张表也可以是 ...
- MySQL的高级查询
高级查询 1.连接查询(对列的扩展) 第一种形式select * from Info,Nation #会形成笛卡尔积 select * from Info,Nation where Info.Nati ...
- MYSQL之高级查询
PHP高级查询 分组查询.联合查询.连接查询.子查询 版权声明:本文为博主原创文章,未经博主允许不得转载.
- python数据库-MySQL数据库高级查询操作(51)
一.什么是关系? 1.分析:有这么一组数据关于学生的数据 学号.姓名.年龄.住址.成绩.学科.学科(语文.数学.英语) 我们应该怎么去设计储存这些数据呢? 2.先考虑第一范式:列不可在拆分原则 这里面 ...
- mysql的子查询in()操作及按指定顺序显示
代码示例: in(逗号分隔开的值列表) 释:是否存在于值列表中 --------------------- 示例: select * from test where id in(3,1,5) orde ...
- Oracle与Mysql的高级查询与难点sql
一.连接查询 1.内连接 内连接用于返回满足连接条件的所有记录.默认情况下,在执行连接查询时如果没有指定任何连接操作符,那么这些连接查询都属于内连接. Sql代码 1. SELEC ...
- MySQL 数据库 高级查询
1.连接查询select * from Info,Nation #笛卡尔积select * from Info,Nation where Info.Nation=Nation.Code join on ...
随机推荐
- 【XSY1301】原题的价值 第二类斯特林数 NTT
题目描述 给你\(n,m\),求所有\(n\)个点的简单无向图中每个点度数的\(m\)次方的和. \(n\leq {10}^9,m\leq {10}^5\) 题解 \(g_n\)为\(n\)个点的无向 ...
- bzoj 1452: [JSOI2009]Count (二维树状数组)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1452 思路: 对每个颜色开一个二维树状数组维护就好了 实现代码: #include<b ...
- 【转载】docker 应用之动态扩展容器空间大小
docker 容器默认的空间是 10G, 如果想指定默认容器的大小(在启动容器的时候指定),可以在 docker 配置文件里通过 dm.basesize 参数指定,比如 docker -d --sto ...
- module 'sign.views' has no attribute 'search_name'
百度找到如下链接 http://lovesoo.org/python-script-error-attributeerror-module-object-has-no-attribute-solve- ...
- 「SCOI2015」小凸想跑步 解题报告
「SCOI2015」小凸想跑步 最开始以为和多边形的重心有关,后来发现多边形的重心没啥好玩的性质 实际上你把面积小于的不等式列出来,发现是一次的,那么就可以半平面交了 Code: #include & ...
- LVS-Keepalived高可用集群(DR)
LVS-DR+Keepalived高可用集群 -------client------------------主LVS--------------------从LVS------------------ ...
- NOIP2013华容道(BFS+乱搞)
n<=30 * m<=30 的地图上,0表示墙壁,1表示可以放箱子的空地.q<=500次询问,每次问:当空地上唯一没有放箱子的空格子在(ex,ey)时,把位于(sx,sy)的箱子移动 ...
- hdu1394逆序数(线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 题目大意:逆序数:即假设在数组a中,假如i<j,但是a[i]>a[j]. 现在有一个 ...
- java 数组转字符串 字符串转数组
字符串转数组 使用Java split() 方法 split() 方法根据匹配给定的正则表达式来拆分字符串. 注意: . . | 和 * 等转义字符,必须得加 \\.多个分隔符,可以用 | 作为连字符 ...
- 逗号分隔的字符串与List互转
将逗号分隔的字符串转换为List // 将逗号分隔的字符串转换为List String str = "a,b,c"; // 1.使用JDK,逗号分隔的字符串-->数组--&g ...