从0到1学会MySQL单表查询

 更新时间:2023年11月14日 11:46:16   作者:Dawn黎明开始  
这篇文章主要给大家介绍了关于如何从0到1学会MySQL单表查询的相关资料,单表查询是指从一张表数据中查询所需的数据,文中通过代码介绍的非常详细,需要的朋友可以参考下

1.查询表中若干列

例如:查询全体学生的学号和姓名

select sno,sname
from student;

(1)查询全部列

(例如:查询全体学生的信息)

方法一:在select关键字后面列出所有列名

代码如下👇🏻

select  sno,sname,ssex,sage,sdept
from student;

方法二:将<目标列表表达式>指定为*

代码如下👇🏻

select *
from student;

(2)查询经过计算的值

select子句中的<目标列表达式>不仅可以为表中的属性列,也可以是表达式

例如:查询全体学生的姓名及其出生年份

代码如下👇🏻

select sname,2023-sage
from student;

 运行结果👇🏻

45fe27e57fd2406e848c7751d3db6115.png

(3)使用列别名改变查询结果的列标题(AS可以省略)

代码如下👇🏻

SELECT Sname AS NAME,'Year of Birth:' AS BIRTH, 
       2014-Sage AS BIRTHDAY,LOWER(Sdept)  AS DEPARTMENT
	FROM Student;

运行结果👇🏻

14d483d10a324a08826c7038b873acd1.png

2.查询表中若干元组

(1)消除取值重复的行

如果没有指定DISTINCT关键字,则缺省为ALL

例如:(查询选修了课程的学生学号)

未指定DISTINCT关键字

代码如下👇🏻

SELECT sno
FROM sc;
/*
SELECT ALL sno
FROM sc;
*/

运行结果👇🏻

897492e5129e4bbab47f2363720e47d8.png

指定DISTINCT关键字

代码如下👇🏻

SELECT DISTINCT sno
FROM sc;

运行结果👇🏻

0122d924882443fbac0c39ffb22602e1.png

(2)比较大小

例如:查询计算机科学系全体学生的名单

代码如下👇🏻

SELECT sname
FROM student
WHERE sdept='cs';

运行结果👇🏻

ffb649341287423d9fe565fc31ba5fdd.png

例如:所有年龄在20岁以下的学生姓名和年龄

代码如下👇🏻

SELECT sname,sage
FROM student
WHERE sage<20;

运行结果👇🏻

b6fc254d43d047ce8ff4279aa3b1af4f.png

 例如:查询考试成绩有不及格的学生的学号

代码如下👇🏻

SELECT DISTINCT sno
FROM sc
WHERE grade<60;
 

(3)确定范围

谓词:between   and,not between   and

例如:查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名,年龄

代码如下👇🏻

SELECT sname,sage
FROM student
WHERE sage BETWEEN 20 AND 23;

运行结果👇🏻

65647fdeeb354abcbf81a05c7c78854f.png

(4)确定集合

谓词: in<值表>,not in<值表>

代码如下👇🏻

SELECT sname ,ssex,sdept
FROM student
WHERE sdept IN ('CS','MA','IS');

运行结果👇🏻

e2fdb6458dd34f3da7a5ac7f439e7868.png

(5)字符匹配

谓词:[not]like'<匹配串>'[ESCAPE'<换码字符>']

<匹配串>可以是一个完整的字符串,也可以含有通配符%和_

%(百分号)代表任意长度(长度可以为0)的字符串

例如:a%b表示以a开头,以b结尾的任意长度的字符串

_(下划线)代表任意单个字符

例如:a_b表示以a开头,以b结尾的长度为3的任意字符串

-----------------------------------

(1)匹配串含固定字符串

例如:查询学号为201215121的学生的详细情况

代码如下👇🏻

SELECT *
FROM student
WHERE sno='201215121';

运行结果👇🏻

b5c6d4c2bdde451498869222828048cb.png

(2)匹配串为含通配符的字符串

例如:查询所有姓刘学生的姓名,学号,性别

代码如下👇🏻

SELECT sname ,sno,ssex
FROM student
WHERE sname LIKE '刘%';

运行结果👇🏻

145b4f1d460e4675824aeac9fb4b882e.png

例如:查询姓"欧阳"且全名为三个汉字的学生的姓名

代码如下👇🏻

SELECT sname
FROM student
WHERE sname LIKE '欧阳_';

例如:查询名字中第二个字为"阳"字的学生的姓名和学号

代码如下👇🏻

SELECT sname,sno
FROM student
WHERE sname LIKE '_阳%';

例如:查询所有不姓刘的学生姓名,学号和性别

代码如下👇🏻

SELECT sname ,sno,ssex
FROM student
WHERE sname NOT LIKE '刘%';

 (3)使用换码字符将通配符转义为普通字符

ESCAPE'/'表示"/"为换码字符

例如:查询DB_Design课程的课程号和学分

代码如下👇🏻

select cno,ccredit
from course
where cname like'DB/_Design'ESCAPE'/';

例如:查询以"DB_"开头,且倒数第3个字符为i的课程的详细情况

代码如下👇🏻

select *
from course
where cname like 'DB/_%i__'ESCAPE'/';

(6)涉及空值的查询

谓词: is null 或 is  not null

注意:"is"不能用 "="代替

例如:某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩

查询缺少成绩的学生的学号和相应的课程号

代码如下👇🏻

select sno,cno
from sc
where grade is null;

3.ORDER BY子句

特点

可以按一个或多个属性列排序

升序:ASC;降序:DESC;缺省值为升序

对于空值,排序时显示的次序由具体系统实现来决定

例子

例1

(查询选修了3课程的学生的学号及其成绩,查询结果按分数降序排列)

