【MySQL】(四)SQL 基础操作之 DQL 数据查询语言2

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 【MySQL】(四)SQL 基础操作之 DQL 数据查询语言2

MySQL子查询


子查询: 在一个查询中又嵌套了其他的查询,那么嵌套的查询就被称为子查询,而外层的查询被称为父查询。子查询可以任意嵌套!可以出现在INSERT UPDATE DELETE WHERE等中…


需求: 查询在高等数学考试中,成绩比张三高的学生的姓名信息


如果不考虑连表查询

SELECT
  stuId
FROM
  result
WHERE
  subjectId = 1
  AND
  result > 86;


1.查询高等数学的课程编号

SELECT
  subjectId
FROM
  `subject`
WHERE 
  subjectName = '高等数学';


整合

SELECT
  stuId
FROM
  result
WHERE
  subjectId = (
  SELECT
    subjectId
  FROM
    `subject`
  WHERE 
    subjectName = '高等数学'
  )
  AND
  result > 86;


2.查询张三的高数考试成绩

SELECT
  result
FROM
  result
WHERE
  stuId = (SELECT stuId FROM student WHERE stuName = '张三')
  AND subjectId = (SELECT subjectId FROM `subject` WHERE subjectName = '高等数学');


整合

SELECT
  r.stuId,stu.stuName
FROM
  result r,student stu
WHERE
  r.stuId = stu.stuId
  AND
  subjectId = (
  SELECT subjectId FROM `subject` WHERE subjectName = '高等数学'
  )
  AND
  result > (
  SELECT result FROM result WHERE stuId = (
    SELECT stuId FROM student WHERE stuName = '张三'
  )
  AND subjectId = (
    SELECT subjectId FROM `subject` WHERE subjectName = '高等数学'
  )
  );


使用子查询解决连表查询


要求查询学生姓名、年级名称


原来

SELECT stu.stuName,g.gradeName FROM student stu,grade g WHERE stu.gradeId = g.gradeId;


子查询


SELECT
  stu.stuName,
  (SELECT g.gradeName FROM grade g WHERE g.gradeId = stu.gradeId) AS gradeName
FROM
  student stu;


MySQL常用函数


常用的字符串函数


字符串拼接 CONCAT(str1,str2,…)

SELECT CONCAT('这是','MySQL','数据库');


字符串内容替换 REPLACE(str,from_str,to_str)

SELECT REPLACE('这是MySQL数据库','MySQL','Oracle');


去除左侧空格

SELECT LTRIM('     Hello World  ');


去除右侧空格

SELECT RTRIM('   Hello World  ');


获取字符串长度

SELECT LENGTH('Hello');


截取字符串SUBSTR(str,pos) 索引从1开始

SELECT SUBSTR('Hello World',5);


SUBSTR(str,pos,len)

SELECT SUBSTR('Hello World',5,3);


常用的数学函数


获取随机数 Math.random()

SELECT RAND();


向上取整

SELECT CEIL(20.4);


向下取整

SELECT FLOOR(20.7);


四舍五入

SELECT ROUND(20.5);
SELECT ROUND(20.76,1)


常用的时间函数


获取当前时间

SELECT NOW();
SELECT CURRENT_DATE();
SELECT CURRENT_TIME();


获取各种时间信息的函数

SELECT MONTH(NOW());
SELECT YEAR(NOW());
SELECT DAY(NOW());
SELECT HOUR(NOW());
SELECT MINUTE(NOW());
SELECT SECOND(NOW());


日期转换

SELECT DATE_FORMAT(NOW(),'%Y-%m-%d');


计算时间差额

SELECT DATEDIFF(NOW(),'2019-05-25');


常用的聚合/统计函数

求年级编号最大的

SELECT MAX(gradeId) FROM grade;


求年级编号最小的

SELECT MIN(gradeId) FROM grade;


求平均分

SELECT AVG(result) FROM result WHERE subjectId = 1;


求和

SELECT SUM(result) FROM result WHERE subjectId = 1;


计算学生总人数

SELECT COUNT(*) FROM student;
SELECT COUNT(stuId) FROM student;
SELECT COUNT(1) FROM student;


分组查询 GROUP BY


注意事项: 在分组查询的查询字段中 不要出现与分组查询中无关的字段值


需求: 计算各个年级的学生人数

SELECT gradeId,COUNT(1) FROM student GROUP BY gradeId;


如果我希望查看 各个年级的总人数 且要求查看对应的学生姓名列表

SELECT gradeId,COUNT(1),GROUP_CONCAT(stuName) FROM student GROUP BY gradeId;


计算各个年级各个性别的人数

SELECT gradeId,gender,COUNT(1) FROM student GROUP BY gradeId,gender;


需求: 查询年级的学生人数大于1人的年级名称

SELECT
  stu.gradeId,count(1),g.gradeName
FROM
  student stu,grade g
WHERE
  stu.gradeId = g.gradeId
GROUP BY 
  gradeId
HAVING 
  count(1) > 1;


HAVING和WHERE的区别?


相同点: 都可以用来进行条件判断 筛选行数


不同点:


  • 位置不同: WHERE是在分组之前 HAVING是在分组之后
  • 条件筛选不同: WHERE是给FROM查询到的数据进行条件筛选 而HAVING是对分组后的数据进行筛选
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
2月前
|
SQL 数据管理 关系型数据库
SQL 语言入门:开启数据管理的大门
在数字化时代,数据已成为核心资产,而 SQL 作为操作关系型数据库的标准语言,是数据从业者、程序员及办公人员必备技能。本文从基础概念讲起,详解 SQL 的核心用法,包括数据查询、插入、修改、删除及表结构操作,并通过实例演示帮助读者快速上手。掌握 SQL,不仅能提升数据处理效率,更为深入理解数据管理打下坚实基础。
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
|
2月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
1月前
|
SQL Oracle 关系型数据库
SQL语言小结
针对数据库、表单和数据行的增删改,没有涉及到sql真正的用途也就是查询,sql提供的查询语句的关键字占 sql 语言的一半之多,查询语句还是得单拿出来讲,不然太多了。 因为没有涉及到查询,所以sql的新增和修改都是很笼统的做法,drop、alter drop、delete这些很容易,逻辑性也不强,再次说明sql的真正精髓在于查询,不然为啥叫做结构化查询语言
266 0
|
1月前
|
SQL 关系型数据库 MySQL
(SQL)SQL语言中的查询语句整理
查询语句在sql中占了挺大一部分篇幅,因为在数据库中使用查询语句的次数远多于更新与删除命令。而查询语句比起其他语句要更加的复杂,可因为sql是数据库不可或缺的一部分,所以即使不懂,也必须得弄懂,以上。
207 0
|
2月前
|
SQL 监控 关系型数据库
查寻MySQL或SQL Server的连接数,并配置超时时间和最大连接量
以上步骤提供了直观、实用且易于理解且执行的指导方针来监管和优化数据库服务器配置。务必记得,在做任何重要变更前备份相关配置文件,并确保理解每个参数对系统性能可能产生影响后再做出调节。
347 11
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
|
2月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
128 3
|
2月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
3月前
|
存储 运维 关系型数据库
从MySQL到云数据库,数据库迁移真的有必要吗?
本文探讨了企业在业务增长背景下,是否应从 MySQL 迁移至云数据库的决策问题。分析了 MySQL 的优势与瓶颈,对比了云数据库在存储计算分离、自动化运维、多负载支持等方面的优势,并提出判断迁移必要性的五个关键问题及实施路径,帮助企业理性决策并落地迁移方案。

推荐镜像

更多
下一篇
oss云网关配置