JOIN 有两种连接类型:内连接和外连接 。
内连接又称等值连接,使用 INNER JOIN 关键字 。在没有条件语句的情况下返回笛卡尔积 。
自连接可以看成内连接的一种,只是连接的表是自身而已 。
自然连接是把同名列通过 = 测试连接起来的,同名列可以有多个 。
内连接 vs 自然连接
内连接提供连接的列,而自然连接自动连接所有同名列 。
外连接返回一个表中的所有行,并且仅返回来自次表中满足连接条件的那些行,即两个表中的列是相等的 。外连接分为左外连接、右外连接、全外连接(MySQL 不支持) 。
左外连接就是保留左表没有关联的行 。
右外连接就是保留右表没有关联的行 。
连接 vs 子查询
连接可以替换子查询,并且比子查询的效率一般会更快 。

文章插图
内连接(INNER JOIN)
SELECT vend_name, prod_name, prod_priceFROM vendors INNER JOIN productsON vendors.vend_id = products.vend_id;自连接SELECT c1.cust_id, c1.cust_name, c1.cust_contactFROM customers c1, customers c2WHERE c1.cust_name = c2.cust_nameAND c2.cust_contact = 'Jim Jones';自然连接(NATURAL JOIN)SELECT *FROM ProductsNATURAL JOIN Customers;左连接(LEFT JOIN)SELECT customers.cust_id, orders.order_numFROM customers LEFT JOIN ordersON customers.cust_id = orders.cust_id;右连接(RIGHT JOIN)SELECT customers.cust_id, orders.order_numFROM customers RIGHT JOIN ordersON customers.cust_id = orders.cust_id;组合(UNION)- UNION 运算符将两个或更多查询的结果组合起来,并生成一个结果集,其中包含来自 UNION 中参与查询的提取行 。
- UNION 基本规则
- 所有查询的列数和列顺序必须相同 。
- 每个查询中涉及表的列的数据类型必须相同或兼容 。
- 通常返回的列名取自第一个查询 。
- 默认会去除相同行,如果需要保留相同行,使用 UNION ALL 。
- 只能包含一个 ORDER BY 子句,并且必须位于语句的最后 。
- 应用场景
- 在一个查询中从不同的表返回结构数据 。
- 对一个表执行多个查询,按一个查询返回数据 。
SELECT cust_name, cust_contact, cust_emailFROM customersWHERE cust_state IN ('IL', 'IN', 'MI')UNIONSELECT cust_name, cust_contact, cust_emailFROM customersWHERE cust_name = 'Fun4All';JOIN vs UNION- JOIN vs UNION
- JOIN 中连接表的列可能不同,但在 UNION 中,所有查询的列数和列顺序必须相同 。
- UNION 将查询之后的行放在一起(垂直放置),但 JOIN 将查询之后的列放在一起(水平放置),即它构成一个笛卡尔积 。
注意:不同数据库的函数往往各不相同,因此不可移植 。本节主要以 Mysql 的函数为例 。文本处理

文章插图
其中, SOUNDEX() 可以将一个字符串转换为描述其语音表示的字母数字模式 。
SELECT *FROM mytableWHERE SOUNDEX(col1) = SOUNDEX('Apple')日期和时间处理- 日期格式:YYYY-MM-DD
- 时间格式:HH:MM:SS

文章插图
mysql> SELECT NOW();2018-4-14 20:25:11数值处理
文章插图
汇总

文章插图
AVG() 会忽略 NULL 行 。
使用 DISTINCT 可以让汇总函数值汇总不同的值 。
SELECT AVG(DISTINCT col1) AS avg_colFROM mytable六、排序和分组ORDER BY- ORDER BY 用于对结果集进行排序 。
- ASC :升序(默认)
- DESC :降序
- 可以按多个列进行排序,并且为每个列指定不同的排序方式
SELECT * FROM productsORDER BY prod_price DESC, prod_name ASC;GROUP BY- GROUP BY 子句将记录分组到汇总行中 。
- GROUP BY 为每个组返回一个记录 。
- GROUP BY 通常还涉及聚合:COUNT,MAX,SUM,AVG 等 。
- GROUP BY 可以按一列或多列进行分组 。
- GROUP BY 按分组字段进行排序后,ORDER BY 可以以汇总字段来进行排序 。
推荐阅读
- 上饶也有一处洞天福地——神农源景区
- 前端测试框架Jest——语法篇
- 分类算法其实也可做回归分析——以knn为例
- 什么是杜比全景声——沉浸式环绕声?
- 今日头条算法原理—— 3分钟了解今日头条推荐算法原理
- 开淘宝店必备的软件 手机淘宝开店软件哪个最好用
- 2020年最值得阅读的十本程序员书
- 医保卡——如何提现、如何使用?
- 网络程序员的一款“军刀”Postman
- 关于Java并发工具,90%的程序员需要了解的那些技术栈
