几个sql题目

1 找到ppp表里面num最小的数,不能用min函数:

select top 1 num from ppp order by num;

如果用min函数到话,直接elect * from ppp where num=select Min(num) from ppp


2 选择表ppp2num重复的记录。

答: select * from ppp2 where num in(select num from ppp2 group by num having(count(num)>1))

<…… group by的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。 WHERE是在分组前(查询后)筛选数据;HAVING是在分组后筛选数据。

例如:
……>

        这里嵌套语句的意思,是按照num个数分组,多少个不同的num就分成多少组,然后找里面num重复的。count(*) 表示查找数据库里面一共多少行。count(列名)表示当前列名下面多少个属性,不管重复不重复。

        那么这里按照num分组后,每个组里都是相同num的,然后查询所有组里面有多个相同num的,也就是一个组里num列下有多于1个数据的,count(num)值>1的。内层sql找到num,然后外层查所有数据。



5) 3 写出复制表、拷贝表和四表联合的SQL语句。 

答:复制表(只复制结构,源表名:A,新表名:B): select * into B from A where 1=0   拷贝表(拷贝结构,源表名:A,新表名:B): select * into B from A  四表联查: select * from A,B,C,D where 关联条件

6)  

4     4 每一个部门的每个工种的工资最大值?

     select dept_id,job_cat,max(salary)from employee group by dept_id,job_cat; 


如果要从字符串“Hello world”中提取出“ello world”这样的结果,SQL语句: select lower(trim(‘H’from ‘Hello world’))from dual;


5.存储过程和函数的区别是什么?

答:存储过程是用户定义的一系列SQL语句的集合,涉及特定表或其他对象的任务,用户可以调用存储过程。而函数通常是数据库已定义的方法,它接受参数并返回某种类型的值,并且不涉及特定用户表。







### SQL 练习题与面试题 以下是几道经典的 SQL 练习题和面试题,涵盖了常见的业务场景和技术难点: --- #### 1. 查询每个班级各科成绩总和 通过 `CASE` 表达式实现按科目分类求和的功能。 ```sql SELECT class_no, SUM(CASE subject_no WHEN 1 THEN score ELSE 0 END) AS 语文, SUM(CASE subject_no WHEN 2 THEN score ELSE 0 END) AS 数学, SUM(CASE subject_no WHEN 3 THEN score ELSE 0 END) AS 英语 FROM ( SELECT class_no, st_no, NAME, subject_no, score FROM 班级信息表 c LEFT JOIN 成绩表 sc ON c.st_no = sc.stu_no ) m GROUP BY class_no; ``` 此查询展示了如何利用子查询和聚合函数完成多维度统计[^1]。 --- #### 2. 查询下一个月过生日的学生 使用 MySQL 的日期处理函数来筛选符合条件的数据。 ```sql SELECT s_id FROM student WHERE MONTH(s_birth) = MOD(MONTH(NOW()) + 1, 12); ``` 注意这里使用了 `MOD()` 函数解决月份跨年的情况[^2]。 --- #### 3. 将行转列为拼接字符串形式 假设有一张学生分数表 `t17_student_score`,需求是将学生的每门课的成绩按照指定格式拼接成一串字符。 ```sql SELECT student, CONCAT_WS(',', MAX(CASE WHEN subject = '语文' THEN CAST(score AS CHAR) END), MAX(CASE WHEN subject = '数学' THEN CAST(score AS CHAR) END), MAX(CASE WHEN subject = '英语' THEN CAST(score AS CHAR) END) ) AS scores_concatenated FROM t17_student_score GROUP BY student; ``` 上述方法适用于固定数量的列转换操作[^3]。 --- #### 4. 找到重复记录并标记其首次现位置 对于一张包含大量冗余数据的大表来说,找哪些条目存在副本以及它们第一次被录入的时间点非常重要。 ```sql WITH CTE_DuplicateCheck AS ( SELECT *, ROW_NUMBER() OVER(PARTITION BY column_to_check ORDER BY id ASC) rn FROM your_table_name ) SELECT * FROM CTE_DuplicateCheck WHERE rn > 1; ``` --- #### 5. 计算两个时间戳之间的差异天数 如果需要比较不同事件发生的具体间隔长度,则可以借助内置的时间差计算工具达成目标。 ```sql SELECT DATEDIFF('end_date', 'start_date') as days_diff; ``` --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值