数据库--SQL语言-1

news2024/11/16 19:02:10

练习网站:自学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 
;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

「CISP题库精讲」CISP题库习题解析精讲5道

前言 本节只要对CISP考试中的5道习题进行详细的讲解,时间比较少,敲多少道,就算多少道,反正全部也就1400多道。 习题部分 第一题 某企业内网中感染了一种依靠移动存储进行传播的特洛伊木马病毒,由于企业部署的杀毒软件,为了解决该病毒在企业内部传播,作为信息化负责人…

C++进阶之路---多态(二)

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、多态的原理 1.虚函数表 // 这里常考一道笔试题&#xff1a;sizeof(Base)是多少&#xff1f; class Base { public:…

Java怎么实现word转PDF?

问题背景 这其实源自于使用ES搜索word、pdf等文档的方案实现过程&#xff0c;出现了只能正确解析pdf却不能解析word内容的错误&#xff0c;于是折中方案何不直接把word转成pdf呢&#xff1f;word转pdf肯定是比pdf转word容易太多了。 实现方案 以下是针对多种Java环境下将Wor…

我用 Python 做了个小仙女代码蹦迪视频

前言 最近在B站上看到一个漂亮的仙女姐姐跳舞视频&#xff0c;循环看了亿遍又亿遍&#xff0c;久久不能离开&#xff01; 看着仙紫小姐姐的蹦迪视频&#xff0c;除了一键三连还能做什么&#xff1f;突发奇想&#xff0c;能不能把小仙女的蹦迪视频转成代码舞呢&#xff1f; 说…

Python 基于 OpenCV 视觉图像处理实战 之 背景知识

Python 基于 OpenCV 视觉图像处理实战 之 背景知识 目录 Python 基于 OpenCV 视觉图像处理实战 之 背景知识 一、简单介绍 二、人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09; 三、OpenCV 四、计算机视觉任务的主要类型 五、计算机视觉是通…

博客系统(SSM)

前端页面http://t.csdnimg.cn/zwKyG以上是之前写过的博客前端页面的内容&#xff0c;下面是通过SSM实现的后端内容。 目录 一.准备工作 1.1数据准备 1.2修改配置版本文件 1.3配置数据库 二.项目公共模块 2.1实体类 2.2操作数据库部分 三.功能开发 3.1博客列表 获取博…

确保电子设备稳定运行:晶振安装的详细检查方法

晶振的安装质量直接影响到电路的稳定性和可靠性&#xff0c;因此&#xff0c;检查晶振安装是否正确是非常重要的。下面&#xff0c;我们将介绍一些检查晶振安装是否正确的方法。 1. 检查晶振引脚的焊接质量 在检查晶振安装时&#xff0c;首先要确保晶振的引脚已经正确且牢固地…

stata中inlist2命令(划分区域的简洁命令)

inlist2 首先在stata命令框中输入ssc install inlist2,replace与传统的inlist命令相比&#xff0c;第一是没有字符串个数限制&#xff0c;第二是不用加引号。 常见的划分区域的stata命令 1.最原始的做法 gen area1 if province"北京市"|province"天津市"…

PolarDN的MISC题目:01,0和255详细过程

一、0和255 题目给了俩个文件&#xff0c;一个.txt,一个.py .txt文件中包含0和255 一个字节有八位&#xff0c;每一位只能储存1或0&#xff0c;计算机只懂二进制&#xff0c;所以就是2的八次方&#xff0c;又计算机规定从0开始计数&#xff0c;所以是0至255 考虑用编码转换工…

美团发布VisionLLaMA,为视觉生成和理解提供新基线

在人工智能领域&#xff0c;统一的模型架构对于简化模型设计、提高模型效率以及促进跨领域应用具有重要意义。近年来&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;在处理文本输入方面取得了显著的进展&#xff0c;其中基于变换器&#xff08;Tra…

Leetcode笔记——二叉树的迭代遍历

