SQL 查询结果排序+查询多个表

本文介绍了SQLCookbook中的知识点,包括orderby的使用、多列排序、处理空值、case语句、表间操作(union与unionall)、内外连接和全连接,以及LeetCode中的实际应用案例,展示了SQL在数据处理中的强大功能。
摘要由CSDN通过智能技术生成

前言

本文章是SQL Cookbook中文版 (莫利纳罗 著) 的读书笔记,本文章将书中提及到的知识用代码整合在一起并进行分析。

指定顺序返回查询结果

select 姓名,学校,数学
from grade
order by 学校 asc

注意最后一行,最后一行order by定义了查询结果的顺序,其中学校 asc指的是学校升序返回结果,同样的,desc 表示的是降序返回结果

多种顺序返回结果

select 姓名,成绩,性别
from student
order by 性别,成绩 desc

我们可以输入多种列,查询结果将会以优先级从前到后进行排序,就像这样:
数据库是由python随机生成的,没有任何真实个人信息

处理排序空值

有时候我们会遇到数据值为空(NULL)的情况,这个时候我们就需要对这些空值进行处理来解决空值所带来的查询结果影响。
在这里插入图片描述
这里通过为空值新增一列并进行标记、排序,将空值的显示变得可控。

根据数据项的键来排序

这里很好理解,就是具体问题具体分析。
在这里插入图片描述

case的使用总结

使用case语句,类似于switch-case语句,case=switch,when=case呈现出这种对应关系。
当条件符合的时候,程序执行then之后的语句
当条件均不符合的时候,程序执行else之后的语句
在条件结束的时候,记得在尾部加上end来注明结束判断

操作多个表

union

union可以把不同表的数据联合起来:
不使用union时:
在这里插入图片描述
使用union时:
在这里插入图片描述

union 和 union all的区别

union all不会筛选掉重复的项目,仅进行简单的拼合
而union则会筛选掉重复的项目
二者的区别就像是列表和集合的关系
使用union(上下的查询结果一致)的效果
使用union all 的效果

两个表之间的查找

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。意思上就是将两个表进行行比对,并返回两个表的交集(行相等)

交叉连接

和离散数学中的笛卡尔积原理相同,这里不再演示

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值