mysql-数据查询语句-单表

简介: 1、查询指定列 select sno,sname from student;image.png2、查询全部列select * from sc;image.

1、查询指定列

 select sno,sname from student;
img_79a6b0b9dec569eb7f9a25f3e031cb2f.png
image.png

2、查询全部列

select * from sc;
img_9d6970a16b2b448612b98b19fe52ea59.png
image.png

3、查询经过计算的值

select sname,2018-sage from student;  //目标列是表达式

select sname,'Year of birth:',2018-sage,lower(sdept) from student; //目标表达式可以是字符串常量、函数等

 select sname NAME,'Year of birth:' BIRTH, 2018-sage BIRTHDAY,lower(sdept) DEPARTMENT from student; //别名

select 子句的目标列表达式不仅可以是属性列,还可以是表达式


img_f13816e97efb1412774dcd5406e586ed.png
image.png

目标列 不仅可以是算术表达式,还可以是字符串常量、函数等。


img_985ff8d7141c35548ef38113daaac1cd.png
image.png

还可以通过指定别名来改变查询结果的列标
img_0acc36a6578b530b3652be6233d2e9ef.png
image.png

4、消除重复的行

select distinct sno from sc; //distinct 表示去重
select [all] sno from sc;  //如果没有指定distinct,则默认是all
img_8d6f93f2e642ac4003f5ff93c16a282d.png
image.png

条件查询

5、比较大小

用于进行比较的运算符一般包括 =,>,<,>=,<=,!=,!>,!<。最后两个分别是不大于,不小于。

//查询计算机科学系全体学生的名单
select sname from student where sdept='CS';
img_96288de163ee855f3dc8387bcd0cb665.png
image.png
//查询所有年龄在20岁以下的学生姓名及其年龄
select sname,sage from student where sage<20;
img_b53a52c4a390a494f417be2f1ec2652e.png
image.png
//查询考试成绩不及格的学生的学号
select distinct sno from sc where grade<60;
img_e12a25daaaa7a6d07379058ea3a5b8ee.png
image.png

6、确定范围

谓词 between…and… 和 not between…and… 可以用来查找属性值在(或不在)指定范围内的无组,其中between后是范围的下限(即低值),and 后是范围的上限(即高值)。

//查询年龄在20~30岁(包括20岁和30岁)之间的学生的姓名、系别和年龄。
select sname,sdept,sage from student where sage between 20 and 30;
img_c140c334936198c7ff877bfc7a45de1b.png
image.png
//查询年龄不在20~30岁之间的学生姓名、系别和年龄。
 select sname,sdept,sage from student where sage not between 20 and 30;
img_5629cf08d99018b1f626b05227618007.png
image.png

7、确定集合

谓词 in 和 not in 可以用来查找属性值属于或不属于指定集合的元组

//查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别。
 select sname,ssex from student where sdept in('CS','MA','IS');
img_db3efeb3c7dce293077f0e75512c4142.png
image.png
//查询既不是计算机科学系(CS)、数学系(MA),也不是信息系(IS)学生的姓名和性别。
select sname,ssex from student where sdept not in('CS','MA','IS');
img_adc9f575538b5c4dfe5cabc5d2c24ad3.png
image.png

8、字符匹配

谓词 like 可以用来进行字符串的匹配。%(百分号)代表任意长度(长度可以为0)的字符串。_(下划线)代表任意单个字符。

//查询学号为201215121的学生的详细情况
select * from student where sno like '201215121';
//上式可以等价为
select * from student where sno='201215121';

如果 like 后面的匹配串不含通配符,则可以用 = (等于)运算符取代 like 谓词,用 != 或 <>(不等于)运算符取代not like 谓词。


img_025bfd75daa6f165f7a1ce7ba0db0789.png
image.png
//查询所有姓刘的学生的姓名、学号和性别
select sname,sno,ssex from student where sname like '刘%'; //%代表任意长度
img_2709767009b0a9c4c984de776817e321.png
image.png
//查询姓“欧阳”且全名为三个汉字的学生的姓名。
select sname,sno from student where sname like '欧阳_'; 
//    _ 一般用于查询明确长度的字符匹配
img_7cee28e1a6289308dd3369efc49a6384.png
image.png
//查询名字中第二个字为“阳”的学生的姓名和学号
 select sname,sno from student where sname like '_阳%';
