MySQL连接表
一:MySQL别名
1.介绍
使用MySQL别名来提高查询的可读性。
MySQL支持两种别名,称为列别名和表别名。
有时,列的名称是一些表达式,使查询的输出很难理解。要给列一个描述性名称,可以使用列别名。
用法:
SELECT
[column_1 | expression] AS descriptive_name
FROM table_name;
要给列添加别名,可以使用AS
关键词后跟别名。 如果别名包含空格,则必须引用以下内容:
SELECT
[column_1 | expression] AS `descriptive name`
FROM table_name;
因为AS
关键字是可选的,可以在语句中省略它。
2.列别名
查询选择员工的名字和姓氏,并将其组合起来生成全名。 CONCAT_WS
函数用于连接名字和姓氏。
SELECT
CONCAT_WS(', ', lastName, firstname) AS `Full name`
FROM
employees;
3.子句对别名的使用
在MySQL中,可以使用ORDER BY,GROUP BY和HAVING子句中的列别名来引用该列。
以下查询使用ORDER BY
子句中的列别名按字母顺序排列员工的全名:
SELECT
CONCAT_WS(' ', lastName, firstname) `Full name`
FROM
employees
ORDER BY
`Full name`;
以下语句查询总金额大于60000
的订单。它在GROUP BY
和HAVING
子句中使用列别名。
SELECT
orderNumber `Order no.`,
SUM(priceEach * quantityOrdered) total
FROM
orderdetails
GROUP BY
`Order no.`
HAVING
total > 60000;
4.注意点
请注意,不能在WHERE子句中使用列别名。原因是当MySQL评估求值WHERE
子句时,SELECT
子句中指定的列的值可能尚未确定。
5.表的别名
可以使用别名为表添加不同的名称。使用AS
关键字在表名称分配别名,如下查询语句语法:
table_name AS table_alias
两个表都具有相同的列名称:customerNumber
。如果不使用表别名来指定是哪个表中的customerNumber
列:
SELECT
customerName,
COUNT(o.orderNumber) total
FROM
customers c
INNER JOIN orders o ON c.customerNumber = o.customerNumber
GROUP BY
customerName
HAVING total >=5
ORDER BY
total DESC;
二:INNER JOIN内连接
1.介绍
INNER JOIN
子句将一个表中的行与其他表中的行进行匹配,并允许从两个表中查询包含列的行记录。
INNER JOIN
子句是SELECT
语句的可选部分,它出现在FROM子句之后。
在使用INNER JOIN
子句之前,必须指定以下条件:
- 首先,在FROM子句中指定主表。
- 其次,表中要连接的主表应该出现在
INNER JOIN
子句中。理论上说,可以连接多个其他表。 但是,为了获得更好的性能,应该限制要连接的表的数量(最好不要超过三个表)。 - 第三,连接条件或连接谓词。连接条件出现在
INNER JOIN
子句的ON
关键字之后。连接条件是将主表中的行与其他表中的行进行匹配的规则。
使用语法:
原理:
对于t1
表中的每一行,INNER JOIN
子句将它与t2
表的每一行进行比较,以检查它们是否都满足连接条件。当满足连接条件时,INNER JOIN
将返回由t1
和t2
表中的列组成的新行。
2.避免列的问题
如果连接具有相同列名称的多个表,则必须使用表限定符引用SELECT
和ON
子句的列,以避免列错误。
例如,如果t1
和t2
表都具有名为c
的一个相同列名,则必须在SELECT
和ON
子句中使用表限定符,如使用t1.c
或t2.c
指定引用是那个表中的c
列。
3.两种相同的做法
语句返回相同的结果集,但是使用此语法,不必使用表的别名
4.GROUP BY子句
相同的结果:
5.使用=以外的运符
也可以使用大于(>
),小于(<
)和不等于(<>
)运算符的其他运算符来形成连接谓词。
以下查询使用少于(<
)连接来查找低于代码为S10_1678
的产品的销售价格的制造商建议零售价(MSRP
)的所有产品。
三:MySQL左连接(LEFT JOIN)
1.简介
LEFT JOIN
子句允许您从匹配的左右表中查询选择行记录,连接左表(t1
)中的所有行,即使在右表(t2
)中找不到匹配的行也显示出来,但使用NULL
值代替。
2.示例
3.使用MySQL LEFT JOIN子句来查找不匹配的行
四:MySQL交叉连接(CROSS JOIN)
1.简介
CROSS JOIN
子句从连接的表返回行的笛卡儿乘积。
假设使用CROSS JOIN
连接两个表。 结果集将包括两个表中的所有行,其中结果集中的每一行都是第一个表中的行与第二个表中的行的组合。 当连接的表之间没有关系时,会使用这种情况。
语法:
CROSS JOIN
子句不具有连接条件。
如果添加了WHERE
子句,如果T1
和T2
有关系,则CROSS JOIN
的工作方式与INNER JOIN
子句类似,如以下查询所示:
2.一些问题的解决
有些问题需要使用笛卡尔这种,但是在子句中可以使用一些判断条件
五:自连接
1.介绍
在同一张表上自己连接自己。
当您想将表中行与同一表中的其他行组合时,可以使用自连接。要执行自联接操作必须使用表别名来帮助MySQL在单个查询中区分左表与同一张表的右表。
2.要获得整个组织结构
以使用employeeNumber
和reportsTo
列将employees
表连接自身。employees
表有两个角色:一个是经理,另一个是直接报告者(即,下属员工)。
MySQL连接表的更多相关文章
- 程序媛计划——mysql连接表
#inner join等值连接/内连接 mysql> select * from info; +------+-------------+----------+ | name | phone | ...
- mysql 连接表 内连接 inner
字段去重 关键字distinct 去除重复记录 可配合分组函数使用 select distinct job,deptno from emp; 未使用 distinct之前 使用后: 笛卡尔积现象:当 ...
- MySQL数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引
本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...
- MySQL多表连接
主要分3种:内连接,外连接,交叉连接 其 他:联合连接,自然连接 1.内联接 典型的联接运算,使用像 = 或 <> 之类的比较运算).包括相等联接和自然联接. 内联接使用比 ...
- MySQL多表查询之外键、表连接、子查询、索引
MySQL多表查询之外键.表连接.子查询.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为 ...
- MySQL数据库学习笔记----MySQL多表查询之外键、表连接、子查询、索引
本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...
- Spring4 MVC+Hibernate4 Many-to-many连接表+MySQL+Maven实例
这篇文章显示 Hibernate 的多对多实例,在 Spring MVC CRUD Web应用程序中连接表.我们将同时讨论管理多对多关系在视图和后端. 我们将使用应用程序的Web界面创建,更新,删除和 ...
- MySQL多表查询合并结果union all,内连接查询
MySQL多表查询合并结果和内连接查询 1.使用union和union all合并两个查询结果:select 字段名 from tablename1 union select 字段名 from tab ...
- mysql多表连接和子查询
文章实例的数据表,来自上一篇博客<mysql简单查询>:http://blog.csdn.net/zuiwuyuan/article/details/39349611 MYSQL的多表连接 ...
随机推荐
- debian9部署jenkins
这里记录两种部署方式,一种是通过包管理工具直接安装,另一种是用tomcat作为web容器运行jenkins.个人倾向第一种,部署简单,而且维护起来方便很多. 用包管理工具aptitude部署jenki ...
- C# 获取IIS站点及虚拟目录信息
using System; using System.DirectoryServices; using System.Collections.Generic; using System.Text; n ...
- hdu5583
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> ...
- linux command ------ netstat
netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表.实际的网络连接以及每一个网络接口设备的状态信息. 语法选项 netstat [选项] -a或--all:显示所有连线中的 ...
- java基础基础总结----- Math(随机数)
前言:math类中感觉最好玩的应该就是随机数 代码: package com.day13.math; import java.util.Random; /** * 类说明 :Math * @autho ...
- BFC的个人理解
BFC是Block Formatting Context (块级格式化上下文)的缩写,是一个独立的渲染区域,这个东西的存在是为了隔绝一些内部子元素对外部元素的影响. 例如: 我们用overflow:h ...
- Sql数据库不能频繁连接
这个问题怎么说呢,我频繁的读一个json文件,所以就频繁的去连接了数据库.所以导致了数据库后来就不工作了(罢工?O(∩_∩)O哈哈~) 解决办法是加一个判断语句,如果是空的就连接,否则就别一直连接了. ...
- SSM数据库数据导出excel
首先,这是我对自己的需求而使用的逻辑,若有可以完美的地方方便告诉下小白. apache的poi MAVEN <dependency> <groupId>org.apache.p ...
- pandas重置索引的几种方法探究
pandas重置索引的几种方法探究 reset_index() reindex() set_index() 函数名字看起来非常有趣吧! 不仅如此. 需要探究. http://nbviewer.jupy ...
- Git Pull Failed: cannot lock ref 'refs/remotes/origin/xxxxxxxx': unable to resolve ref
1.xxxxxxxx代表目录名称,我要pull的目录是supman_creditmall_v5: 2.从代码库中pull代码时报这个错误,代码pull失败: 3.解决办法,看下图,删除文件后再pull ...