Sql(PG SQL)常见面试题一

本文深入探讨了SQL查询的高级技巧,包括如何筛选出所有课程成绩超过80分的学生姓名,如何去除学生信息表中的重复记录,以及如何将数据表转换为更易读的宽表格格式。同时,还介绍了如何复制和拷贝表结构及数据,以及更新表中特定字段的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

–1. 用一条SQL 语句 查询出每门课都大于80 分的学生姓名
name kecheng fenshu
张三 语文 81
张三 数学 75
李四 语文 76
李四 数学 90
王五 语文 81
王五 数学 100
王五 英语 90

CREATE TABLE data(
name text,
kecheng text,
fenshu int);

INSERT INTO data values(‘张三’, ‘语文’, 81);
INSERT INTO data values(‘张三’, ‘数学’, 75);
INSERT INTO data values(‘李四’, ‘语文’, 76);
INSERT INTO data values(‘李四’, ‘数学’, 90);
INSERT INTO data values(‘王五’, ‘语文’, 81);
INSERT INTO data values(‘王五’,‘数学’, 100);
INSERT INTO data values(‘李四’,‘英语’, 90);

way1:SELECT name FROM data GROUP BY name HAVING (min(fenshu))>80;

way2:SELECT DISTINCT name FROM data WHERE name NOT IN(SELECT DISTINCT name FROM data WHERE fenshu<80);

–2. 学生表 如下:
自动编号 学号 姓名 课程编号 课程名称 分数
1 2005001 张三 0001 数学 69
2 2005002 李四 0001 数学 89
3 2005001 张三 0001 数学 69
删除除了自动编号不同, 其他都相同的学生冗余信息

CREATE TABLE studenttable(
num int,
学号 int,
姓名 text,
课程编号 int,
课程名称 text,
score numeric);
INSERT INTO studenttable VALUES(1,2005001,‘张三’,0001,‘数学’,69);
INSERT INTO studenttable VALUES(2,2005002,‘李四’,0001,‘数学’,89),(3,2005001,‘张三’,0001,‘数学’,69);

DELETE FROM studenttable WHERE num not in (SELECT min(num) FROM studenttable GROUP BY (学号,姓名,课程编号,课程名称,score));

–3. 面试题:怎么把这样一个表儿
year month amount
1991 1 1.1
1991 2 1.2
1991 3 1.3
1991 4 1.4
1992 1 2.1
1992 2 2.2
1992 3 2.3
1992 4 2.4
查成这样一个结果
year m1 m2 m3 m4
1991 1.1 1.2 1.3 1.4
1992 2.1 2.2 2.3 2.4

CREATE TABLE hehe(
year INT,
month INT,
amount numeric);

INSERT INTO hehe VALUES(1991,1,1.1),(1991,2,1.2),(1991,3,1.3),(1991,4,1.4),(1992,1,2.1),(1992,2,2.2),(1992,3,2.3),(1992,4,2.4);
SELECT year,
(SELECT amount FROM hehe m WHERE month=1 AND hehe.year=m.year) m1,
(SELECT amount FROM hehe m WHERE month=2 AND hehe.year=m.year) m2,
(SELECT amount FROM hehe m WHERE month=3 AND hehe.year=m.year) m3,
(SELECT amount FROM hehe m WHERE month=4 AND hehe.year=m.year) m4
FROM hehe GROUP BY year;

  1. 说明:复制表( 只复制结构, 源表名:a新表名:b)
    CREATE TABLE haha2(LIKE hehe);

5.说明:拷贝表( 拷贝数据, 源表名:a目标表名:b)
CREATE TABLE b AS SELECT * FROM a;

6.有两个表A 和B ,均有key 和value 两个字段,如果B 的key 在A 中也有,就把B 的value 换为A 中对应的value
这道题的SQL 语句怎么写?
A
KEY VALUE
a 1
b 2
c 3
d 4

B
KEY VALUE
a 1
b 3
c 6
f 5

CREATE TABLE A(
key text,
value int);

CREATE TABLE B(
key text,
value int);

INSERT INTO A VALUES(‘a’,1),(‘b’,2),(‘c’,3),(‘d’,4);
INSERT INTO B values(‘a’,1),(‘b’,3),(‘c’,6),(‘f’,5);

key:
update b set value=a.value from a where a.key=b.key;

### MySQL 和 PostgreSQL常见面试问题对比 #### 关于 MySQL常见面试问题 1. **什么是事务?MySQL 中的 InnoDB 存储引擎是如何支持事务的?** - 事务是指组操作单元,这些操作要么全部成功,要么全部失败。InnoDB 支持 ACID 特性(原子性、致性、隔离性和持久性)。其中,持久性表示旦事务提交,其对数据库所做的修改将永久保存[^2]。 2. **如何优化超大数据量表的 CRUD 性能?** - 可以采用多种方法来提升性能,例如限定查询的时间范围、实施读写离策略、启用缓存机制以及通过表减少单表的压力[^3]。 3. **MySQL 的索引类型有哪些?它们的工作原理是什么?** - MySQL 提供了 B+树索引、哈希索引等多种类型的索引。B+树索引是最常用的,它能够快速定位数据并支持范围查询。 4. **如何解决深度页带来的性能瓶颈?** - 深度页可以通过延迟关联加载、使用覆盖索引或者预先计算总数等方式加以改进。 #### 关于 PostgreSQL常见面试问题 1. **pg_dump 工具的作用及其基本语法结构是什么?** - `pg_dump` 是用于创建 PostgreSQL 数据库逻辑备份的强大工具。它的典型命令形式为:`pg_dump -h host -U user -F custom -b -v -f dumpfile.backup dbname`,这允许用户指定主机、用户名以及其他选项来导出数据库到个自定义格式的文件中[^1]。 2. **PostgreSQL 如何实现高可用性和灾难恢复?** - PostgreSQL 使用流复制技术提供同步或异步备份数字副本的功能,从而保障系统的可靠运行和快速恢复能力。 3. **解释区表的概念,并说明何时应该使用区表设计?** - 区表是种物理存储上的划方式,可按列值布数据至多个子表上。适用于非常大的表格场景下提高查询效率和服务稳定性。 #### 开发者与数据库管理员视角下的差异关注点 对于开发者而言,更多关心的是SQL编写技巧、ORM映射框架的选择及调优等方面;而对于DBA来说,则更注重整体架构规划、容量管理、安全防护等领域内的深入理解。 ```sql -- 示例代码展示如何在 PostgreSQL 下创建个简单的区表 CREATE TABLE measurement ( city_id int not null, logdate date not null, peaktemp int, unitsales int ) PARTITION BY RANGE (logdate); CREATE TABLE measurement_y2022m07 PARTITION OF measurement FOR VALUES FROM ('2022-07-01') TO ('2022-08-01'); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值