前言

在使用数据库的过程中,我们最常用到还是查询语句,即 select * from tablename, 这篇博客就通过具体的实例说明一下select语句的用法。

创建数据库及数据表

为了统一下面的查询语句,我这里给出语句,只需要复制然后在你的数据库中执行,就可以创建和笔者一样的数据库环境

create database mydb;//创建数据库
use mydb; //进入数据库

学生表. Student(Sno,Sname,Ssex,Sage,Sdept) Sno为主键;
说明:Sno 学号,Sname姓名,Ssex 性别,Sage 年龄,Sdept所在系

create table student
(sno int primary key,sname varchar(20),ssex nvarchar(1),sage tinyint,sdept varchar(40)
);
insert into student values(95001,'李敏勇','男',20,'CS');
insert into student values(95002,'刘晨','女',19,'IS');
insert into student values(95003,'王敏','女',18,'MA');
insert into student values(95004,'张立','男',18,'IS');
insert into student values(95005,'王敏','男',19,'IS');

课程表. Course(Cno,Cname,Cpno,Credeit) Cno为主键;
说明:Cno课程号,Cname 课程名,Cpno 先修课号,Credit学分

create table course
(cno int primary key,cname varchar(20),cpno int,credit int
);insert into course values(1,'数据库',5,4);
insert into course values(2,'数学',null,2);
insert into course values(3,'信息系统',1,4);
insert into course values(4,'操作系统',6,3);
insert into course values(5,'数据结构',7,4);
insert into course values(6,'数据处理',null,2);
insert into course values(7,'Pascal语言',6,4);

学生选修表. SC(Sno,Cno,Grade,Testtime) Sno,Cno,为主键;
说明:Sno 学号,Cno课程号,Grade成绩,Testtime 考试时间

create table sc
(sno int not null,cno int not null,grade decimal(10,2),testtime date,primary key (sno,cno)
);
insert into sc values (95001,1,92,'2017-6-20');
insert into sc values (95001,2,88,'2017-6-23');
insert into sc values (95001,3,88,'2017-6-26');
insert into sc values (95002,2,90,'2017-6-23');
insert into sc values (95002,3,80,'2017-6-26');
insert into sc values (95005,1,99,'2017-6-20');
insert into sc values (95005,2,95,'2017-6-23');
insert into sc values (95005,3,98,'2017-6-26');

条件查询 where 的使用

--1. 查询计算机系全体学生的姓名及年龄
select sname,sage from student;
--2. 查询所有年龄在20岁以下的学生姓名及其年龄
select sname,sage from student where sage<20;
--3. 查询年龄在20到23间(含20和23岁)的学生的姓名,系别及年龄
select sname,sdept,sage from student where sage>=20 and sage<=23;
--4. 查询年龄不在20到23间的学生的姓名,系别及年龄
select sname,sdept,sage from student where sage not between 20 and 23;
--5. 查询不是信息系(IS)和计算机系(CS)学生的姓名和性别
select sname,ssex from student where sdept not like 'IS' and sdept not like 'CS';
--6. 查询所有姓刘的学生的姓名,学号和性别
select sname,sno,ssex from student where sname like '刘%';
--7. 查询名字中含有”敏”字的学生姓名和学号
select sname,sno from student where sname like '%敏%';
--8. 查询全体学生情况,结果按所在系升序排列,同一系中的学生按年龄降序
select * from student order by sdept asc,sage desc;
--9. 查询学分为3分及以上且有先修课程的课程号、课程名
select cno,cname from course where credit >=3 and cpno is not null;
--10.查询选修了课程的学生学号
select distinct sno from sc ;

使用统计函数

sum:求和
avg :平均
count :统计个数
max : 求最大值
min :求最小值

--1. 查询学生的总人数
select count(sno) as '总人数' from student;--2. 查询选修了课程的学生人数
select count(distinct cno) as '选课人数' from sc;
--3. 计算选2号课程的学生平均成绩(提示:使用convert函数可以设置输出效果)
select convert(decimal(4,2),avg(grade)) as  '平均分' from sc where cno=2;
--4. 查询选修3号课程的学生最高分数
select max(grade) as '最高分' from sc where cno=3;
--5. 查看有选课记录的课程相应的选课人数
select cno as '课程号',count(sno) as '选课人数' from sc group by cno;
--6. 查询选修了课程的同学的选课数目、最高分
select sno as '学号',count(cno) '选课数目',max(grade) '最高分' from sc group by sno;