img_0ab25f8475acd1f96497e27b32e07e35.png
image.png
//查询所有不姓刘的学生的姓名、学号和性别
select sname,sno,ssex from student where sname not like '刘%';
img_551de8db786d164ea30c4c74ca1449d5.png
image.png
//查询DB_Design课程的课程号和学分
select cno,ccredit from course where cname like 'DB\\_Design';

如果条件里面包含一些特殊的字符,那么就要进行转义了,在mysql里面是在特殊字符前面加 \(反斜杠)进行转义。


img_57568fb4045b117fc2b4919bed536c66.png
image.png
//查询以“DB_开头,且倒数第三个字符为 i 的课程的详细情况”
select * from course where cname like 'DB\_%i__'; 
img_ab37e4dbbe92a6c158f7f5c53bb0674f.png
image.png

9、涉及空值的查询

//查询缺少成绩的学生的学号和相应的课程号
select sno,cno from sc where grade is null; 
//注意:这里的 “is” 不能用等号(=)来代替
img_f9454bf1aa7a6d6495d147b0d068ccc0.png
image.png
//查询所有有成绩的学生学号和课程号
select sno,cno
    -> from sc
    -> where grade is not null;
img_7fa7d661c0c4f2ea0f5096d16685e97b.png
image.png

10、多重条件查询

逻辑运算符 and 和 or 可用业连接多个查询条件。and 的优先级高于 or , 但是可以用括号改变优先级。

//查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别
mysql> select sname, ssex from student
    -> where sdept='CS' OR sdept='MA' or sdept='IS';
// in 谓词实际上是多个or运算符的缩写
img_aca43796c5fcb28e2d2cc06a6a3395c1.png
image.png
//查询计算机科学第年龄在20岁以下的学生姓名
mysql> select sname
    -> from student
    -> where sdept='CS' and sage<20;
img_9ffd8c3a875eb4d3c2c712b418f04a13.png
image.png

10、order by子句

用order by 子句对查询结果一个或多个属性列的升序(asc)或降序(desc)排列,默认值为升序。

//查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列。
mysql> select sno,grade
    -> from sc
    -> where cno='3'
    -> order by grade desc;
img_d18583b8aa806c1649d0bd427de7e382.png
image.png
查询全体学生情况,查询结果按所在系的系号升序排列,同一系的学生按年龄降序排列
mysql> select *
    -> from student
    -> order by sdept,sage desc;
img_73edb8933c856ab7dd6bccfce6f821a4.png
image.png

11、聚集函数

//查询学生总人数
mysql> select count(*)
    -> from student;
img_11dd0ecf962177aa24b30f1b8cb33bed.png
image.png
//查询选修了课程的学生人数
mysql> select count(distinct sno)
    -> from sc;
img_6990035dd86e88b21d6948afe4675fff.png
image.png
//计算选修1号课程的学生平均成绩
mysql> select avg(grade)
    -> from sc
    -> where cno='1';
img_104cc2bdd8230c790a50a48b4e32cba1.png
image.png
//查询选修1号课程的学生最高分
mysql> select max(grade)
    -> from sc
    -> where cno='1';
img_b8de5703640d3838afdbf5c8a8380322.png
image.png
//查询学生201215012选修课程的总学分数
mysql> select sum(ccredit)
    -> from sc,course
    -> where sno='201215012' and sc.cno=course.cno;

img_d7f312a9dae50ba4c557d55c2b9a09b4.png
image.png

当聚集函数遇到空值时,除 count( ) 外,都跳过空值而只处理非空值。count() 是对元组进行计数,某个元组的一个部分列取空值不影响count的统计结果
注意: where 子句中是不能用聚合函数作为条件表达式的。聚集函数只能用于select 子句和 group by 中的 having 子句。

12、group by 子句

group by 子句将查询结果按某一列或多列的值分组,值相等的为一组。分组后聚集函数将作用于每一个组,即每一组都有一个函数值。

//求各个课程号及相应的选课人数
mysql> select cno,count(sno)
    -> from sc
    -> group by cno;
img_dba5b7b3daf9254026e5e600e5da8442.png
image.png

如果分组后还要求按一定的条件对这些级进行筛选,最终只输出满足指定条件的组,则可以使用having短语指定筛选条件。

