查询基础练习

练习一:

<学生信息表>:students(学号,姓名,性别,出生年,省份,入学年份,班级)

<学生选修信息表>:stucourses(学号,课程号,课程名称,分数)
一、单表查询
、查询<学生信息表>,查询学生张三的全部基本信息
、查询<学生信息表>,查询学生张三和李四的基本信息
、查询<学生信息表>,查询姓张学生的基本信息
、查询<学生信息表>,查询姓名中含有四字的学生的基本信息
、查询<学生信息表>,查询姓名长度为三个字,姓李,且最后一个字是强的全部学生信息
、查询<学生信息表>,查询姓张或者姓李的学生的基本信息
、查询<学生信息表>,查询姓张并且所属省份是北京的学生信息
、查询<学生信息表>,查询所属省份是北京、新疆、山东或者上海的学生的信息
、查询<学生信息表>,查询姓张,但是所属省份不是北京的学生信息
、查询<学生信息表>,查询全部学生信息,并按照性别排序,性别相同的情况下按照所属省份排序,所属省份相同的情况下再按照班级排序(多列排序)
、查询<学生信息表>,查询现有学生都来自于哪些不同的省份
、查询<学生选修信息表>,查询没有填写成绩的学生的学号、课程号和成绩
、查询<学生选修信息表>,查询全部填写了成绩的学生的选修信息,并按照成绩从高到低进行排序

二、聚合函数
、统计<学生信息表>,统计共有多少个学生
、统计<学生信息表>,统计年龄大于20岁的学生有多少个
、统计<学生信息表>,统计入学时间在1980年至1982年的学生人数
、统计<学生选修信息表>,统计学号为s001的学生的平均成绩
、统计<学生选修信息表>,统计学号为s001的学生的总成绩
、统计<学生选修信息表>,查询课程号为C001的课程的最高成绩
、统计<学生信息表>,查询所有学生中的最大年龄是多少

三、分组查询
、统计<学生选修信息表>,统计每个课程的选修人数
、统计<学生选修信息表>,统计每个同学的总成绩
、统计<学生信息表>,统计每个班级中每种性别的学生人数,并按照班级排序
、统计<学生选修信息表>,统计每门课程的平均成绩,并按照成绩降序排序
、统计<学生选修信息表>,显示有两门以上课程不及格的学生的学号
、统计<学生信息表>,统计每个班级中的最大年龄是多少

四、嵌套查询
、用子查询实现,查询选修高等数学课的全部学生的总成绩
、用子查询实现,统计<学生选修信息表>,显示学号为s001的学生在其各科成绩中,最高分成绩所对应的课程号和成绩(思考:如果该学号学生有两个课程分数都为最高的100分,查询会有什么结果)
、用子查询实现,查询2班选修数据库技术课的所有学生的成绩之和
、用子查询实现,查询3班张三同学的测试管理成绩

五、联接查询
、查询张三的各科考试成绩,要求显示姓名、课程号和成绩
、查询张三的各科考试成绩中,哪科没有记录考试成绩,要求显示姓名、课程号和成绩
、查询3班张三的测试管理成绩,要求显示姓名、成绩
、查询所有2000年以前入学的,各班男生的各科考试平均成绩
一、单表查询
-----1、查询<学生信息表>,查询学生张三的全部基本信息
select * from students where 姓名 = '张三';

-----2、查询<学生信息表>,查询学生张三和李四的基本信息
select * from students where 姓名 = '张三' or 姓名 = '李四';

-----3、查询<学生信息表>,查询姓张学生的基本信息
select * from students where 姓名 like '张%';

-----4、查询<学生信息表>,查询姓名中含有四字的学生的基本信息
select * from students where 姓名 like '%四%';

-----5、查询<学生信息表>,查询姓名长度为三个字,姓李,且最后一个字是强的全部学生信息
select * from students where 姓名 like '李_强%';

-----6、查询<学生信息表>,查询姓张或者姓李的学生的基本信息
select * from students where 姓名 like '张%' or 姓名 like '李%';

-----7、查询<学生信息表>,查询姓张并且所属省份是北京的学生信息
select * from students where 姓名 like '张%'and 省份 = '北京';

-----8、查询<学生信息表>,查询所属省份是北京、新疆、山东或者上海的学生的信息
select * from students where 省份 in ('北京','新疆','山东','上海');

-----9、查询<学生信息表>,查询姓张,但是所属省份不是北京的学生信息
select * from students where 姓名 like'张%' and 省份 != '北京';    --表示不等于也可以使用<> 

