加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 钦州站长网 (https://www.0777zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

(三)数据库查询——单表查询

发布时间:2022-11-28 12:45:26 所属栏目:MySql教程 来源:
导读:  SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表的式>]&hellip;&hellip;
  FROM <表名或视图名>[,<表明或视图名>]&hellip;&hellip;
  [WHERE <条件表达式>]
  [GROUP BY<列名1>[HAVING <条件表达式>]
  SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表的式>]……
  FROM <表名或视图名>[,<表明或视图名>]……
  [WHERE <条件表达式>]
  [GROUP BY<列名1>[HAVING <条件表达式>]]
  [ORDER BY <列名2>[ASC|DESC]];
  1.选择表中的若干列
 
  ——查询指定列
 
  查询全体学生的学号与姓名
 
  SELECT Sno ,Sname
  FROM Student;
  ——查询全部列
 
  查询全体学生的详细记录
 
  SELECT *
  FROM Student;
  等价于
 
  SELECT Sno,Sname,Ssex,Sage,Sdept /*学生全部属性*/
  FROM Student;
  ——查询经过计算的值
 
  查询全体学生的姓名及其出生年份
 
  SELECT Sname ,2017-Sage
  FROM Student;
 
  查询结果
 
  可以发现第2列不是列名而是一个表达式,使用当年的年份减去学生的年龄。
 
  若想把列表中第二列列名显示为“Birthday"可以用如下方法:
 
  SELECT Sname ,2017-Sage Birthday
  FROM Student;
  输出的结果为
 
  操作必须使用一个可更新的查询._数据库查询操作_操作必须使用一个可更新的查询 excel
 
  查询结果
 
  相当于给2017-Sage起了一个别名。
 
  2、选择表中的若干元组
 
  ——消除取值重复的行
 
  查询选修了课程的学生学号
 
  SELECT Sno
  FROM SC; /*选课表*/
  输出结果为:
 
  数据库查询操作_操作必须使用一个可更新的查询 excel_操作必须使用一个可更新的查询.
 
  查询结果
 
  该查询结果里包含了多个重复的行,若想去掉这些重复行必须指定关键词DISTINCT:
 
  SELECT DISTINCT Sno
  FROM SC; /*选课表*/

  ——查询满足条件的元组
 
  1.大小比较
 
  查询计算机科学系的全体学生的姓名
 
  SELECT Sname
  FROM Student
  WHERE Sdept='CS';
  2.确定范围
 
  查询年龄在20-30岁之间的学生姓名
 
  SELECT Sname
  FROM Student
  WHERE Sage BETWEEN 20 AND 23;
  查询年龄不在20-30岁之间的学生姓名
 
  SELECT Sname
  FROM Student
  WHERE Sage NOT BETWEEN 20 AND 23;
  3.确定集合
 
  查询计算机科学系、数学系和信息系学生的姓名和性别
 
  SELECT Sname,Ssex
  FROM Student
  WHERE Sdept IN('CS','MA','IS');
  4.字符匹配
 
  谓词LIKE可以用来进行字符串的匹配,其一般语法为:
 
  [NOT ]LIKE '<匹配串>'[ESCAPE'<换码字符>']
  其含义是查找指定的属性列值与相匹配的元组。可以是一个完整的字符串数据库查询操作,也可以是含有通配符%和_。
 
  .%(百分号)代表任意长度的字符串
 
  ._(下划线)代表任意单个字符
 
  查询所有姓刘的学生的姓名、学号和性别
 
  SELECT Sname,Sno,Ssex
  FROM Student
  WHERE Sname LIKE '刘%';
  注意:数据库中字符集为ASCII时一个汉字需要两个_,当字符集为GBK时只需要一个_。
 
  5.涉及空值的查询
 
  某些学生选修了课程后没有参加考试,所以有选课记录,但是没有考试成绩。查询缺少成绩的学生的学号和相应的课程号,
 
  SELECT Sno ,Cno
  FROM SC
  WHERE Grade IS NULL;
  注意:这里的IS不能用等号(=)代替。
 
  6.多重条件查询
 
  查询计算机系年龄在20岁以下的学生姓名
 
  SELECT Sname
  FROM Student
  WHERE Sdept='CS' AND Sage
  3、ORDER BY 子句
 
  可以用ORDER BY 子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排序,缺省值时为升序
 
  查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列
 
  SELECT Sno,Grade
  FROM SC
  WHERE Cno='3'
  ORDER BY Grade DESC;
  4、聚集函数
 
  SQL提供了许多聚集函数,主要有:
 
  COUNT([DISTINCT|ALL] *) /*统计元组个数*/
  COUNT([DISTINCT|ALL] <列名>) /*统计一列中值个数*/
  SUM([DISTINCT|ALL] <列名>) /*计算一列值的总和(此列必须为数值型)*/
  AVG([DISTINCT|ALL] <列名>) /*计算一列值的平均值(此列必须为数值型)*/
  MAX([DISTINCT|ALL] <列名>) /*求一列值中的最大值*/
  MIN([DISTINCT|ALL] <列名>) /*求一列值中的最小值*/ /*统计一列中值个数*/
  SUM([DISTINCT|ALL] <列名>) /*计算一列值的总和(此列必须为数值型)*/
  AVG([DISTINCT|ALL] <列名>) /*计算一列值的平均值(此列必须为数值型)*/
  MAX([DISTINCT|ALL] <列名>) /*求一列值中的最大值*/
  MIN([DISTINCT|ALL] <列名>) /*求一列值中的最小值*/
  查询学生总数
 
  SELECT COUNT(*)
  FROM Student;
  查询选修了课程的学生人数
 
  SELECT COUNT(DISTINCT Sno)
  FROM SC;
  计算选修1号课程的学生平均成绩
 
  SELECT AVG(Grade)
  FROM SC
  WHERE Cno='1';
  5、GROUP BY 子句
 
  GROUP BY子句将查询结果按某一列或多列的值分组,值相等的为一组。
 
  求各个课程及相应的选课人数
 
  SELECT Cno,COUNT(Cno)
  FROM SC
  GROUP BY Cno;
  该语句对查询结果按Cno的值分组,所有具有相同Cno值得元组为一组,然后对每一组作用聚集函数COUNT计算,以求得改组的学生人数结果为:
 
  查询结果
 
  查询选修了3门以上课程的学生学号
 
  SELECT Sno
  FROM SC
  GROUP BY Sno
  HAVING COUNT(*)>3;
  WHERE 子句与HAVING 短语的区别在于作用对象不同。WHERE子句作用于基本表或视图,从中选择满足条件的元组。HAVING短语作用于组,从中选择满足条件的组。
 

(编辑:PHP编程网 - 钦州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!