数据库--SQL语言-1

练习网站:自学SQL网

Select 查询语法复习
SELECT column, another_column, …

FROM mytable

WHERE condition AND/OR another_condition AND/OR …;
操作符号:

如果属性是字符串, 我们会用到字符串相关的一些操作符号,其中 LIKE(模糊查询) 和 %(通配符) 需要重点学习。 

=完全等于 eg.col="abc"
!=or<>不等于
like没有用通配符等价于 =
not like没有用通配符等价于 !=
%通配符,代表匹配0个以上的字符
-和% 相似,代表1个字符
in 在列表
not in不在列表

注意通配符%、-的使用,前面不适用=,而要使用like

col_name LIKE "%AT%"
(matches "AT", "ATTIC", "CAT" or even "BATS") "%AT%" 代表AT 前后可以有任意字符

例如表格:

Table(表): movies
IdTitleDirectorYearLength_minutes
1Toy StoryJohn Lasseter199581
2A Bug's LifeJohn Lasseter199895
3Toy Story 2John Lasseter199993
4Monsters, Inc.Pete Docter200192
5Finding NemoFinding Nemo2003107
6The IncrediblesBrad Bird2004116
7CarsJohn Lasseter2006117
8RatatouilleBrad Bird2007115
9WALL-EAndrew Stanton2008104
10UpPete Docter2009101
11Toy Story 3Lee Unkrich2010103
12Cars 2John Lasseter2011120
13BraveBrenda Chapman2012102
14Monsters UniversityDan Scanlon2013110

 

  1. 【复杂条件】找到所有Toy Story系列电影 
    SELECT * FROM movies
    where Title like"Toy Story%";

    这里要使用like而不能使用 =

  2. 【复杂条件】找到所有John Lasseter导演的电影
  3. 【复杂条件】找到所有不是John Lasseter导演的电影
  4. 【复杂条件】找到所有电影名为 "WALL-" 开头的电影
  5. 【复杂条件】有一部98年电影中文名《虫虫危机》请给我找出来
2.
SELECT * FROM movies
where Director="John Lasseter";

3.
SELECT * FROM movies
where Director!="John Lasseter";
4.
SELECT * FROM movies
where Title like "WALL-%";
5.
SELECT * FROM movies
where year=1998;
 去重:DISTINCT

 DISTINCT 关键字来指定某个或某些属性列唯一返回,原理:DISTINCT 语法会直接删除重复的行

SELECT DISTINCT column, another_column, …
FROM mytable
WHERE condition(s);
结果排序:ORDER BY col_name 
SELECT column, another_column, …
FROM mytable
WHERE condition(s)
ORDER BY column ASC/DESC;

其中ASC是升序 ,DESC 降序

选取部分结果:Limit

LIMIT 和 OFFSET 子句通常和ORDER BY 语句一起使用,当我们对整个结果集排序之后,我们可以 LIMIT来指定只返回多少行结果 ,用 OFFSET来指定从哪一行开始返回

你可以想象一下从一条长绳子剪下一小段的过程,我们通过 OFFSET 指定从哪里开始剪,用 LIMIT 指定剪下多少长度。

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

 

task:

  1. 【结果排序】按导演名排重列出所有电影(只显示导演),并按导演名正序排列
  2. 【结果排序】列出按上映年份最新上线的4部电影
  3. 【结果排序】按电影名字母序升序排列,列出前5部电影
  4. 【结果排序】按电影名字母序升序排列,列出上一题之后的5部电影
  5. 【结果排序】如果按片长排列,John Lasseter导演导过片长第3长的电影是哪部,列出名字即可
1.
SELECT distinct Director FROM movies 
order by Director ASC;
2.
SELECT * FROM movies 
order by Year DESC limit 4;
3.
SELECT * FROM movies 
order by  Title ASC limit 5;
4.
SELECT * FROM movies 
order by  Title ASC  limit 5 offset 5;
5.
SELECT Title FROM movies 
where Director="John Lasseter"
order by  Length_minutes DESC 
limit 1 offset 2;