分组统计查询 group by的使用

--1、 查询选修了2门及以上课程的学生的学号和 平均成绩,并根据平均成绩升序排列。select sno as '学号',convert(decimal(4,2),avg(grade))as '平均成绩' from sc group by sno having count(sno)>=2 order by avg(grade) ;
--2、    查询各学分等级的课程数目select credit as 'credit',count(credit)as '该学分对应的课程数目' from course group by credit;
--3、    查询信息系(IS)男女生的人数select ssex as '性别',count(ssex) as '人数' from student where sdept = 'IS' group by ssex;
--4、    查询人数最多的系及人数select top 1 sdept as '系名',count(sdept) as '人数' from student group by sdept order by count(sdept) desc;
--5、查询选修“数据库”课程的学生的学号select sc.sno as '学号' from sc,course c where sc.cno =c.cno and c.cname='数据库';
--6、查询没有一门考试科目成绩低于86分的学生的姓名以及平均分select st.sname as '学生姓名',convert(decimal(5,2),avg(sc.grade)) as '平均分' from student st,sc where st.sno = sc.sno and st.sno not in(select distinct sno from sc where grade<=86 ) group by sname; 

连接查询 join


--1.     查询学生“李敏勇”,成绩大于80分的课程号、成绩
select sc.cno as '课程号',sc.grade as '成绩' from student st,sc where st.sno = sc.sno and st.sname='李敏勇' and grade>80;
--2.     查询选课表中每位学生的平均分,显示学生姓名和平均分(注意重名情况)
select st.sname,convert(decimal(4,2), avg(sc.grade)) from student st,sc where st.sno = sc.sno group by st.sno,st.sname;
--3.     查询选修“信息系统”课程的学生姓名
select sname as '姓名' from student st,sc,course c where st.sno = sc.sno and sc.cno = c.cno and c.cname = '信息系统';
--4.     查询至少有一门课程成绩大于90分的学生的姓名
select st.sname as '姓名'from student st,sc where st.sno = sc.sno and st.sno in(select sno from sc where grade>90 group by sno )group by st.sname;
--5.     查询数学考试超过75分的学生的总人数
select count(sname) as '数学成绩超过75分的人数' from student st,sc,course c where st.sno = sc.sno and sc.cno = c.cno and grade>75 and cname ='数学';
--6. 查询所有学生的成绩情况,显示的列名包括学生姓名、课程号、考试时间、成绩,注意结果集中也应包括未选修课程的学生。
select sname as '姓名',cno as '课程号',testtime as '考试时间',grade as '成绩'from student st left join sc on st.sno = sc.sno;
--7. 查询所有课程的成绩情况,显示的列名包括学生课程名称、学生学号、考试时间、成绩,注意结果集中也应包括未考试的课程。
select cname as '课程名称',sno as '学生学号',testtime as '考试成绩',grade as '成绩' from sc right join course on sc.cno = course.cno;
--8. 查询所有课程的选课情况,显示课程名、选课人数,如果没有人选,选课人数显示为0。
select cname as '课程名',count(sc.sno) as '选课人数' from course c left join sc on sc.cno =c.cno group by cname;
--9. 查询所有同学的选课情况,显示的列名包括学生姓名、课程名称、考试时间、成绩。
select sname as '学生姓名',cname as '课程名称',testtime as '考试时间',grade as '成绩'  from student st, sc,course c where st.sno = sc.sno and sc.cno = c.cno;
--10. 查询所在系相同的学生,显示的列名包括学生姓名、系名、相同系的学生姓名,剔除自己跟自己系相同的情况。
select st1.sname,st1.sdept,st2.sname from student st1,student st2 where st1.sdept=st2.sdept and st1.sname != st2.sname

