单表查询

先分别创建三个表

mysql> create table S(
    -> sno varchar(10) not null, sname varchar(20),dept varchar(20),age int,sex char(4)
    -> );
Query OK, 0 rows affected

mysql> create table C(
    -> cno varchar(10) not null, cname varchar(20), cpno varchar(10),credit int
    -> );
Query OK, 0 rows affected

mysql> create table SC(
    -> sno varchar(10) not null, cno varchar(10) not null, score decimal
    -> );
Query OK, 0 rows affected

给三个表输入如下信息

学生表-S

学号SNO姓名SName系部Dept年龄Age性别Sex
200512李勇计算机系20
200518刘晨计算机系19
200018王敏数学系18
200511杨扬物理系20
200510张立信息系19
200513张立物理系19
200514王点点信息系19
200012欧阳雨数学系20
200515刘依依数学系23

在这里插入图片描述
课程表-C

课程号CNo课程名CName前修课程Cpno学分Credit
c01数据库原理c034
c02信息系统c014
c03数据结构null6
c04DB_设计co13

在这里插入图片描述
成绩表-SC

学号SNo课程号CNo成绩Score
200512c0270
200512c03null
200512c04null
200515c0180
200518c0395
200018c0180
200518c0245
200511c0278
200511c0145
200511c0389
200514c0278
200514c0145
200514c0389
200514c0478

在这里插入图片描述

数据检索的语句格式

SELECT [ALL|DISTINCT] <目标列表达式列表>                                                  
FROM <表名或视图名列表>  
[ WHERE <条件表达式> ]
[ GROUP BY <列名1> [ HAVING <条件表达式> ] ]
[ ORDER BY <列名2> [ ASC|DESC ] ]
其中,SELECT后的目标列表达式可以是列名、表达式或函数。
GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。
HAVING短语:筛选出只有满足指定条件的组
ORDER BY子句:对查询结果表按指定列值的升序或降序排序 
注意:T-SQL语句中关键字不区分大小写
  1. 无条件查询全部数据
select * from S;

在这里插入图片描述
2) 在SELECT关键字后指明要检索的列名
① 查询S表的学生学号和姓名

select sno,sname from S;

在这里插入图片描述
② 查询S表中的系部名

SELECT DEPT FROM S 

在这里插入图片描述
③ 查询S表中不重复的系部名

SELECT DISTINCT DEPT FROM S

在这里插入图片描述
3) 改变列标题的检索
① 使用 空格 形式: 列名 新标题

SELECT SNO 学号 , SNAME 姓名 FROM S

② 使用“AS”形式,列名 AS 新标题

SELECT SNO AS 学号, SNAME AS  姓名 FROM S

在这里插入图片描述
4) 有条件选择的查询
① 在S表检索“信息系”的学生信息

SELECT  *  FROM  S WHERE DEPT=’信息系’

在这里插入图片描述
② 在S表中检索姓“王”的学生信息

SELECT  *  FROM  S WHERE  sname  like  ‘王%’

在这里插入图片描述
③ 在SC表检索’C01’选修课成绩为空的选课记录

SELECT  SNO, CNO  FROM  SC  WHERE  cno=’C01’  and  SCORE  is  null

在这里插入图片描述
④ 检索年龄为21,18,22的学生学号、姓名

SELECT  SNO,SNAME  FROM  S WHERE  age  in  (21,18,22)
Age IN {21,18,22}

在这里插入图片描述
表示某条记录的AGE字段值是否是集合{21,18,22}中的元素,如是,则选择。它等价于下面语句:

SELECT SNO, SNAME FROM S WHERE  age=18 or age=21 or age=22
  1. 使用聚集函数
    ① 查询选课表中最高分、平均分、最低分
SELECT MAX(SCORE), AVG(SCORE),MIN(SCORE) FROM SC

在这里插入图片描述
② 查询“C01”课程的最高分、平均分和最小成绩。

SELECT MAX(SCORE), AVG(SCORE),MIN(SCORE)
FROM  SC
WHERE  CNO=’C01’

在这里插入图片描述
6) 对检索结果进行排序

SELECT  *  FROM  SC
WHERE  SCORE  IS  NULL
ORDER  BY  SNO,CNO  DESC

在这里插入图片描述
7) 进行分组统计:
① 查询各学生的选课数

SELECT  SNO,COUNT(*)
FROM  SC
GROUP  BY  SNO

在这里插入图片描述
② 使用HAVING :“选课表”中查询选修了3 门以上课程的学生学号。

SELECT  SNO ,COUNT (*) FROM SC
GROUP  BY  SNO
HAVING  COUNT(*)>=3

在这里插入图片描述
③ “选课表”中按学号分组汇总学生的平均分,并按平均分降序排列。

SELECT  SNO  学号, AVG(成绩)  平均分  FROM  SC
GROUP  BY  SNO
ORDER  BY  平均分  DESC

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值