-----10、查询<学生信息表>,查询全部学生信息,并按照性别排序,性别相同的情况下按照所属省份排序,所属省份相同的情况下再按照班级排序(多列排序)
select * from students order by 性别,省份,班级;

-----11、查询<学生信息表>,查询现有学生都来自于哪些不同的省份
select distinct 省份 from students;

-----12、查询<学生选修信息表>,查询没有填写成绩的学生的学号、课程号和成绩
select * from stucourses where 成绩 is null;

-----13、查询<学生选修信息表>,查询全部填写了成绩的学生的选修信息,并按照成绩从高到低进行排序
select * from stucourses where 成绩 is not null order by 成绩 desc;

二、聚合函数
-----1、统计<学生信息表>,统计共有多少个学生
select count(*) as 学生数 from students;

-----2、统计<学生信息表>,统计年龄大于20岁的学生有多少个
';

-----3、统计<学生信息表>,统计入学时间在1980年至1982年的学生人数
';

-----4、统计<学生选修信息表>,统计学号为s001的学生的平均成绩
select avg(成绩) as s001的平均成绩 from stucourses where 学号 = 's001';

-----5、统计<学生选修信息表>,统计学号为s001的学生的总成绩
select sun(成绩) as s001的总成绩 from stucourses where 学号 = 's001';

-----6、统计<学生选修信息表>,查询课程号为C001的课程的最高成绩
select max(成绩) as C001的最高成绩 from  stucourses where 课程号 = 'C001';

-----7、统计<学生信息表>,查询所有学生中的最大年龄是多少
select min(出生年) as 最大年龄的出生年 from students;

三、分组查询
-----1、统计<学生选修信息表>,统计每个课程的选修人数
select 课程号,count(学号) from stucourses group by 课程号;

-----2、统计<学生选修信息表>,统计每个同学的总成绩
select 学号,sum(分数) from stucourses group by 学号;

-----3、统计<学生信息表>,统计每个班级中每种性别的学生人数,并按照班级排序
select 班级,性别,count(学号) from students group by 班级,性别 order by 班级;

-----4、统计<学生选修信息表>,统计每门课程的平均成绩,并按照成绩降序排序
select 课程号,avg(分数) from stucourses group by 课程号 order by 分数 desc;

-----5、统计<学生选修信息表>,显示有两门以上课程不及格的学生的学号
select 学号 from stucourses group by 学号 

-----6、统计<学生信息表>,统计每个班级中的最大年龄是多少
select 班级,max(年龄) from students group by 班级;

四、嵌套查询
-----1、用子查询实现,查询选修高等数学课的全部学生的总成绩
select sum(分数) from stucourses where 课程名称 = '高等数学';

-----2、用子查询实现,统计<学生选修信息表>,显示学号为s001的学生在其各科成绩中,最高分成绩所对应的课程号和成绩(思考:如果该学号学生有两个课程分数都为最高的100分,查询会有什么结果)
select 课程号,max(分数) from stucourses where 学号 = 's001'; 

-----3、用子查询实现,查询2班选修数据库技术课的所有学生的成绩之和          [=some/in]
select sum(分数) from stucourses where 课程名称 = '数据库技术'and 学号 = any(select 学号 from students where 班级 = '2班' );

-----4、用子查询实现,查询3班张三同学的测试管理成绩
select 分数 from stucourses where 课程名称 = '测试管理' and 学号 =
(select 学号 from students where 班级 = '3班'and  姓名 = '张三');

五、联接查询
-----1、查询张三的各科考试成绩,要求显示姓名、课程号和成绩
select st.姓名,sc.课程号,sc.分数
from students st,stucourses sc
where st.学号 = sc.学号 and st.姓名 = '张三'; 

-----2、查询张三的各科考试成绩中,哪科没有记录考试成绩,要求显示姓名、课程号和成绩
select st.姓名,sc.课程号,sc.分数
from students st,stucourses sc
where st.学号 = sc.学号 and st.姓名 = '张三' and sc.分数 is null;

-----3、查询3班张三的测试管理成绩,要求显示姓名、成绩
select st.姓名,sc.分数
from student st,stucourses sc
where st.学号 = sc.学号 and sc.课程名称 = '测试管理'
and st.姓名 = '张三' and st.班级 = '3班';

-----4、查询所有2000年以前入学的,各班男生的各科考试平均成绩
select st.班级,sc.课程名称,avg(分数)
from students st,stucourses sc
'
group by st.班级,sc.课程名称; 

练习二:

<职工表>:employee(id,name,department,job,email,password)