注意:offset 其实是从零开始排,如第五题出第三个,但需要offset2;

按片长排列,John Lasseter导演的电影
Title
Cars 2
Cars
A Bug's Life
Toy Story 2
Toy Story
SELECT Title FROM movies 
where Director="John Lasseter"
order by  Length_minutes DESC ;

但若加上最后一句,显示的是 Cars 2

SELECT Title FROM movies 
where Director="John Lasseter"
order by  Length_minutes DESC 
limit 1 offset 0;
查询综合练习:
Table(表): North_american_cities
CityCountryPopulationLatitudeLongitude
GuadalajaraMexico150080020.659699-103.349609
TorontoCanada279506043.653226-79.383184
HoustonUnited States219591429.760427-95.369803
New YorkUnited States840583740.712784-74.005941
PhiladelphiaUnited States155316539.952584-75.165222
HavanaCuba210614623.05407-82.345189
Mexico CityMexico855550019.432608-99.133208
PhoenixUnited States151336733.448377-112.074037
Los AngelesUnited States388430734.052234-118.243685
Ecatepec de MorelosMexico174200019.601841-99.050674
MontrealCanada171776745.501689-73.567256
ChicagoUnited States271878241.878114-87.629798

 

  1. 【复习】列出所有加拿大人的Canadian信息(包括所有字段)
  2. 【复习】列出所有在Chicago西部的城市,从西到东排序(包括所有字段)
  3. 【复习】用人口数population排序,列出墨西哥Mexico最大的2个城市(包括所有字段)
  4. 【复习】列出美国United States人口3-4位的两个城市和他们的人口(包括所有字段)

需要注意的地方都#啦

1.
SELECT * FROM north_american_cities
where Country="Canada";
#注意这里Canada是字符串要“ ”

2.
SELECT * FROM north_american_cities
where Longitude<
	(SELECT Longitude  FROM north_american_cities
    	where City="Chicago")
order by Longitude ASC
;#嵌套需要括号

3.
SELECT * FROM north_american_cities
where Country="Mexico"
order by population DESC
limit 2
;
4.
SELECT * FROM north_american_cities
where Country="United States"
order by population DESC
limit 2 offset 2
;#offset 2

 用JOINs进行多表联合查询:

连接INNER JOIN.:

主键(primary key): 一般关系数据表中,都会有一个属性列设置为 主键(primary key)。主键是唯一标识一条数据的,不会重复(想象你的身份证号码)。

借助主键(primary key)(当然其他唯一性的属性也可以),我们可以把两个表中具有相同 主键ID的数据连接起来(因为一个ID可以简要的识别一条数据,所以连接之后还是表达的同一条数据)(你可以想象一个左右连线游戏)。

INNER JOIN.:

SELECT column, another_table_column, …
FROM mytable (主表)
INNER JOIN another_table (要连接的表)
    ON mytable.id = another_table.id 
    (想象一下刚才讲的主键连接,两个相同的连成1条)
WHERE condition(s)
ORDER BY column, … ASC/DESC
LIMIT num_limit OFFSET num_offset;

INNER JOIN 先将两个表数据连接到一起. 两个表中如果通过ID互相找不到的数据将会舍弃。

其实就是数据库里面常说的连接啦。

INNER JOIN 可以简写做 JOIN. 两者是相同的意思

例题:

Table: Movies (Read-Only)

IdTitleDirectorYearLength_minutes
1Toy StoryJohn Lasseter199581
2A Bug's LifeJohn Lasseter199895
3Toy Story 2John Lasseter199993
4Monsters, Inc.Pete Docter200192

Table: Boxoffice (Read-Only)