中序遍历&#xff1a; 定义一个 保存中间量的栈 和一个 结果数组 1. 模板写法 注释版&#xff1a; 背诵版&#xff1a; 前序遍历 1. 中 右 左 的顺序遍历 2. 模板写法&#xff0c;按中 左 右 的顺序遍历 后序遍历 1. 模板写法&#xff0c;按左 右 中 的顺序遍历 注释版&am…

Anaconda 的一些配置

Anaconda 安装及修改环境默认位置 https://blog.csdn.net/qq_54562136/article/details/128932352 最重要的一步&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;改文件夹权限 Anaconda创建、激活、退出、删除虚拟环境 修改pip install 默认安装路径

鸿蒙Harmony应用开发—ArkTS声明式开发(模态转场设置:全屏模态转场)

通过bindContentCover属性为组件绑定全屏模态页面&#xff0c;在组件插入和删除时可通过设置转场参数ModalTransition显示过渡动效。 说明&#xff1a; 从API Version 10开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 不支持横竖屏切换。…

智能合约开发基础知识:最小信任机制、智能合约、EVM

苏泽 大家好 这里是苏泽 一个钟爱区块链技术的后端开发者 本篇专栏 ←持续记录本人自学两年走过无数弯路的智能合约学习笔记和经验总结 如果喜欢拜托三连支持~ 专栏的前面几篇详细了介绍了区块链的核心基础知识 有兴趣学习的小伙伴可以看看http://t.csdnimg.cn/fCD5E关于区块…

Redis高可用之哨兵模式和集群模式

Redis高可用 Redis哨兵高可用 概述 sentinel哨兵是特殊的redis服务&#xff0c;不提供读写服务&#xff0c;主要用来监控redis实例节点。 哨兵架构下client端第一次从哨兵找出redis的主节点&#xff0c;后续就直接访问redis的主节点 不会每次都通过sentinel代理访问redis的主…

Java开发从入门到精通(一):Java的基础语法项目案例

Java大数据开发和安全开发 Java 案例练习案例一:买飞机票案例二:开发验证码案例三:评委打分案例四:数字加密案例五:数组拷贝案例六: 抢红包案例七:找素数案例八:模拟双色球[拓展案例] Java 案例练习 案例一:买飞机票 分析: 方法是需要接收数据?需要接收机票原价、当前月份、舱…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:外描边设置)

设置组件外描边样式。 说明&#xff1a; 从API Version 11开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 outline outline(value: OutlineOptions) 统一外描边样式设置接口。 卡片能力&#xff1a; 从API version 11开始&#xff0c;该…

仿牛客网项目---Elasticsearch分布式搜索引擎

1.什么是ElasticSearch分布式搜索引擎&#xff1f; Elasticsearch是一个开源的分布式搜索引擎&#xff0c;提供实时的、高可用性的搜索和分析解决方案。它支持快速索引和搜索大规模数据&#xff0c;具有分布式架构、RESTful API、基于JSON的查询语言等功能&#xff0c;适用于各…

Asp .Net Web Forms 系列:配置图片防盗链的几种方法

通过 URL Rewrite Module 组件 URL Rewrite Module 是一个用于在 ASP.NET Web Forms 或其他基于 IIS 的 Web 应用程序中重写 URL 的强大工具。这个模块允许你将复杂的、不易于记忆或不利于搜索引擎优化的 URL 转换为更简洁、更友好的格式。通过 URL 重写&#xff0c;你可以提高…

Upload 上传(图片/文件),回显(图片),下载(文件)

1.前端技术&#xff1a;V3 Ant Design Vue 2.后端技术&#xff1a;Java 图片上传/回显&#xff1a; 文件上传回显&#xff1a; 表结构&#xff1a;单文件/图片上传为A表对文件C表 &#xff08;A表field字段 对应 C表id字段&#xff09; 如图&#xff1a;A表中的 vehicle_d…