<培训表>:train(courseid,id,course,grade)
、统计出各部门的人数和各部门姓李的人数,用一条SQL语句完成
、列出所有员工参加培训的情况,要求显示ID、Name、Department、Course,用一条SQL语句完成
、筛选出未参加培训的人员名单,按职工表的格式显示,用一条SQL语句完成
、列出所有各课成绩最高的员工信息,要求显示ID、Name、Department、Course、Grade,用一条SQL语句完成
、统计列印各门课程成绩各分数段人数:课程ID,课程名称,[100-85],[84-70],[69-60],[<60]
、按各科不及格率的百分数从低到高和平均成绩从高到低顺序,统计并列印各科平均成绩和不及格率的百分数: (用于分析哪门课程难) 课程ID,课程名称,平均成绩,不及格百分数
-----1、统计出各部门的人数和各部门姓李的人数,用一条SQL语句完成
select count(name),
,) = '李'
  end)
from employee e
group by department;
-----或
select v1.d1,v1.c1,v2.c2
from
(select department d1,count(id) c1
from employee
group by department) v1
left outer join
(select department d2,count(id) c2
from employee
where name like '李%'
group by department) v2
on v1.d1 = v2.d2;

-----2、列出所有员工参加培训的情况,要求显示ID、Name、Department、Course,用一条SQL语句完成
select e.id,e.name,e.department,t.course
from employee e,train t
where e.id = t.id(+);
-----或
select e.id,e.name,e.department,t.course
from employee e left outer join train t
on e.id = t.id;

-----3、筛选出未参加培训的人员名单,按职工表的格式显示,用一条SQL语句完成
select * from employee
where id  not in(select id from train);

-----4、列出所有各课成绩最高的员工信息,要求显示ID、Name、Department、Course、Grade,用一条SQL语句完成
select e.id,e.name,e.department,t.course,max(grade)
from employee e,train t
where e.id = t.id
and t.grade in (select max(grade) from train group by course);
group by t.course;
-----或
select  t.course, e.id, e.name, e.department, t.grade
from employee e, (select course,max(grade) m from train group by course) h,train t
where e.id =t.id and (t.course = h.course and t.grade = h.m); 

-----5、统计列印各门课程成绩各分数段人数:课程ID,课程名称,[100-85],[84-70],[69-60],[<60]
-----方法一:
) ) ) ) <60的人数
from
train t0,
(  group by course,courseid) t1,
(  group by course,courseid) t2,
(  group by course,courseid) t3,
( group by course,courseid) t4
where t0.courseid = t1.courseid(+)
and t0.courseid = t2.courseid(+)
and t0.courseid = t3.courseid(+)
and t0.courseid = t4.courseid(+);

-----方法二:
select courseid 课程ID,course 课程名称,
    ,
    ,
    ,

from train
group by courseid,course;

-----方法三:
select courseid 课程ID,course 课程名称,
   ,
   ,
   ,

from train
group by courseid,course;

