第四天的学习内容
1、别名
MySQL别名
别名除了用于列名和计算字段外,SQL还允许给表名起别名。这样做有两个主要理由:
1、缩短SQL语句
2、允许在单挑SELECT语句中多次使用相同的表
在sql中,合理的使用别名可以让sql更容易写并且提高可读性。别名使用 as 来表示,可以分为表别名和列别名。
SQL最强大的功能之一就是能在数据查询的执行中联结(join)表。联结是利用SQL的 SELECT 能执行的最重要的操作,很好地理解联结及其语法是学习SQL的极为重要的部分。
https://www.2cto.com/database/201804/739851.html
https://blog.csdn.net/qq_41573234/article/details/80292959
代码:AS表别名
select id ,旧列名 as 新列名 from 表名;#列别名
select 列名 as 新列名 from 表名 新表名1,表名 新表名2;#列表都改名
表的别名只在执行查询的时候使用,并不在返回结果中显示;而列别名定义之后,将返回给客户端显示,显示的结果字段为字段列的别名。注意别名不能与其他表名冲突
2、表联结
这里我又复习了一遍第一天的基础知识,什么是关系型数据库。关系型数据库就是一类数据一个表,然后通过表与表之间的关系来查询要的信息。那么如何查询呢,第一步就是要先创建一个表联结。
所谓“ 联结 ”指的是数据表和本身,以及不同数据表之间的“ 联结关系 ”。常见的联结有自连接、自然连接、内连接、外联结、完全连接等等。
https://blog.csdn.net/qq_27825451/article/details/81326165
以下回答均基于上述网址,更详细例子的可以点进去看。
INNER JOIN适用于两个表或者是多个表有关系的情况
select * from TableA JOIN TableB on TableA.id=TableB.id
(1)内联结是很有必要的 (2)内联结因为有两个表,注意“ 完全限定名 ”的使用。(3)不要过多对三个及三个以上表使用内联结,会降低性能,而且连接表有最大数目限制,不同数据库不一样,可参考文档。
LEFT JOIN是外联结的一种。
外连接包括三种,分别是左外连接、右外连接、全外连接。对应代码LEFT/RIGHT/FULL OUTER JOIN,通常我们都省略OUTER关键字,写成LEFT/RIGHT/FULL JOIN。
select * from TableA left join TableB on TableA.id=TableB.id#左外联结
select * from TableA right join TableB on TableA.id=TableB.id#右外联结
select * from TableA full join TableB on TableA.id=TableB.id#全外联结
CROSS JOIN
概念:没有where条件的交叉连接将产生连接表所涉及的笛卡尔积。即TableA的行数*TableB的行数的结果集。
select * from TableA cross join TableB
自连接:
自连接查询,可以表示表中各列的层次关系。当所要查询的信息都出于同一个表,而又不能直接通过该表的各个列的直接层次关系得到最终结果的时候,那么应该考虑使用表的自连接查询。
http://www.cnblogs.com/Hadley-pu/p/sql_selfconnect.html
1 SELECT * FROM route R1, route R2
2 WHERE R1.stop=R2.stop;
UNION
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT
语句中的列的顺序必须相同。
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
这里是创建了一个表格并且插入了数据。注意每一条代码都要打分号隔开。不然会报错。int字符只能写数字不能写字母。数字写进去不需要用引号。
编写一个 SQL 查询,来删除 email 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。