mysql as join_mysql as 别名与 join 多表连接语法

在MySQL中,使用AS关键字为字段、表、视图取别名,或者不用as,用空格隔开:

SELECT (SELECT id a,title b FROM blog c limit 1)d;

使用字段别名,可以帮助我们有效的组织查询的输出结果。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在SQL标准中规划的(Join)联结大致分为下面四种:

1.内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结。

2.外联结:分为外左联结和外右联结。

左联结A、B表的意思就是将表A中的全部记录和表B中联结的字段与表A的联结字段符合联结条件的那些记录形成的记录集的联结,这里注意的是最后出来的记录集会包括表A的全部记录。

右联结A、B表的结果和左联结B、A的结果是一样的,也就是说:

Select A.name B.name From A Left Join B On A.id=B.id 和

Select A.name B.name From B Right Join A on B.id=A.id 执行后的结果是一样的。

3.全联结:将两个表中存在联结关系的字段的所有记录取出形成记录集的联结(这个不需要记忆,只要是查询中提到了的表的字段都会取出,无论是否符合联结条件,因此意义不大)。

4.无联结:不用解释了吧,就是没有使用联结功能呗,也有自联结的说法。

这里我有个比较简便的记忆方法,

内外联结的区别是内联结将去除所有不符合条件的记录,而外联结则保留其中部分。

外左联结与外右联结的区别在于如果用A左联结B则A中所有记录都会保留在结果中,此时B中只有符合联结条件的记录,而右联结相反,这样也就不会混淆了。

内联接取交集,外连接取并集。单独的join语句默认是inner join。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在MySQL现有版本中CROSS JOIN的作用和INNER JOIN是一样的(虽然在SQL Standard中是不一样的,然而在MySQL中他们的区别仅仅是INNER JOIN需要附加ON参数的语句,而CROSS JOIN不需要)。

ON语句其实和WHERE语句功能大致相当,只是这里的ON语句是专门针对联结表的,ON语句后面的条件的要求和书写方式和WHERE语句的要求是一样的,大家基本上可以把ON当作WHERE用。

MySQL联结查询中的某些参数的作用:

1.USING (column_list):其作用是为了方便书写联结的多对应关系,大部分情况下USING语句可以用ON语句来代替,如下面例子:

a LEFT JOIN b USING (c1,c2,c3),其作用相当于下面语句

a LEFT JOIN b ON a.c1=b.c1 AND a.c2=b.c2 AND a.c3=b.c3

只是用ON来代替会书写比较麻烦而已。

2.NATURAL [LEFT] JOIN:这个句子的作用相当于INNER JOIN,或者是在USING子句中包含了联结的表中所有字段的Left JOIN(左联结)。

3.STRAIGHT_JOIN:由于默认情况下MySQL在进行表的联结的时候会先读入左表,当使用了这个参数后MySQL将会先读入右表,这是个MySQL的内置优化参数,大家应该在特定情况下使用,譬如已经确认右表中的记录数量少,在筛选后能大大提高查询速度。

最后要说的就是,在MySQL5.0以后,运算顺序得到了重视,所以对多表的联结查询可能会错误以子联结查询的方式进行。譬如你需要进行多表联结,因此你输入了下面的联结查询:

SELECT t1.id,t2.id,t3.id

FROM t1,t2

LEFT JOIN t3 ON (t3.id=t1.id)

WHERE t1.id=t2.id;

但是MySQL并不是这样执行的,其后台的真正执行方式是下面的语句:

SELECT t1.id,t2.id,t3.id

FROM t1,( t2 LEFT JOIN t3 ON (t3.id=t1.id) )

WHERE t1.id=t2.id;

这并不是我们想要的效果,所以我们需要这样输入:

SELECT t1.id,t2.id,t3.id

FROM (t1,t2)

LEFT JOIN t3 ON (t3.id=t1.id)

WHERE t1.id=t2.id;

在这里括号是相当重要的,因此以后在写这样的查询的时候我们不要忘记了多写几个括号,至少这样能避免很多错误

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2012-09-20 11:19

浏览 2162

评论

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359879.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

'固定' table宽度,走起!

为了让表格能够填充屏幕(剩余空白区域),常将其宽度属性定义为:100%,单元格也是用百分数来定义。 但这样就会出现问题: 如果单元格中的文本超过宽度限制,就会自动换行,高度自动增高,导致整个表格…

python中view的用法_APIview使用

ModelVIewSet 是对 APIView 封装ModelSerializer 是对 Serializer1.1 在user/urls.py中添加路由urlpatterns [ path(apiview/, views.UserInfoViewSet.as_view()), ]1.2 创建user/serializers.py写序列化器serializers.ModelSerializer 和 serializers.Serializer field参数…

HDU 1597 find the nth digit (二分查找)

二分查找 1 #include<stdio.h>2 __int64 a[65555];3 void init()4 {5 a[0]0;6 for(int i1;i<65537;i)7 {8 a[i]a[i-1]i;9 } 10 } 11 int search(int n,int low,int high) 12 { 13 int temp(lowhigh)/2; 14 if(na[temp]) return temp-…

java 注解应用技巧_改善Java应用程序性能的快速技巧

java 注解应用技巧曾经遇到过性能问题吗&#xff1f; 我也是。 如果我的经理再喊一次“ faaaaster”&#xff0c;我一生都会有听力障碍。 顺便说一句&#xff0c;我能听到所有噪音中的德语发音吗&#xff1f; ;-) 您可以相信仍然有人无知地在谈论垃圾收集器&#xff08;得到它吗…

字符串系列函数(不断跟新)

