数据库基本操作习题

这是一系列关于数据库操作的习题,其中重点介绍了如何使用SQL查询找到那些描述不无聊且ID为奇数的电影,结果按等级rating排序,以提升电影院的用户体验。
摘要由CSDN通过智能技术生成

题⽬⼀:

编写⼀个 SQL 查询,查找Person 表中所有重复的电⼦邮箱。
示例:
+----+---------+
| Id | Email   |
+----+---------+
| 1  | a@b.com |
| 2  | c@d.com |
| 3  | a@b.com |
+----+---------+
根据以上输⼊,你的查询应返回以下结果:

+---------+
| Email   |
+---------+
| a@b.com |
+---------+

CREATE TABLE Person(
	Id INT,
	Email VARCHAR(10)
);

INSERT INTO Person(Id,Email) 
VALUES 
(1,'a@b.com'),
(2,'c@d.com'),
(3,'a@b.com');

SELECT email FROM Person GROUP BY email 
HAVING COUNT(Email)>1;

题目二:

这⾥有张World 表
+-----------------+------------+------------+--------------+---------------+
| name            | continent  | area       | population   |  gdp          |
+-----------------+------------+------------+--------------+---------------+
| Afghanistan     | Asia       | 652230     | 25500100     |20343000       |
| Albania         | Europe     | 28748      | 2831741      |12960000       |
| Algeria         | Africa     | 2381741    | 37100000     |188681000      |
| Andorra         | Europe     | 468        | 78115        |3712000        |
| Angola          | Africa     | 1246700    | 20609294     |100990000      |
+-----------------+------------+------------+--------------+---------------+
如果⼀个国家的⾯积超过300万平⽅公⾥,或者⼈⼝超过2500万,那么这个国家就是
⼤国家。
编写⼀个SQL查询,输出表中所有⼤国家的名称、⼈⼝和⾯积。
例如,根据上表,我们应该输出:
+--------------+-------------+--------------+
| name         | population  | area         |
+--------------+-------------+--------------+
| Afghanistan  | 25500100    | 652230       |
| Algeria      | 37100000    | 2381741      |
+--------------+-------------+--------------+
CREATE TABLE World(
	NAME VARCHAR(20),
	continent VARCHAR(10),
	AREA INT,
	population INT,
	gdp INT
);

INSERT INTO World(NAME,continent,AREA,population,gdp) 
VALUE
('Afghanistan','Asia',652230,25500100,20343000),
('Albania','Europe',28748,2831741,12960000),
('Albania','Africa',2381741,37100000,188681000),
('Andorra','Europe',468,78115,3712000),
('Angola','Africa',1246700,20609294,100990000);

SELECT NAME,population,AREA FROM world 
WHERE population>25000000 OR AREA>3000000;

题目三:

point 保存了⼀些点在 x 轴上的坐标,这些坐标都是整数。
写⼀个查询语句,找到这些点中最近两个点之间的距离。
+-----+
| x   |
+-----+
| -1  |
| 0   |
| 2   |
+-----+
最近距离显然是 '1' ,是点 '-1''0' 之间的距离。所以输出应该如下:
+---------+
| shortest|
+---------+
| 1       |
+---------+
注意:每个点都与其他点坐标不同,表 table 不会有重复坐标出现。
进阶:如果这些点在 x 轴上从左到右都有⼀个编号,输出结果时需要输出最近点对的
编号呢?
CREATE TABLE points(
	X INT
);

INSERT INTO points(X) VALUE (-1),(0),(2);

SELECT ABS(p1.x-p2.x) AS shortest FROM points p1,points p2 
WHERE p1.x<>p2.x ORDER BY shortest LIMIT 1;

题目四:

某城市开了⼀家新的电影院,吸引了很多⼈过来看电影。该电影院特别注意⽤户体验,专⻔有个 LED显示板做电影推荐,上⾯公布着影评和相关电影描述。

作为该电影院的信息部主管,您需要编写⼀个 SQL查询,找出所有影⽚描述为⾮boring (不⽆聊) 的并且 id 为奇数 的影⽚,结果请按等级 rating 排列。

例如,下表 cinema:
+---------+-----------+--------------+-----------+
| id      | movie 	  | description  | rating 	 |
+---------+-----------+--------------+-----------+
| 1       | War 	  | great 3D     | 8.9   	 |
| 2       | Science   | fiction      | 8.5   	 |
| 3       | irish	  | boring       | 6.2   	 |
| 4       | Ice song  | Fantacy      | 8.6   	 |
| 5       | House card| Interesting  | 9.1   	 |
+---------+-----------+--------------+-----------+
对于上⾯的例⼦,则正确的输出是为:

+---------+-----------+--------------+-----------+
| id      | movie 	  | description  | rating 	 |
+---------+-----------+--------------+-----------+
| 5       | House card| Interesting  | 9.1   	 |
| 1       | War 	  | great 3D     | 8.9   	 |
+---------+-----------+--------------+-----------+
CREATE TABLE cinema(
	id INT,
	movie VARCHAR(10),
	description VARCHAR(10),
	rating DOUBLE(3,1)
);

INSERT INTO cinema(id,movie,description,rating) 
VALUES
(1,'War','great 3D',8.9),
(2,'Science','fiction',8.5),
(3,'irish','boring',6.2),
(4,'Ice song','Fantacy',8.6),
(5,'House card','Interesting',9.1);

SELECT * FROM cinema WHERE MOD (id,2)=1 AND description != 'boring'
ORDER BY rating DESC;

题目五:

在表 orders 中找到订单数最多客户对应的 customer_number 。

数据保证订单数最多的顾客恰好只有⼀位。

表 orders 定义如下:
+-------------------+-----------+
| Column 			| Type	    |
+-------------------+-----------+
| order_number 	    | int 		|
| customer_number   | int	    |
| order_date 	    | date 		|
| required_date	    | date 		|
| shipped_date 		| date 		|
| status 			| char(15)  |
| comment 			| char(200) |
+-------------------+-----------+

样例输⼊

+--------------+-----------------+------------+---------------+-------------+--------+---------+
| order_number | customer_number | order_date | required_date |shipped_date | status | comment |
+--------------+-----------------+------------+---------------+-------------+--------+---------+
| 1 		   | 1 				 | 2017-04-09 | 2017-04-13 	  | 2017-04-12  | Closed | 		   |
| 2 		   | 2 				 | 2017-04-15 | 2017-04-20 	  | 2017-04-18  | Closed |         |
| 3 		   | 3 				 | 2017-04-16 | 2017-04-25 	  | 2017
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值