-----方法四:
select distinct courseid,course,
(  ,
(  ,
(  ,
(
from train t
group by courseid,course order by courseid;

-----6、按各科不及格率的百分数从低到高和平均成绩从高到低顺序,统计并列印各科平均成绩和不及格率的百分数: (用于分析哪门课程难) 课程ID,课程名称,平均成绩,不及格百分数
select t1.courseid 课程ID,t1.course 课程名称,t1.a 平均成绩,t2.b/t3.c 不及格率
from
(select courseid,course,avg(grade) a
from train
group by courseid,course) t1,
(select courseid,course,count(grade) b
from train

group by courseid,course) t2,
(select courseid,course,count(courseid) c
from train
group by courseid,course) t3
where t1.courseid = t2.courseid and t2.courseid = t3.courseid
order by t2.b/t3.c,t1.a desc;

SQL查询(一)的更多相关文章

  1. SQL常见优化Sql查询性能的方法有哪些?

    常见优化Sql查询性能的方法有哪些? 1.查询条件减少使用函数,避免全表扫描 2.减少不必要的表连接 3.有些数据操作的业务逻辑可以放到应用层进行实现 4.可以使用with as 5.使用“临时表”暂 ...

  2. 记一个简单的sql查询

    在我们做各类统计和各类报表的时候,会有各种各样的查询要求.条件 这篇主要记录一个常见的统计查询 要求如下: 统计一段时间内,每天注册人数,如果某天没有人注册则显示为0 现在建个简单的表来试试 建表语句 ...

  3. Oracle常用SQL查询(2)

    三.查看数据库的SQL 1 .查看表空间的名称及大小 select  t.tablespace_name,  round ( sum (bytes / ( 1024 * 1024 )), 0 ) ts ...

  4. MySQL GROUP_CONCAT函数使用示例:如何用一个SQL查询出一个班级各个学科第N名是谁?

    如何用一个SQL查询出一个班级各个学科第N名是谁? 首先贴出建表语句,方便大家本地测试: -- 建表语句 CREATE TABLE score ( id INT NOT NULL auto_incre ...

  5. SQL查询第m条到第n条的方法

    SQL查询第m条到第n条的方法 如表名为GOOD Sselect top (n-m) * from GOODS where (某一列名) not in (select top m (某一列名) fro ...

  6. Thinkphp查询 1.查询方式 2.表达式查询 3.快捷查询 4.区间查询 5.组合查询 6.统计查询 7.动态查询 8.SQL 查询

    1.使用字符串作为条件查询 $user = M('User'); var_dump($user->where('id=1 AND user="蜡笔小新"')->sele ...

  7. slick for play 使用原生sql查询以及拼接sql

    在play中用函数式框架slick来操作数据库是一件很爽的事情.但有时因为某些特殊场景又不得不用原生的sql了. 还好slick支持这种写法,可以看看slick官方文档,Slick Plain SQL ...

  8. SQL查询每个表的字段数量

    --SQL查询每个表的字段数量select b.[name], count(*) As AllCount,ISNULL(ISNULL(sum(case when isnullable=0 then 1 ...

  9. SQL查询关于相对路径、矢代、绝对路径、递归、计算列的速度对比跟优化-SOD群记录

    1秒查原本递归的查询. 适用于:上下级.多层查询 -- Get childs by parent id WITH Tree AS ( SELECT Id,ParentId FROM dbo.Node ...

  10. ThinkPHP(3)SQL查询语句

    ThinkPHP中对查询语句,包含了基本的查询方式.表达方式.快速查询.区间查询.组合查询.SQL查询.动态查询和子查询. 一.查询方式 ThinkPHP提供了三种基本的查询方式:字符串条件查询.索引 ...

随机推荐

  1. java web开发问题集合

    前台和后台的交流到底是借助什么?servlet?xml? 我们能感觉到用servlet,但是我们是如何使用servlet的?不是现在web.xml部署后,才能触发吗?所以其实我们是本质是借助XML文件 ...

  2. php中count获取多维数组长度的方法

    转自:http://www.jb51.net/article/57021.htm 本文实例讲述了php中count获取多维数组长度的实现方法.分享给大家供大家参考.具体分析如下: 先来看看下面程序运行 ...

  3. vi总结

    vi常用命令整理 ★命令模式 移动光标 h 或 向左方向键(←) → 光标向左移动一个字元 j 或 向下方向鍵(↓) → 光标向下移动一个字元 k 或 向上方向鍵(↑) → 光标向上移动一个字元 l ...

  4. Ajax 学习之动态获取,返回服务器的值

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  5. 最短路(Floyd_Warshall) POJ 2240 Arbitrage

    题目传送门 /* 最短路:Floyd模板题 只要把+改为*就ok了,热闹后判断d[i][i]是否大于1 文件输入的ONLINE_JUDGE少写了个_,WA了N遍:) */ #include <c ...

  6. 苹果应用商店DNS修改加快下载速度

    具体方法:依次点击进入[设置]→[无线局域网]→[WiFi网络右侧小i图标]→更改DNS地址,可以按照自身需求选择以下某个DNS进行更换. OpenDNS:208.67.222.222和208.67. ...

  7. ubuntu下新建用户的终端不显示当前路径,不能用上下光标键得到使用过的命名解决办法

    这几天我装ubuntu10.10,xubuntu12.04创建新用户的时候,总会遇到这个问题 就是打开终端的时候,没有路径了,即:xxx@xxx:~$ 找了很久,最后找到了(http://www.os ...

  8. BZOJ2738: 矩阵乘法

    Description 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. Input 第一行两个数N,Q,表示矩阵大小和询问组数: 接下来N行N列一共N*N个数,表示这个矩阵: ...

  9. MySQL索引分析与优化

    1.MySQL能够在name的索引中查找“Mike”值,然后直接转到数据文件中相应的行,准确地返回该行的 peopleid(999).在这个过程中,MySQL只需处理一个行就可以返回结果.如果没有“n ...

  10. MatLab GUI Load .mat File 导入mat文件

    在MatLab中,我们用GUI时,有时候需要导入mat格式的图片,但是在GUI中调用load和在命令行里调用load不一样,在命令行里调用load('im.mat'),加载进去是uint8的矩阵,但是 ...