# 自学SQL网题目解答与笔记

Id Title Director Year Length_minutes 1 Toy Story John Lasseter 1995 81 2 A Bug’s Life John Lasseter 1998 95 3 Toy Story 2 John Lasseter 1999 93 4 Monsters, Inc. Pete Docter 2001 92 5 Finding Nemo Finding Nemo 2003 107 6 The Incredibles Brad Bird 2004 116 7 Cars John Lasseter 2006 117 8 Ratatouille Brad Bird 2007 115 9 WALL-E Andrew Stanton 2008 104 10 Up Pete Docter 2009 101 11 Toy Story 3 Lee Unkrich 2010 103 12 Cars 2 John Lasseter 2011 120 13 Brave Brenda Chapman 2012 102 14 Monsters University Dan Scanlon 2013 110

Id Title Director Year Length_minutes 1 Toy Story John Lasseter 1995 81 2 A Bug’s Life John Lasseter 1998 95 3 Toy Story 2 John Lasseter 1999 93

Operator（操作符） Condition（解释） Example（例子） = Case sensitive exact string comparison (

)完全等于 col_name = “abc” != or <> Case sensitive exact string inequality comparison 不等于 col_name != “abcd” LIKE Case insensitive exact string comparison 没有用通配符等价于 = col_name LIKE “ABC” NOT LIKE Case insensitive exact string inequality comparison 没有用通配符等价于 != col_name NOT LIKE “ABCD” % Used anywhere in a string to match a sequence of zero or more characters (only with LIKE or NOT LIKE) 通配符，代表匹配0个以上的字符 col_name LIKE “%AT%” (matches “AT”, “ATTIC”, “CAT” or even “BATS”) “%AT%” 代表AT 前后可以有任意字符 _ Used anywhere in a string to match a single character (only with LIKE or NOT LIKE) 和% 相似，代表1个字符 col_name LIKE “AN_” (matches “AND”, but not “AN”) IN (…) String exists in a list 在列表 col_name IN (“A”, “B”, “C”) NOT IN (…) String does not exist in a list 不在列表 col_name NOT IN (“D”, “E”, “F”) Id Title Director Year Length_minutes 1 Toy Story John Lasseter 1995 81 2 A Bug’s Life John Lasseter 1998 95 3 Toy Story 2 John Lasseter 1999 93

DISTINCT 语法介绍，以Movies表为例，可能很多电影都是同一年Year发布的，如果想要按年份排重，一年只能出现一部电影到结果中， 可以用 DISTINCT 关键字来指定某个或某些属性列唯一返回。写作： DISTINCT Year

SELECT DISTINCT column, another_column, ...

FROM mytable
WHERE condition(s);


SELECT column, another_column, ...

FROM mytable WHERE condition(s)
ORDER BY column ASC/DESC;


ORDER BY col_name 这句话的意思就是让结果按照 col_name 列的具体值做 ASC升序 或 DESC 降序，对数字来说就是升序 1，2，3，… 或降序 … 3,2,1 . 对于文本列，升序和降序指的是按文本的字母序。

LIMITOFFSET 子句通常和 ORDER BY 语句一起使用，当我们对整个结果集排序之后，我们可以 LIMIT来指定只返回多少行结果 ,用 OFFSET来指定从哪一行开始返回。你可以想象一下从一条长绳子剪下一小段的过程，我们通过 OFFSET 指定从哪里开始剪，用 LIMIT 指定剪下多少长度。

limited查询

SELECT column, another_column, ...

FROM mytable
WHERE condition(s)
ORDER BY column ASC/DESC
LIMIT num_limit OFFSET num_offset;


Id Title Director Year Length_minutes 1 Toy Story John Lasseter 1995 81 2 A Bug’s Life John Lasseter 1998 95 3 Toy Story 2 John Lasseter 1999 93

