数据库--SQL语言-1

练习网站:自学SQL网

Select 查询语法复习
SELECT column, another_column, …FROM mytableWHERE 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_citieswhere 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_tableON 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.mzph.cn/news/737864.shtml

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

相关文章

day04-Maven-SpringBootWeb入门

文章目录 01. Maven1.1 课程安排1.2 什么是Maven1.3 Maven的作用1.4 Maven模型1.5 Maven仓库1.6 Maven安装1.6.1 下载1.6.2 安装步骤 2 IDEA集成Maven2.1 配置Maven环境2.1.1 当前工程设置2.1.2 全局设置 2.2 创建Maven项目2.3 POM配置详解2.4 Maven坐标详解2.5 导入Maven项目 …

【axios】你的进度条准确吗

1、axios监听进度 上传和下载操作在前端中是非常常见的&#xff0c;当我们想知道上传或下载的进度时也不难&#xff0c;axios已经实现了监听进度的方法 import axios from axios// 上传请求 axios.post(/api/v1/upload, {data: xxx},{// onUploadProgress回调可以获取进度onU…

mysql 常用命令

1、显示锁的时间 show status like innodb_row_lock%;2、锁一行的方法 //开启 begin; //锁一行 select * from tbl_user where name 1aa1 for update;//解锁 commit;3、设置不自动提交 set autocommit 0; //自动提交 set autocommit 1;4、查看是否支持profile show vari…

2 月 Web3 游戏行业动态

作者&#xff1a;stellafootprint.network 数据来源&#xff1a;区块链游戏研究页面 - Footprint Analytics 2024 年 2 月&#xff0c;区块链游戏领域在加密货币价格上涨和活跃用户激增的推动下&#xff0c;实现了显著增长。然而&#xff0c;行业在维持用户参与度和留存率方面…

NodeJS实现线性查找算法

NodeJS实现线性查找算法 以下是使用 Node.js 实现线性搜索算法的示例代码&#xff1a; function linearSearch(arr, target) {for (let i 0; i < arr.length; i) {if (arr[i] target) {return i; // 如果找到目标&#xff0c;返回索引}}return -1; // 如果未找到目标&am…

微服务配置中心

什么是配置中心 配置中心是一种用于管理应用程序或系统配置信息的中央服务。它允许开发人员在多个环境&#xff08;如开发、测试、生产&#xff09;之间共享配置&#xff0c;并且可以在不停止应用程序的情况下动态更新配置。 配置中心是统一管理各种应用配置的工具。它能够集中…

【Ubuntu】原生Ubuntu-dock 栏 安装与卸载

1.查看是否安装 Ubuntu-dock&#xff08;新版本的Ubuntu自带Ubuntu-dock version> 18.04&#xff09; gnome-extensions list 2.安装Ubuntu-dock sudo apt install gnome-shell-extension-ubuntu-dock 3.重启&#xff0c;一定要重启&#xff01;&#xff01;&#xff01;…

LeetCode2.07链表相交

2.07链表相交 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结…

vue实现图片框选标注

前言 前端有一个需求&#xff0c;对上传的图片进行检测识别&#xff0c;通过返回的接口坐标数据&#xff0c;对图片的某些区域进行框选并标注。如图&#xff1a; 开始 1、上传功能使用elementui的upload插件&#xff1b; 2、在图片上进行标注功能是元素定位在图片上层&#x…

Java - 探究Java优雅退出的两种机制

文章目录 概述Java优雅停机_ ShutdownHook 机制步骤Code Java优雅停机_ 信号量机制SignalHandler 工作原理使用步骤Linux支持的信号量根据操作系统选择信号量Code 注意事项 概述 在Linux上通过kill -9 pid方式强制终止进程的副作用&#xff0c;这种方式虽然简单高效&#xff0…

小红书素人投放计划怎么做?

小红书素人投放是很多品牌在小红书推广打响的第一枪&#xff0c;素人铺量在小红书投放&#xff0c;可以奠定品牌在小红书的声量&#xff0c;小红书素人投放计划怎么做&#xff1f;前期规划好一切&#xff0c;才能在后期让我们的推广爆发出更好的效果。接下来伯乐网络传媒就来给…

【压缩包技巧】如何把rar文件压缩为zip格式?

想要将rar文件压缩为zip格式&#xff0c;其实就是压缩包格式进行转换&#xff0c;今天和大家分享三个rar压缩包改成zip格式的方法&#xff0c;希望能够帮助到大家&#xff01; 方法一&#xff1a; 直接修改rar压缩包的后缀名变为zip&#xff0c;就可以修改压缩包文件格式了 …

揭秘Google Gemini:AI界的多模态革命者与ChatGPT-4的较量

在人工智能的快速发展浪潮中&#xff0c;Google DeepMind的最新力作——Gemini&#xff0c;以其多模态的超凡能力&#xff0c;正引领着AI技术的新一轮革命。本文将深入探讨Gemini的核心特性、不同版本的特点&#xff0c;以及它与ChatGPT-4的对比优势和差异。 一、Gemini简介 A…

float32 float16 bfloat16 推理训练GPU速度和内存调研

概念&#xff1a; 参考&#xff1a;Accelerating Large Language Models with Mixed-Precision Techniques - Lightning AI 3种数量类型表示的数据范围不一样&#xff0c;以float32为例其中有1个符号位&#xff0c;8位表示指数&#xff0c;23位表示尾数 标准训练推理是用的fl…

eclipse maven 项目导入报错

错误&#xff1a;Internal compiler error: java.lang.NullPointerException at org.eclipse.jdt.internal.compiler.apt.dispatch.AnnotationDiscoveryVisitor 环境&#xff1a;eclipse Kepler Service Release 2 ,JDK1.7 解决办法&#xff1a;编码不对&#xff0c;修改

指令调用模板

也就是这边指令通过id和map会定位到一个结构体&#xff0c;然后这个结构再赋值两个成员&#xff0c;一个是函数一个是指令类型&#xff0c;然后这个函数是模板的实例化 使用的时候就传进去&#xff0c;这只是参数&#xff0c;最开始初始化的时候模板就已经实例化了。然后关于模…

为什么美国硅谷作为服务器托管的首选地?

在数字化时代&#xff0c;服务器托管已成为企业运营不可或缺的一部分。而美国硅谷作为全球科技创新的摇篮&#xff0c;其服务器托管服务备受全球企业青睐。那么&#xff0c;为什么众多企业选择美国硅谷作为服务器托管的首选地呢? 硅谷拥有得天独厚的地理位置和网络基础设施。硅…

[HackMyVM]Quick 2

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 (Un…

若依框架的使用

文章目录 1,前端2,后端3,数据库4,测试 1,前端 2,后端 3,数据库 4,测试

Vision Transformers的注意力层概念解释和代码实现

2017年推出《Attention is All You Need》以来&#xff0c;transformers 已经成为自然语言处理(NLP)的最新技术。2021年&#xff0c;《An Image is Worth 16x16 Words》&#xff0c;成功地将transformers 用于计算机视觉任务。从那时起&#xff0c;许多基于transformers的计算机…