前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《深入浅出SQL》问答录(七)

《深入浅出SQL》问答录(七)

作者头像
看、未来
发布2020-08-25 17:02:48
8050
发布2020-08-25 17:02:48
举报
在这里插入图片描述
在这里插入图片描述

本系列出自《深入浅出MySQL》,全文以问答形式展开,是我的个人学习笔记

问答录

先看花絮。

Q:我为什么需要交叉联接?

A:知道交叉联接的存在,有助于我们找出修正联接的正确方式。还有,交叉联接有时可用于RDBMS软件及其配置的运行速度。运行交叉联接所需的时间可以轻易的检测与比较出速度慢的查询。


Q:内联接和交叉联接有什么区别吗?

A:交叉联接属于内联接的一种。内联接就是通过查询中的条件移除了某些结果的交叉联接。


Q:可以联接多于两张表吗?

A:可以,后续章节再说,有点饿了。


Q:ORDER BY 这些东西也能与联接放到一起吗?

A:是的。


Q:外联接呢?

A:莫急。


花絮

字符串切割函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

同时(几乎同时)CREATE、SELECT、INSERT

代码语言:javascript
复制
CREATE TABLE profession(
	id INT(11) NOT NULL AUTP+INCREMENT PRIMARY KEY,
	profession varchar(20)
);
INSERT INTO profession (profession)
	SELECT profession FROM my_contacts
	GROUP BY profession
	ORDER BY profession;
代码语言:javascript
复制
CREATE TABLE profession AS
	SELECT profession FROM my_contacts
	GROUP BY profession
	ORDER BY profession;
ALTER TABLE profession
ADD COLUMN id INT NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY(id);
代码语言:javascript
复制
CREATE TABLE profession(
	id INT(11) NOT NULL AUTP+INCREMENT PRIMARY KEY,
	profession varchar(20)
) AS
	SELECT profession FROM my_contacts
	GROUP BY profession
	ORDER BY profession;

关键字AS

看上面语句,AS能把SELECT的查询结果填入表中。

短短一个查询语句,就出现了五次“profession”,这五次profession效果各有不同,我们容易弄晕,但是SQL能够很轻易的分辨。 为了能让我们容易分辨,SQL推出了假名功能。

创建别名真的很简单,在查询软件中首次使用原始列名的地方后接一个AS并设定要采用的别名,告诉软件现在开始要以另一个名称引用my_contacs表的profession列,这样可以让查询更容易被我们理解。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
表的别名,谁会需要?

你会需要! 接下来要开始对表进行联结了,嘿嘿,睁大眼睛吧。

创建表的别名的方式和创建列的别名的方式几乎一样。在查询中首次出现表名的地方后接AS并设定别名。 当然,你甚至可以连AS也省了。

联接

交叉联接(笛卡尔积)

假设你有一个存储男孩姓名的表以及一个记录男孩们都有哪些玩具的表,现在我们要试着找出每个男孩拥有的玩具。

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
SELECT t.toy,b.boy
From toys t
	CROSS JOIN
	boys AS b
;

CROSS JOIN返回两张表的每一行相乘的结果。

在这里插入图片描述
在这里插入图片描述
内联接

INNER JOIN利用条件判断中的比较运算符结合两张表的记录。只有联接记录符合记录条件时才会返回列。

代码语言:javascript
复制
SELECT somecolumns
FROM table1
	INNER JOIN
	table2
ON somecondition;	--条件式里课采用任何一个比较运算符,也可以改用WHERE

示例:

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
SELECT mc.last_name,mc.first_name,p.profession
FROM my_contacts AS mc
	INNER JOIN
	profession AS p
ON mc.prof_id = p.prof_id;
在这里插入图片描述
在这里插入图片描述
自然联接

属于内联接的一种。 自然联接只有在联接的列在两张表中的名称相同时才会用。

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
SELECT boys.boy,toys.toy
FROM boys
	NATURAL JOIN
	toys;
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问答录
  • 花絮
    • 字符串切割函数
      • 同时(几乎同时)CREATE、SELECT、INSERT
        • 关键字AS
          • 表的别名,谁会需要?
        • 联接
          • 交叉联接(笛卡尔积)
          • 内联接
      相关产品与服务
      云数据库 MySQL
      腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档