Table(表）: North_american_cities

City Country Population Latitude Longitude Guadalajara Mexico 1500800 20.659699 -103.349609 Toronto Canada 2795060 43.653226 -79.383184 Houston United States 2195914 29.760427 -95.369803

SELECT column, another_table_column, ...

FROM mytable （主表）
INNER JOIN another_table （要连接的表）
ON mytable.id = another_table.id
WHERE condition(s)
ORDER BY column, ... ASC/DESC
LIMIT num_limit OFFSET num_offset;


Table: Movies

Id Title Director Year Length_minutes 1 Toy Story John Lasseter 1995 81 2 A Bug’s Life John Lasseter 1998 95 3 Toy Story 2 John Lasseter 1999 93

Table: Boxoffice

Movie_id Rating Domestic_sales International_sales 5 8.2 380843261 555900000 14 7.4 268492764 475066843 8 8 206445654 417277164 Id Title Director Year Length_minutes 1 Toy Story John Lasseter 1995 81 2 A Bug’s Life John Lasseter 1998 95 3 Toy Story 2 John Lasseter 1999 93

INNER JOIN 只会保留两个表都存在的数据（还记得之前的交集吗），这看起来意味着一些数据的丢失，在某些场景下会有问题.

SELECT column, another_column, ...

FROM mytable
INNER/LEFT/RIGHT/FULL JOIN another_table
ON mytable.id = another_table.matching_id
WHERE condition(s)
ORDER BY column, ... ASC/DESC
LIMIT num_limit OFFSET num_offset;


INNER JOIN 语法几乎是一样的. 我们看看这三个连接方法的工作原理：

Table: Employees

Role Name Building Years_employed Engineer Becky A. 1e 4 Engineer Dan B. 1e 2 Engineer Sharon F. 1e 6

Table: Buildings

Building_name Capacity 1e 24 1w 32 2e 16

Table: Employees

Role Name Building Years_employed Engineer Becky A. 1e 4 Engineer Dan B. 1e 2 Engineer Sharon F. 1e 6

Table: Buildings

Building_name Capacity 1e 24 1w 32 2e 16

Id Title Director Year Length_minutes 1 Toy Story John Lasseter 1995 81 2 A Bug’s Life John Lasseter 1998 95 3 Toy Story 2 John Lasseter 1999 93

Movie_id Rating Domestic_sales International_sales 5 8.2 380843261 555900000 14 7.4 268492764 475066843 8 8 206445654 417277164

SELECT
AGG_FUNC(column_or_expression) AS aggregate_description, ... FROM mytable
WHERE constraint_expression;


[En]

Here are some common statistical functions:

Function Description

column*

) 对column所有行取平均值.

GROUP BY 数据分组语法可以按某个col_name对数据进行分组，如： GROUP BY Year指对数据按年份分组， 相同年份的分到一个组里。如果把统计函数和 GROUP BY结合，那统计结果就是对分组内的数据统计了.
GROUP BY 分组结果的数据条数，就是分组数量，比如： GROUP BY Year，全部数据里有几年，就返回几条数据， 不管是否应用了统计函数.

SELECT
AGG_FUNC(column_or_expression) AS aggregate_description, ... FROM mytable
WHERE constraint_expression
GROUP BY column;