1.sprintf,sprintf_s sprintf(char* buffer, const char* format, [argument]); vs下需要加上_CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; int main() {char name[1];int input 9099;sprintf(name,"%d", input);system("pause&qu…

python获取指定区域的像素_如何获得某个区域的像素值?

因此&#xff0c;由于我对编程比较陌生&#xff0c;所以我需要一些帮助来解决这个问题。我在Windows计算机上使用SimpleCV和python2.7。我要做的是让一个(自写)程序告诉我沿着一条预设线的像素值&#xff0c;这里最重要的是每个像素的颜色。在我真的不知道从哪里开始&#xff0…

Windows 键盘操作快捷方式积累

复制、粘贴&#xff1a; CTRLC 复制被选择的项目到剪贴板 CTRLV 粘贴剪贴板中的内容到当前位置 CTRLX 剪切被选择的项目到剪贴板 Alt space E P CMD 窗口…

step7db块寻址_step7中的难点:间接寻址示例,中文详细注释。

step7中的难点&#xff1a;间接寻址示例&#xff0c;中文详细注释。推荐欢迎纠错&#xff0c;防止误导。FUNCTION "DBtoDB" : VOID //该功能块的作用是把一个数据块中的指定的一批数据&#xff0c;复制到另一个块的指定位置。TITLE //标题&#xf…

spring mvc 教程_Spring MVC开发–快速教程

spring mvc 教程这是我们的JCG合作伙伴之一&#xff0c;来自Manoj的有关使用Spring开发Web应用程序的简短教程&#xff0c; 网址为“ The Khangaonkar Report ”。 &#xff08;注意&#xff1a;对原始帖子进行了少量编辑以提高可读性&#xff09; Spring MVC使用基于模型视图…

今天才知道css hack是什么

先来个冷笑话&#xff1a;一晚下班回家&#xff0c;一民警迎面巡逻而来。突然对我大喊&#xff1a;站住&#xff01; 民警&#xff1a;int类型占几个字节? 我&#xff1a;4个。 民警&#xff1a;你可以走了。 我感到很诧异。 我&#xff1a;为什么问这样的问题&#xff1f; 民…

汇智创科机器人_【汇智创科机器人招聘信息】-看准网

在单位去学校参加双选会时投的简历&#xff0c;当时就发了一个面试邀请&#xff0c;约的是10点&#xff0c;如果有人接到面试通知&#xff0c;最好早点去&#xff0c;如果十点去&#xff0c;早上弄不完&#xff0c;下午还要接着&#xff0c;很花时间。去了之后&#xff0c;给我…

java跳转_java servlet 几种页面跳转的方法

Servlet&#xff1a;当然&#xff0c;在servlet中&#xff0c;一般跳转都发生在doGet, doPost等方法里面。1) redirect 方式response.sendRedirect("/a.jsp");页面的路径是相对路径。sendRedirect可以将页面跳转到任何页面&#xff0c;不一定局限于本web应用中&#…

实时监听输入框值变化的完美方案:oninput onpropertychange

实时监听输入框值变化的完美方案&#xff1a;oninput & onpropertychange 原文:实时监听输入框值变化的完美方案&#xff1a;oninput & onpropertychange在 Web 开发中经常会碰到需要动态监听输入框值变化的情况&#xff0c;如果使用 onkeydown、onkeypress、onkeyup 这…

java向应用程序传递参数_Java应用程序中的消息传递主体

java向应用程序传递参数消息传递是每个Java应用程序的关键方面&#xff0c;尤其是对于涉及企业应用程序集成&#xff08;EAI&#xff09;或关注点分离的应用程序&#xff0c;例如多层WEB应用程序。 消息传递可以分为两个主要类别&#xff0c;即同步和异步。 在同步消息传递中&…

java中native_java中的native关键字

JNI是JavaNative Interface的 缩写。从Java 1.1开始&#xff0c;Java Native Interface(JNI)标准成为java平台的一部分&#xff0c;它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言&#xff0c;尤其是C和C而设计的&#xff0c;但是它并不妨碍你使用其…

R语言对矩阵按某一列排序

[plain] view plaincopy a <- c(5,4,3,2,1) b <- c(1,2,3,4,5) c <- cbind(a,b) [plain] view plaincopyc[order(c[,1]),] #按第一列递增排序 转载于:https://www.cnblogs.com/jamesf/p/4751573.html

18.用两个栈实现队列[2StacksToImplementQueue]

【题目】 某队列的声明如下&#xff1a; C Code 123456789101112131415template<typenameT>classCQueue {public: CQueue() {} ~CQueue() {} voidappendTail(constT &node); // append a element to tailvoiddeleteHead(); // remove a e…

java 是用什么写的_java用什么写的

java用什么写的JAVA本身就是一门编程语言&#xff0c;它编译生成的文件运行在JVM上(java虚拟机)。JVM是由c语言和汇编语言开发的。基于此之上就是java了&#xff0c;虚拟机是起到解析执行的作用。JVM是java语言最大的特点&#xff0c;java的优缺点也是缘于JVM技术。JVM是一个可…

spring分布式事务示例_Spring声明式事务示例

spring分布式事务示例事务是具有ACID &#xff08;原子&#xff0c;一致&#xff0c;隔离和持久&#xff09;属性的工作单元。 原子意味着所有更改都发生或什么都没有发生。 如果从一个帐户借钱并记入另一个帐户&#xff0c;则交易将确保借记和贷项均已完成或均未完成。 一致表…

为什么单例模式是邪恶的(译)

原文链接&#xff1a;http://blogs.msdn.com/b/scottdensmore/archive/2004/05/25/140827.aspx 虽然这篇文章不是我写的&#xff0c;但我完全同意文章中的观点。Brian Button可能是我所知道的最有才的人之一。我相信他会喜欢你们的反馈的。 1、单例模式经常被用来为某些服务提供…