「这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战」
作为一个服务端程序,写sql 也是日常任务,今天复习下sql的谓语,也就是连接词,废话不多说,走起
说重点: SQL中 Join 是纵向,union是横向
一、 SQL JOINS用于在两个或多个表中查询。
INNER JOIN: 当两个表至少存在一个匹配项时返回行。 语法规则:
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
LEFT JOIN: 即使在右表中没有匹配,仍返回左表中的所有行(返回左表中的所有行,以及右表中的匹配行)。 语法规则:
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
RIGHT JOIN: 即使在左表中没有匹配,仍返回右表中的所有行(返回右表中的所有行,以及左表中的匹配行)。
SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
FULL JOIN: 返回左表和右表中的所有行,即使两表没有匹配项。
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName
二、UNION用于连接两个或多个SELECT语句
每一个SELECT语句需要返回相同的列数,每列的数据类型要相同。
UNION: 返回连接查询的结果时,去掉重复值。
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
UNION ALL: 返回所有查询结果。
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name
exists和in的区别
exists和in的用法对于SQL来说,大多数情况下都是逻辑上等价的;但是在执行效率上有较大差异。 举例来说,in是判断一个集合中是否存在满足条件的元素,in如果数据库内部不做优化的话要遍历整个集合; 而exists则不然,只要它找到匹配的,就意味着存在,就停止返回。当涉及表的数据量很大时,效率差异较大。
总结
搬砖不易,努力搬砖,打好基础,减轻工作量