Movie_idRatingDomestic_salesInternational_sales
58.2380843261555900000
147.4268492764475066843
88206445654417277164
126.4191452396368400000

 

  1. 【联表】找到所有电影的国内Domestic_sales和国际销售额
  2. 【联表】找到所有国际销售额比国内销售大的电影
  3. 【联表】找出所有电影按市场占有率rating倒序排列

【联表】每部电影按国际销售额比较,排名最靠前的导演是谁,国际销量多少

1.
SELECT  Domestic_sales,International_sales 
FROM movies
join Boxoffice on movies.id=Boxoffice.Movie_id
;#这个如果过不了得话,把select后面换为*
2.
SELECT  *
FROM movies
join Boxoffice on movies.id=Boxoffice.Movie_id
where Domestic_sales<International_sales 
;
3.
SELECT  *
FROM movies
join Boxoffice on movies.id=Boxoffice.Movie_id
order by Rating desc
;
4.
SELECT Director,International_sales
FROM movies
join Boxoffice on movies.id=Boxoffice.Movie_id
order by International_sales desc
limit 1
;#排名最靠前
外连接(OUTER JOINs)

INNER JOIN 只会保留两个表都存在的数据,意味着一些数据的丢失,在某些场景下会有问题.

于是就有了:左连接LEFT JOIN,右连接RIGHT JOIN 和 全连接FULL JOIN

#用LEFT/RIGHT/FULL JOINs 做多表查询
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;

ps:这些Join也可以写作 LEFT OUTER JOINRIGHT OUTER JOIN, 或 FULL OUTER JOIN, 和 LEFT JOINRIGHT JOIN, and FULL JOIN 等价.

 

LEFT JOIN 
RIGHT JOIN 

左外链接就是保留左边,右外链接就是保留右边,全链接就是都要 

例题:

Table: Employees (Read-Only)

RoleNameBuildingYears_employed
EngineerBecky A.1e4
EngineerDan B.1e2
EngineerSharon F.1e6
EngineerDan M.1e4

Table: Buildings (Read-Only)

Building_nameCapacity
1e24
1w32
2e16
2w20
  1. 【复习】找到所有有雇员的办公室(buildings)名字
  2. 【复习】找到所有办公室里的所有角色(包含没有雇员的),并做唯一输出(DISTINCT)
  3. 【难题】找到所有有雇员的办公室(buildings)和对应的容量
1.
SELECT  distinct Building
FROM   employees
where Years_employed>0
;#千万注意去重!!
2.
SELECT distinct Building_name, Role
FROM   Buildings 
left join employees on Building=Building_name
;#这个着重讲一下
3.
SELECT distinct Building_name, Capacity
FROM  employees 
left join Buildings on Building=Building_name
where Years_employed>0

ps:因为这个练习DB的限制,只可以用 LEFT JOIN来解决问题.

读第二题:找到所有办公室里的所有角色,不难看出我们是需要输出所有办公室的(输出结果应该如下图),所以Buildings (Read-Only)需要全部保存。即Buildings left join employees。

另外唯一输出(DISTINCT) :如果有【A,B】和【A,C】这两个算是不同的,都需要输出,

即distinct Building_name, Role (类似【 Building_name, Role】)

关于特殊关键字 NULLs:

 在数据库中,NULL表达的是 "无"的概念,或者说没有东西。而某个属性列是 NULL的情况, 这种特殊性会造成编写SQL的复杂性,所以没有必要的情况下,我们应该尽量减少 NULL的使用,让数据中尽可能少出现 NULL的情况。

如果某个字段你没有填写到数据库,很可能就会出现NULL 。所有一个常见的方式就是为字段设置默认值,比如 数字的默认值设置为0,字符串设置为 ""字符串. 但是在一些NULL 表示它本来含义的场景,需要注意是否设置默认值还是保持NULL。 (比如, 当你计算一些行的平均值的时候,如果是0会参与计算导致平均值差错,是NULL则不会参与计算).还有一些情况很难避免 NULL 的出现, 比如之前说的 outer-joining 多表连接,A和B有数据差异时,必须用 NULL 来填充。

