用一條SQL 語句查詢xuesheng表每門課都大於80 分的學生姓名,這個是面試考sql的一個很是經典的面試題面試
查詢 xuesheng表每門課都大於80 分的學生姓名正則表達式
name | kecheng | score |
---|---|---|
張三 | 語文 | 81 |
張三 | 數學 | 73 |
李四 | 語文 | 86 |
李四 | 數學 | 90 |
王五 | 數學 | 89 |
王五 | 語文 | 88 |
王五 | 英語 | 96 |
若是不考慮學生的課程少錄入狀況(好比張三隻有2個課程,王五有3個課程)sql
SELECT name FROM xuesheng GROUP BY name HAVING MIN(score)> 80
若是考慮學生的課程數大於等於3的狀況spa
SELECT name FROM xuesheng GROUP BY name HAVING MIN(score)> 80 AND COUNT(kecheng)>=3
能夠用反向思惟,先查詢出表裏面有小於80分的name,而後用not in去除掉code
SELECT DISTINCT name FROM xuesheng WHERE name NOT IN (SELECT DISTINCT name FROM xuesheng WHERE score <=80);
學生表xueshengbiao 以下:自動編號 學號 姓名 課程編號 課程名稱 分數blog
autoid | id | name | kcid | kcname | score |
---|---|---|---|---|---|
1 | 2005001 | 張三 | 0001 | 數學 | 69 |
2 | 2005002 | 李四 | 0001 | 數學 | 89 |
3 | 2005001 | 張三 | 0001 | 數學 | 69 |
刪除除了自動編號不一樣, 其餘都相同的學生冗餘信息ci
DELETE t1 FROM xueshengbiao t1, xueshengbiao t2 WHERE t1.id = t2.id and t1.name = t2.name and t1.kcid = t2.kcid and t1.kcname = t2.kcname and t1.score = t2.score and t1.autoid < t2.autoid
若是隻是查詢出自動編號不一樣, 其餘都相同的學生冗餘信息,能夠用group by數學
SELECT * from xueshengbiao t1 WHERE t1.autoid NOT IN (SELECT MIN(autoid) as autoid FROM xueshengbiao GROUP BY id, name, kcid, kcname, score)
表名:student ,用sql查詢出「張」姓學生中平均成績大於75分的學生信息;table
name | kecheng | score |
---|---|---|
張青 | 語文 | 72 |
張華 | 英語 | 81 |
王華 | 數學 | 72 |
張青 | 物理 | 67 |
李立 | 化學 | 98 |
張青 | 化學 | 76 |
select * from student where name in (select name from student where name like '張%' group by name having avg(score) > 75);
在 SQL 中,通配符與 SQL LIKE 操做符一塊兒使用。SQL 通配符用於搜索表中的數據。在 SQL 中,可以使用如下通配符:select
通配符 | 描述 |
---|---|
% | 替代 0 個或多個字符 |
_ | 替代一個字符 |
[charlist] | 字符列中的任何單一字符 |
[^charlist]或[!charlist] | 不在字符列中的任何單一字符 |
**MySQL 中使用 REGEXP 或 NOT REGEXP 運算符 (或 RLIKE 和 NOT RLIKE) 來操做正則表達式 **
找出姓張和姓李的同窗, 用rlike實現匹配多個
-- 找出姓張和姓李的 select * from xuesheng where name in (select name from xuesheng where name rlike '[張李]' group by name having avg(score) > 75);
也能夠用 REGEXP,結合正則匹配
select * from xuesheng where name in (select name from xuesheng where name REGEXP '^[張李]' group by name having avg(score) > 75);
交流QQ羣:779429633