Table(表）: Employees 全表查看

Role Name Building Years_employed Engineer Becky A. 1e 4 Engineer Dan B. 1e 2 Engineer Sharon F. 1e 6

GROUP BY 分组语法中，我们知道数据库是先对数据做 WHERE，然后对结果做分组，如果我们要对分组完的数据再筛选出几条如何办？ （想一下按年份统计电影票房，要筛选出>100万的年份？）

SELECT group_by_column,
AGG_FUNC(column_expression) AS aggregate_result_alias, ... FROM mytable
WHERE condition
GROUP BY column
HAVING group_condition;


HAVINGWHERE 语法一样，只不过作用的结果集不一样. 在我们例子数据表数据量小的情况下可能感觉 HAVING没有什么用，但当你的数据量成千上万属性又很多时也许能帮上大忙 .

Table(表）: Employees 全表查看

Role Name Building Years_employed Engineer Becky A. 1e 4 Engineer Dan B. 1e 2 Engineer Sharon F. 1e 6

[En]

After introducing all the query-related grammars, let’s put all the previous grammars into one sentence.

SELECT DISTINCT
column,
AGG_FUNC(column_or_expression), ...

FROM mytable
JOIN another_table
ON mytable.column = another_table.column
WHERE constraint_expression
GROUP BY column
HAVING constraint_expression
ORDER BY column ASC/DESC
LIMIT count OFFSET COUNT;


Id Title Director Year Length_minutes 1 Toy Story John Lasseter 1995 81 2 A Bug’s Life John Lasseter 1998 95 3 Toy Story 2 John Lasseter 1999 93

Movie_id Rating Domestic_sales International_sales 5 8.2 380843261 555900000 14 7.4 268492764 475066843 8 8 206445654 417277164

Original: https://www.cnblogs.com/li-shui/p/16326714.html
Author: 理水
Title: 自学SQL网题目解答与笔记

(0)

### 大家都在看

• #### java 论坛模块设计方案

权限管理：点开二级菜单进入三级菜单显示 角色(基础权限)和按钮权限 角色(基础权限): 分角色组和角色,独立分配菜单权限和增删改查权限。（一个用户可以多个角色） 按钮权限: 给角色…

数据库 2023年6月6日
0119
• #### java面试题总结

数据库 2023年6月11日
0135
• #### python中的cls和self区别

self：Always use self for the first argument to instance methods self是作为类进行实例化传递的第一个参数，也就是我…

数据库 2023年6月6日
093
• #### Ajax

AJAX（Asynchronous Javascript And Xml） 传统请求及缺点 传统的请求都有哪些？ 直接在浏览器地址栏上输入URL。 点击超链接 提交form表单 使…

数据库 2023年6月14日
0144
• #### 数据库操作命令

MySQL Key Command 清屏 (滚屏 ) 登录 切换数据库 查看数据库 查看表 查看表结构 退出 帮助 Key Command 查看可用字符集 查看默认字符集 设置默认…

数据库 2023年5月24日
0121
• #### Python–生成器

学习生成器之前，首先需要认识列表生成式，直奔主题。 1、简单列表生成式示例： 看样子好像很NB的样子，其实它等价于： 其实还是有点NB的，毕竟代码少了，手动嘻嘻嘻！ 2、削微高级点…

数据库 2023年6月9日
0162
• #### HTTP状态码1XX深入理解

前段时间看了《御赐小仵作》，里面有很多细节很有心。看了一些评论都是：终于在剧里能够看到真正在搞事业、发了工资第一时间还钱的正常人了。我印象比较深的是王府才能吃上的葡萄。觉得非常合理…

数据库 2023年6月6日
0159
• #### MySQL数据库 DDL 阻塞问题定位 【转载】

陈臣，甲骨文MySQL首席解决方案工程师，公众号《MySQL实战》作者，有大规模的MySQL，Redis，MongoDB，ES的管理和维护经验，擅长MySQL数据库的性能优化及日常…

数据库 2023年5月24日
0156
• #### Golang异常处理

从error的定义说起 type error interface { Error() string } Go 的error类型是一个接口。在Go中，只要实现了接口约定的方法，就等同…

数据库 2023年6月16日
0122

孔个个MRR在5.6版本开始支持，相关文章不少。但是读起来层次感差了一些，在这里我用自己的理解重新整理了一版。这里参考了很多在网络上能找到的资料，才使我更全面的理解MRR，但时间有…

数据库 2023年6月16日
0116
• #### SNMP windows OIDs

Windows OID’ for CPU, Memory, Disk Utilization2007-10-31 11:03Windows CPU Utilizatio…

数据库 2023年6月11日
0137
• #### mysql常用操作汇总

工作中经常用会遇到这种情况，可以访问mysql所在的服务器，但是服务器端口不对外暴露（通常因为安全原因）。这时，操作数据库只能通过命令行和 mysql client窗口来实现。我对…

数据库 2023年5月24日
0137
• #### springboot~ApplicationContextAware与@Autowired注解

ApplicationContextAware是一个接口，它提供一个方法setApplicationContext，当spring注册完成之后，会把ApplicationConte…

数据库 2023年6月6日
0131
• #### 笔记-docker学习-2

继续之前的docker学习 16、 docker commit从容器创建一个新的镜像 OPTIONS说明： -a :提交的镜像作者； -c :使用Dockerfile指令来创建镜像…

数据库 2023年6月9日
0106
• #### Javascript中“==”与“===”的区别

在Javascript中有”==”和”===”两种比较运行符，那么他们有什么区别呢？ 一、对于string,number等基础类型，…

数据库 2023年6月9日
0140