SC表如下👇🏻

代码如下👇🏻

SELECT Sno,Grade
FROM SC
WHERE Cno='3'
ORDER BY grade DESC;

运行结果👇🏻

例2

(查询全体学生情况,查询结果按所在系的系好升序排列,同一系中的学生按年龄降序排列)

Student表如下👇🏻

代码如下👇🏻

SELECT *
FROM Student
ORDER BY Sdept,Sage DESC;

运行结果👇🏻

4.聚焦函数

(1)统计元组个数

COUNT(*)

例如:(查询学生总人数)

代码如下👇🏻

SELECT COUNT(*)
FROM student;

运行结果👇🏻

(2)统计一列中值的个数

COUNT([DISTINCT|ALL]<列名>)

 例如:(查询选修了课程的学生人数)

代码如下👇🏻

SELECT COUNT(DISTINCT sno)
FROM sc;

运行结果👇🏻

(3)计算一列值的总和(此列必须为数值型)

SUM([DISTINCT|ALL]<列名>)

 例如:(查询学生201215012选修课程的总学分数)

代码如下👇🏻

SELECT SUM(Ccredit)
FROM sc,course
WHERE sno='201215012' AND sc.`Cno`=course.`Cno`;

(4)计算一列值的平均值(此列必须为数值型)

AVG([DISTINCT|ALL]<列名>)

 例如:(查询选修1号课程的学生平均成绩)

代码如下👇🏻

SELECT  AVG(Grade)
FROM sc
WHERE cno='1';

(5)求一列中的最大值和最小值

MAX([DISTINCT|ALL]<列名>)

 例如:(查询选修1号课程的学生最高分数)

代码如下👇🏻

SELECT MAX(Grade)
FROM sc
WHERE cno='1';

MIN([DISTINCT|ALL]<列名>)

 例如:(查询选修1号课程的学生最低分数)

代码如下👇🏻

SELECT MIN(Grade)
FROM sc
WHERE cno='1';​

5.GROUP BY子句

特点

细化聚焦函数的作用对象

如果未查询结果分组,聚焦函数将作用于整个查询结果

对查询结果分组后,聚焦函数将分别作用于每个组

按指定的一列或多列值分组,值相等的为一组

代码如下👇🏻

SELECT sno, AVG(Grade)
FROM sc
GROUP BY sno

运行结果👇🏻

HAVING短语与WHERE子句的区别

(1)作用对象不同

(2)WHERE子句作用于基表或视图,从中选择满足条件的元组

(3)HAVING短语作用于组,从中选择满足条件的组

例如:(查询平均成绩大于等于85分的学生学号和平均成绩)

错误代码👇🏻:

SELECT sno, AVG(Grade)
FROM sc
WHERE AVG(grade)>=85
GROUP BY sno

正确代码如下👇🏻

SELECT sno, AVG(Grade)
FROM sc
GROUP BY sno
HAVING AVG(grade)>=85

注意:WHERE子句中是不能用聚焦函数作为条件表达式

总结

到此这篇关于MySQL单表查询的文章就介绍到这了,更多相关MySQL单表查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL主键自增会遇到的坑及解决方法

    MySQL主键自增会遇到的坑及解决方法

    主键不用随机字符串用什么?主键自增?主键自增就是最佳方案吗?有没有其他坑?今天我们就来讨论下这个话题,感兴趣的小伙伴可以收藏一下
    2023-04-04
  • mysql登录警告问题的解决方法

    mysql登录警告问题的解决方法

    这篇文章主要为大家详细介绍了mysql登录警告问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • MySQL存储过程输入参数(in),输出参数(out),输入输出参数(inout)

    MySQL存储过程输入参数(in),输出参数(out),输入输出参数(inout)

    这篇文章主要介绍了MySQL存储过程输入参数(in),输出参数(out),输入输出参数(inout),存储过程就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;Python里面的函数
    2022-07-07
  • 手把手教你用SQL获取年、月、周几、日、时

    手把手教你用SQL获取年、月、周几、日、时

    时间处理是我们日常开发中经常遇到的需求,下面这篇文章主要给大家介绍了关于如何用SQL获取年、月、周几、日、时的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • mysql proxy问题的解决方法

    mysql proxy问题的解决方法

    最近试用mysql proxy,遇到若干问题,好在一一找到了解决方案,列出来备忘。这次使用的版本是0.6.x,也许新版本就没有这些问题了。
    2009-02-02
  • 基于SQL中的数据查询语句汇总

    基于SQL中的数据查询语句汇总

    以下是对SQL中的数据查询语句进行了汇总介绍,需要的朋友可以过来参考下
    2013-07-07
  • win10 mysql 5.6.35 winx64免安装版配置教程

    win10 mysql 5.6.35 winx64免安装版配置教程

    这篇文章主要为大家详细介绍了win10 mysql 5.6.35 winx64免安装版配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • 一个mysql死锁场景实例分析

    一个mysql死锁场景实例分析

    这篇文章主要给大家实例分析了一个mysql死锁场景的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • 解决mysql 1040错误Too many connections的方法

    解决mysql 1040错误Too many connections的方法

    因为你的mysql安装目录下的my.ini中设定的并发连接数太少或者系统繁忙导致连接数被占满
    2012-09-09
  • MySQL配置文件my.cnf中文详解附mysql性能优化方法分享

    MySQL配置文件my.cnf中文详解附mysql性能优化方法分享

    Mysql参数优化对于新手来讲,是比较难懂的东西,其实这个参数优化,是个很复杂的东西,对于不同的网站,及其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有关系,优化不可能一次性完成,需要不断的观察以及调试,才有可能得到最佳效果。
    2011-09-09

最新评论