//查询选修了三门以上课程的学生学号
mysql> select sno
    -> from sc
    -> group by sno
    -> having count(*)>3;
img_b5299ed31ce249a370dc8a85f50c333d.png
image.png

where 子句与 having 短语的区别在于作用对象不同。where 子句作用于基本表或视图,从中选择满足条件的元组。having 短语作用于组,从中选择满足条件的组。

//查询平均成绩大于等于90分的学生学号和平均成绩
mysql> select sno,avg(grade)
    -> from sc
    -> group by sno
    -> having avg(grade)>90;
img_4f9372a67125d91316567966b618ab47.png
image.png
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
SQL 人工智能 关系型数据库
如何实现MySQL百万级数据的查询?
本文探讨了在MySQL中对百万级数据进行排序分页查询的优化策略。面对五百万条数据,传统的浅分页和深分页查询效率较低,尤其深分页因偏移量大导致性能显著下降。通过为排序字段添加索引、使用联合索引、手动回表等方法,有效提升了查询速度。最终建议根据业务需求选择合适方案:浅分页可加单列索引,深分页推荐联合索引或子查询优化,同时结合前端传递最后一条数据ID的方式实现高效翻页。
595 0
|
11月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
799 10
|
12月前
|
SQL 存储 缓存
MySQL 如何高效可靠处理持久化数据
本文详细解析了 MySQL 的 SQL 执行流程、crash-safe 机制及性能优化策略。内容涵盖连接器、分析器、优化器、执行器与存储引擎的工作原理,深入探讨 redolog 与 binlog 的两阶段提交机制,并分析日志策略、组提交、脏页刷盘等关键性能优化手段,帮助提升数据库稳定性与执行效率。
307 0
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
614 28
|
存储 SQL 关系型数据库
【YashanDB知识库】MySQL迁移至崖山char类型数据自动补空格问题
**简介**:在MySQL迁移到崖山环境时,若字段类型为char(2),而应用存储的数据仅为&#39;0&#39;或&#39;1&#39;,查询时崖山会自动补空格。原因是mysql的sql_mode可能启用了PAD_CHAR_TO_FULL_LENGTH模式,导致保留CHAR类型尾随空格。解决方法是与应用确认数据需求,可将崖山环境中的char类型改为varchar类型以规避补空格问题,适用于所有版本。
|
存储 SQL 缓存
mysql数据引擎有哪些
MySQL 提供了多种存储引擎,每种引擎都有其独特的特点和适用场景。以下是一些常见的 MySQL 存储引擎及其特点:
347 0
|
SQL 关系型数据库 MySQL
【YashanDB知识库】字符集latin1的MySQL中文数据如何迁移到YashanDB
本文探讨了在使用YMP 23.2.1.3迁移MySQL Server字符集为latin1的中文数据至YashanDB时出现乱码的问题。问题根源在于MySQL latin1字符集存放的是实际utf8编码的数据,而YMP尚未支持此类场景。文章提供了两种解决方法:一是通过DBeaver直接迁移表数据;二是将MySQL表数据转换为Insert语句后手动插入YashanDB。同时指出,这两种方法适合单张表迁移,多表迁移可能存在兼容性问题,建议对问题表单独处理。
【YashanDB知识库】字符集latin1的MySQL中文数据如何迁移到YashanDB
|
缓存 NoSQL 关系型数据库
Redis和Mysql如何保证数据⼀致?
1. 先更新Mysql,再更新Redis,如果更新Redis失败,可能仍然不⼀致 2. 先删除Redis缓存数据,再更新Mysql,再次查询的时候在将数据添加到缓存中 这种⽅案能解决1 ⽅案的问题,但是在⾼并发下性能较低,⽽且仍然会出现数据不⼀致的问题,⽐如线程1删除了 Redis缓存数据,正在更新Mysql,此时另外⼀个查询再查询,那么就会把Mysql中⽼数据⼜查到 Redis中 1. 使用MQ异步同步, 保证数据的最终一致性 我们项目中会根据业务情况 , 使用不同的方案来解决Redis和Mysql的一致性问题 : 1. 对于一些一致性要求不高的场景 , 不做处理例如 : 用户行为数据 ,
|
SQL 关系型数据库 MySQL
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
927 9

推荐镜像

更多