【SQL学习】select语句使用实例相关推荐

  1. mysql数据库select语句用法_mysql学习笔记之完整的select语句用法实例详解

    本文实例讲述了mysql学习笔记之完整的select语句用法.分享给大家供大家参考,具体如下: 本文内容: 完整语法 去重选项 字段别名 数据源 where group by having order ...

  2. sql select 语句_学习SQL:SELECT语句

    sql select 语句 The SELECT statement is probably the most important SQL command. It's used to return r ...

  3. SQL update select语句

    SQL update select语句 最常用的update语法是: UPDATE <table_name> SET <column_name1> = <value> ...

  4. SQL的select 语句的执行顺序

    SQL的select 语句的执行顺序 标准SQL的解析顺序为: (1)from 子句, 组装来自不同数据源的数据 (2)where子句, 基于指定的条件对记录进行筛选 (3)group by 子句, ...

  5. mysql select语句详解_mysql学习笔记之完整的select语句用法实例详解

    本文实例讲述了mysql学习笔记之完整的select语句用法.分享给大家供大家参考,具体如下: 本文内容: 完整语法 去重选项 字段别名 数据源 where group by having order ...

  6. 史上最全SQL学习指南(教程+实例+练习题)

    报告称,未来10年数据细分岗位将扩张5倍,大数据19w的人才缺口将继续增加.国内外一线互联网公司纷纷开设了数据分析岗位. 数据分析岗位中用的最频繁的工具就是SQL了.不论是满足业务日常取数需求,还是自 ...

  7. SQL学习--Select(一)TOP、派生表、连接、谓词

    TOP关键字 1 select top 4 WITH TIES t.title,sum(s.qty)as totalSales from sales s 2 left join titles t on ...

  8. SQL嵌套SELECT语句精讲

    嵌套SELECT语句也叫子查询,形如: SELECT name FROM bbc WHERE region = (SELECT region FROM bbc WHERE name = 'Brazil ...

  9. SQL Server select语句执行顺序

    根据<Microsoft SQL Server2000 宝典>,Select语句的完整执行顺序: 1.from子句组装来自不同数据源的数据 2.where子句基于指定的条件对记录行进行筛选 ...

  10. 用sql的select语句从数据库中获取数据

    基本的select语句 select语句中的算数表达式和NULL值 列的别名 使用连接符操作,literal character strings,alternative quote operator, ...

最新文章

  1. 将功能绑定到Twitter Bootstrap Modal关闭
  2. html5怎么改变submit样式,html5中submit是按钮么
  3. Java 中访问路径的问题
  4. linux tomcat 改端口号,Ubuntu中Tomcat更改80端口
  5. oracle path函数,自定义类似 sys_connect_by_path 功能的函数
  6. 苏宁易购出售苏宁消费金融39%股权
  7. php上传文件测试代码,php 文件上传函数的超详细示例
  8. 气势汹涌,天津设立千亿级AI基金;刘强东否认会因AI开除一半员工
  9. linux 引导原理 pdf,linux深度开发原理.pdf
  10. paip.DEVSUIT WEB .NET ASPX网站打开慢的原因
  11. IP报文头详解以及定义
  12. eyoucms使用入门 二
  13. 做在线交易你必须知道的关于支付的知识
  14. 智能语义搜索引擎:一站式检索服务、打通数据壁垒、充分挖掘数据价值 | 百万人学AI评选
  15. python面向对象高级
  16. 卡尔曼滤波与组合导航原理_图解卡尔曼滤波器,无需深厚的数学知识也易懂(第五部分:多维卡尔曼滤波器)...
  17. Scrapy第十五篇:后起之秀-Playwright
  18. 关键字搜索软件_高效搜索神器,你选listary还是火柴?
  19. word文件中表格迁移到excel
  20. 一文讲解,Linux内核——Memory Barrier(内存屏障)

热门文章

  1. 1.深入浅出:理解三极管截止、放大和饱和状态!——参考《模拟电子技术基础》清华大学华成英主讲
  2. 起搏器可以用计算机吗,一个计算机化的心脏起搏器随诊系统
  3. vue读取Excel并分组处理数据显示
  4. 撰写论文时如何复制参考文献公式----Mathpix及Mathtype教程
  5. 《麻省理工公开课:线性代数》中文笔记来了!
  6. EDA实验:(DTTIMES)数字秒表的设计
  7. 【数据挖掘】数据挖掘简介及十大经典算法
  8. 模拟退火算法介绍和实例实现
  9. linux中rar文件包的解压方式
  10. 【问题求教】mapgis67文件转换失败