前言
本文章是SQL Cookbook中文版 (莫利纳罗 著) 的读书笔记,本文章将书中提及到的知识用代码整合在一起并进行分析。
指定顺序返回查询结果
select 姓名,学校,数学
from grade
order by 学校 asc
注意最后一行,最后一行order by
定义了查询结果的顺序,其中学校 asc
指的是学校
升序返回结果,同样的,desc
表示的是降序返回结果
多种顺序返回结果
select 姓名,成绩,性别
from student
order by 性别,成绩 desc
我们可以输入多种列,查询结果将会以优先级从前到后进行排序,就像这样:
处理排序空值
有时候我们会遇到数据值为空(NULL)的情况,这个时候我们就需要对这些空值进行处理来解决空值所带来的查询结果影响。
这里通过为空值新增一列并进行标记、排序,将空值的显示变得可控。
根据数据项的键来排序
这里很好理解,就是具体问题具体分析。
case的使用总结
使用case语句,类似于switch-case语句,case
=switch
,when
=case
呈现出这种对应关系。
当条件符合的时候,程序执行then
之后的语句
当条件均不符合的时候,程序执行else
之后的语句
在条件结束的时候,记得在尾部加上end
来注明结束判断
操作多个表
union
union可以把不同表的数据联合起来:
不使用union时:
使用union时:
union 和 union all的区别
union all不会筛选掉重复的项目,仅进行简单的拼合
而union则会筛选掉重复的项目
二者的区别就像是列表和集合的关系
两个表之间的查找
sql外连接方法
链接: 175. 组合两个表
外连接包含三个方向:
左外连接,left (outer) join
结果表中除了匹配行外,还包括左表有而右表中不匹配的行,对于这样的行,右表选择列置为null。
右外连接,right (outer) join
结果表中除了匹配行外,还包括右表有而左表中不匹配的行,对于这样的行,左表选择列置为null。
全连接, full (outer) join
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
作者:m08082309
链接:https://leetcode.cn/problems/combine-two-tables/solutions/389185/sql-lian-jie-liang-ge-biao-by-m08082309-w/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
简单来说,外连接就是将一个表(左或右)定为主表,查询结果保留主表,并将没有查询结果的值赋值为NULL
代码示例
链接:183. 从不订购的客户
/* Write your T-SQL query statement below */
select c.name as 'Customers'
from Customers c left join Orders o
on (c.id=o.customerId)
where o.customerId is null
sql内连接
内连接,(inner) join。意思上就是将两个表进行行比对,并返回两个表的交集(行相等)
交叉连接
和离散数学中的笛卡尔积原理相同,这里不再演示