2021-03-03

SQL刷题

1:向学生表里添加数据

---自写答案
insert into studet(学号,姓名,出生日期,性别), ---错误1:后面不应该有,
values('001','张山','1995-09-10','男'),      ---错误2:后面不该是,而是;
values('002','王二','1995-01-23','男'),      ---错误3:每一次插入数据都要单独写insert语句
values('003','李四','1994-02-12','女'),

---正确答案
insert into student(学号,姓名,出生日期,性别)
values('1','shaw','2012-01-21','男');

insert into student(学号,姓名,出生日期,性别)
values('2','jason','2012-09-12','男');

2:简单的查询

---表结构
student:id,name,brith,sexy
score  : id,course,socres
course : c_id,c_name,t_id
teacher: t_id,t_name
---查找姓"肖"的学生名单
---查找姓名中最后一个字是"帅"的学生名单
---查找姓名中带"帅"的学生名单

---自写答案
select * from student where name like '^肖' ---like语句用%字符来表示任意字符
select * from student where name like '帅%'
select * from student where name like '*帅*'
---笔记
---1: like是模糊匹配,mysql里的正则匹配是regexp操作符
---2: sql提供四种匹配方式
---   <1>%:表示任意0个或多个字符,可匹配任意类型和长度的字符
---   <2>_:表示任意单个字符,指定一个字符,字符串或范围,要求所匹配对象为它们中的任一个
---   <3>[]:表示括号内所列字符中的一个
---   <4>[^]:表示不在括号所列之内的单个字符,其取值和[]相同。

---正确答案
select * from student where name like '肖%'
select * from student where name like '%帅'
select * from student where name like '%帅%'
select * from student where name regexp '^肖' ---正则写法
select * from student where name regexp '帅$'
select * from student where name regexp '帅'

引申内容:正则

^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。
$ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。
. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用像 '[.\n]' 的模式。
[...] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
[^...] 负值字符集合。匹配未包含的任意字符。例如, [^ abc ]可以匹配 "plain" 中的'p'。
p1|p2|p3 匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。

3:汇总分析
preview

---表结构
student:id,name,brith,sexy
score  : id,course,socres
course : c_id,c_name,t_id
teacher: t_id,t_name
---查询课程编号为'0002'的总成绩
---查询选了课程的学生人数
select sum(scores) from score 
where course = '0002'

select count(*) from score group by id ---错误
select count(distinct id) from score 

3:分组

---查询各科成绩最高和最低分
---查询每门课程被选修的学生数
---查询男生,女生人数

select course,max(score),min(score) from score group by course ---未取别名
select course,count(*) from score group by course              ---未取别名
select sexy,count(*) from student group by sexy                ---未取别名

4:分组结果的条件

---查询平均成绩大于60分学生的学号和平均成绩
select id,avg(score) avg_score
from score
group by id
having avg(score) >60

---查询至少选修两门课程的学生学号
select id,count(*) from score
group by id
having count(*) >=2

---查询同名同性学生名单并统计同名人数
select name,sexy,count(*)
from student
group by name,sexy
having count(*) >=2
---问题
---count(*)与count(字段)的区别?
---count(*)会返回全表的所有记录数,但是count(字段)只会返回字段不为NULL的记录数

---查询不及格的课程并按课程号从大到小排列
select course from score
where scores < 60
order by course desc

---查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列
select course,avg(scores)
from score
group by course
order by avg(scores),course desc  ---正序 asc,倒序 desc

---检索课程编号为 "0004"且分数小于60的学生学号,结果按分数降序排列
select id from
score
where course = '0004' and scores < 60
order by scores desc

---统计每门课程的学生选修人数(超过2人的课程才统计)
select course,count(id) as 'people'
from score
group by course
having count(id) >2
order by count(id) desc,course asc

---查询两门以上不及格课程的同学的学号及其平均成绩
select id,avg(scores),count(course)
from score
where scores < 60
group by id
having count(course) >2         ---可以直接使用count()来筛选过滤

5:汇总分析-查询结构排序,分组的指定条件

---查询学生的总成绩并进行排名
select id,sum(scores)
from score
group by id
order by sum(scores)

select a.id,a.score_total,row_number()over(order by a.score_total desc)rank
from
    (select id,sum(scores)score_total
    from
        score
    group by 
        id
    )a


---查询
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,884评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,212评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,351评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,412评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,438评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,127评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,714评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,636评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,173评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,264评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,402评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,073评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,763评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,253评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,382评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,749评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,403评论 2 358