NULL的查询:可以用IS NULL和 IS NOT NULL 来选在某个字段是否等于 NULL.

WHERE column IS/IS NOT NULL

例题:(前面的图)

  1. 【难题】找到还没有雇员的办公室 ✓
SELECT Building_name
FROM Buildings
left join employees on Building=Building_name
where Name is NULL 
;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/446562.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数理统计实验(四)】方差分析

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

FIT介绍-0

1、背景 FIT是flattened image tree的简称&#xff0c;它采用了device tree source file&#xff08;DTS&#xff09;的语法&#xff0c;生成的image文件也和dtb文件类似&#xff08;称做itb&#xff09;。 结构如下图&#xff1a; 其中image source file(.its)和device tree …

Midjourney绘图欣赏系列(八)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子&#xff0c;它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同&#xff0c;Midjourney 是自筹资金且闭源的&#xff0c;因此确切了解其幕后内容尚不…

【alibaba funAsr-0.1.9实时语音转文字部署(内外网】

alibaba funAsr-0.1.9实时语音转文字部署&#xff08;内外网&#xff09; 官方参考文档&#xff1a; https://github.com/alibaba-damo-academy/FunASR/blob/main/runtime/docs/SDK_advanced_guide_online_zh.md 前提&#xff1a; 我的内网服务器是华为欧拉&#xff0c;arm…

【Linux】shell理解及linux权限解读(“花花公子Root”的自由人生)

目录 1.shell外壳理解 1.1 什么是shell外壳&#xff1a; 1.2 为什么存在shell外壳程序&#xff1a; 1.3外壳程序的具体工作阶段是怎么样的&#xff1f;&#xff08;招实习生&#xff0c;工作失败也不影响公司&#xff09; 2.linux下的权限的概念 2.1linux的用户 2.2.文件类型和…

基于c#语言的股票模拟交易软件的开发与实现

基于C#语言的股票模拟交易软件&#xff08;资管软件/分仓软件&#xff09;的开发与实现是一个涉及多个技术领域的项目。以下是一个大致的开发流程和实现要点&#xff1a; 一、项目概述 股票模拟交易软件旨在提供一个虚拟的股票交易环境&#xff0c;让用户可以在没有真实资金投…

MySQL常见的存储引擎介绍

我将为您详细讲解 MySQL 常见的存储引擎&#xff0c;以及它们的使用场景、特点、区别和优势。MySQL 支持多种存储引擎&#xff0c;每种存储引擎都有其特定的优势和局限性。了解这些存储引擎的特点和适用场景对于选择合适的存储引擎以及优化数据库性能至关重要。 1. InnoDB 存储…

25改考408最新资讯!拷贝

东北大学 东北大学计算机考研全面改考408 东北大学计算机学院官网&#xff1a;http://www.cse.neu.edu.cn/6274/list.htm 东北大学计算机考研全面改考408 公告原文 东北大学计算机科学与工程学院关于调整2025年硕士研究生招生计算机科学与技术、计算机技术、人工智能专业初试…

AHU 算法分析 实验四 动态规划

实验四&#xff1a;动态规划 实验目的 • 理解动态规划的基本思想&#xff0c;理解动态规划算法的两个基本要素最 优子结构性质和子问题的重叠性质。 • 熟练掌握典型的动态规划问题。 • 掌握动态规划思想分析问题的一般方法&#xff0c;对较简单的问题能正确 分析&#x…

智慧公厕方案_智慧公厕解决方案_智慧公厕整体解决方案

一、什么是智慧公厕&#xff1f; 在现代城市化进程中&#xff0c;公共厕所是不可或缺的基础设施之一。然而&#xff0c;传统的公厕管理模式已经无法满足市民对高效、便捷厕所服务的需求。为了实现公共厕所的信息化管理&#xff0c;智慧公厕整体解决方案应运而生。智慧公厕具体…

查看pip当前关联python版本及位置

好久没用python了&#xff0c;把各种pip指向的环境忘光光啦&#xff0c;这里记录一下查看pip当前关联的python版本及位置的方法&#xff1a; pip -V结果&#xff1a; 我一般不用这个版本的python&#xff0c;去环境变量看了一下&#xff0c;原来是anaconda的Scripts自带pip&a…

Cisco Packet Tracer 模拟器实现一些交换机的基本配置

1. 内容 应用Cisco Packet Tracer 5.3搭建网络 应用Cisco Packet Tracer 5.3配置网络 通过不同的命令实现交换机的基本配置&#xff0c;包括交换机的各种配置模式、交换机的基本配置、交换机的端口配置。 2. 过程 2.1 打开软件 安装模拟器后打开如下&#xff1a; 图1 安装并…

揭秘数据中心幕后:从电力消耗到温度调控的策略

建设并运营数据中心并非简单的连接硬盘、通电和联网就可以&#xff0c;而是涉及复杂的硬件集成、能源管理、散热设计以及适应不断增长的数据处理和存储需求等诸多挑战。随着全球互联网的普及和AI技术的快速发展&#xff0c;数据中心的规模和能耗需求都在急剧增加。尤其是在电力…

找到零值点

clear clc close all fs200; t(1/200:1/200:30); signalsin(2*pi*0.1*t); LL1:1:length(t); figure(1) plot(LL,signal) zero_indices []; % 存储最靠近0的点的索引 start_indices []; % 存储开始点的索引 end_indices []; % 存储结束点的索引 for i 2:length(si…

Python算法(顺序查找/二分查找)

一。顺序查找法&#xff1a; 用途&#xff1a;主要用于查找无序的列表的某个元素 时间复杂度为O(n) 拓展&#xff1a;函数index&#xff08;&#xff09;运用的是顺序查找 二。二分查找法&#xff1a; 前提&#xff1a;被查找的列表顺序一定要是顺序的 用途&#xff1a;对…

软件测试 需求

文章目录 1. 需求1.1 什么是需求1.2 为什么要有需求1.3 测试人员眼中的需求1.4 如何深入理解需求 2. 测试用例的概念2.1 什么是测试用例2.2 为什么要有测试用例 3. 软件错误&#xff08;BUG&#xff09;的概念4. 开发模型和测试模型4.1 软件的生命周期4.2 瀑布模型&#xff08;…

SpringBoot集成netty实现websocket通信

实现推送消息给指定的用户 一、依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://m…

加密流量分类torch实践4:TrafficClassificationPandemonium项目更新

加密流量分类torch实践4&#xff1a;TrafficClassificationPandemonium项目更新 更新日志 代码已经推送开源至露露云的github&#xff0c;如果能帮助你&#xff0c;就给鼠鼠点一个star吧&#xff01;&#xff01;&#xff01; 3/10号更新 流量预处理更新 增加了基于splitCa…

加快代码审查的 7 个最佳实践

目录 前言 1-保持小的拉取请求 2-使用拉取请求模板 3-实施响应时间 SLA 4-培训初级和中级工程师 5-设置持续集成管道 6-使用拉取请求审查应用程序 7-生成图表以可视化您的代码更改 前言 代码审查可能会很痛苦软件工程师经常抱怨审查过程缓慢&#xff0c;延迟下游任务&…

Spring boot2.7整合jetcache 本地linkedhashmap缓存方案

好 上文 Spring boot2.7整合jetcache 远程redis缓存方案 我们讲完了 远程实现方案 本文 我们来说说 本地 jetcache解决方案 首先是 application.yml 在jetcache下加上 local:default:type: linkedhashmapkeyConvertor: fastjson我们技术用的 本地缓存 linkedhashmap 这里 我们…