mysql中select 的题型_MYSQL经典题型详情解析

学完了mysql后发现有很多地方不是很明白,于是总结了mysql的经典题型,不论是工作还是面试,我相信还是有一定帮助的。

例题一

b964cd225bb42027061ebe48e5e4b75c.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

在我的数据库中数据如下(排序有些差别,但是不影响结果)

d61c1f34029e7fbf1614aede3a48149b.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

分析:分两步解答

1)查询除了学号外其他数据重复时显示小的学号id

select MIN(id) id from tbl_students group by name,sax,age(6,7不应该显示,4要有注意,如果不按年龄分组就没有4出现)

2fb1039eaf1b8ba67c617595d05485b3.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

2)最终答案如下(用到了子查询)

合并:delete from tbl_students

where id not in (select id from (select MIN(id) id from tbl_students group by name,sax) t )

扩展:

这个题型还有一点陷阱,初学者容易犯的两个错误

问题一:为什么这里需要加 别名t呢?

就是如果改成如下sql语句会怎么样呢?

delete from tbl_students

where id not in  (select id from (select MIN(id) id from tbl_students group by name,sax)  )

e68d1f07f73b6539aff545b095fe0320.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

提示:每个派生表都必须有自己的别名。

与子查询不同,派生表必须具有别名,以便稍后在查询中引用其名称(不了解派生表的自己网上查,有很多文章)。

问题二:如果这样写会怎么样呢?

delete from tbl_students

where id not in  (select MIN(id) id from tbl_students group by name,sax )

这样的话会报一个异常如下

9d80b57b3e66114efe3019ea45e3d7cb.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

就是不能为FROM子句中的更新指定目标表“tbl_students”

在MySQL中,你不能修改在选择部分中使用的同一个表。你需要停止使用嵌套子查询,或者在两个部分执行操作,或者使用简单的where子句clause子句。

总结:如果是查询操作不会引发我说的这两个问题,有兴趣的可以尝试更新时会不会引发上面的问题。

题型二:

(要求查询出参加考试的各科成绩都高于60分,不管参加了多少科考试)

就是只显示及格的科目:

74d509e486fab40e00d9f58a70510cbc.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

1.select username,score from tbl_score

where id not in (select id from tbl_score where score < 60)

扩展1:查询所有成绩都及格的学生

1)查出成绩不及格的学生名字

select  username  from tbl_score  where  score<60

030ed54d706612de16a246e9c484262e.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

结果:

select * from tbl_score where username not  in (select   username  from  tbl_score where score<60 )

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL数据库SELECT是用于从一个或多个表检索数据的关键字。SELECT查询表达式的基本语法如下: ```sql SELECT column1, column2, ... FROM table_name WHERE condition; ``` 其,column1、column2等为要检索的列名,可以使用通配符*代替所有列。table_name为要检索的表名,condition为可选的筛选条件。 在SELECT查询表达式,可以使用多种表达式来生成结果集。以下是一些常用的SELECT表达式: 1. 聚合函数:用于对结果集进行统计计算,例如SUM、COUNT、AVG、MAX、MIN等。 ```sql SELECT SUM(column_name) FROM table_name; ``` 2. 别名:用于为查询结果的列或表指定别名,以便更好的阅读和理解查询结果。 ```sql SELECT column_name AS alias_name FROM table_name; ``` 3. 子查询:嵌套在SELECT语句的查询语句,用于从子查询获取数据,然后在主查询使用它。 ```sql SELECT column_name FROM table_name WHERE column_name IN (SELECT column_name FROM table_name WHERE condition); ``` 4. 连接:用于将两个或多个表的数据合并到一个结果集,包括INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN等。 ```sql SELECT column_name FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name; ``` 5. 字符串函数:用于处理字符串数据,例如CONCAT、LENGTH、SUBSTRING、UPPER、LOWER等。 ```sql SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM table_name; ``` 6. 条件表达式:用于根据条件过滤结果集,例如IF、CASE等。 ```sql SELECT column_name, IF(column_name > 10, '大于10', '小于等于10') AS result FROM table_name; ``` 以上是MySQL数据库常用的SELECT查询表达式,可以根据实际需求选择使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值