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

简介: 【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 
目录
相关文章
|
12月前
|
SQL Oracle 关系型数据库
MySQL的sql_mode模式说明及设置
MySQL的sql_mode模式说明及设置
1522 112
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
11月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1635 152
|
11月前
|
SQL 存储 关系型数据库
MySQL体系结构详解:一条SQL查询的旅程
本文深入解析MySQL内部架构,从SQL查询的执行流程到性能优化技巧,涵盖连接建立、查询处理、执行阶段及存储引擎工作机制,帮助开发者理解MySQL运行原理并提升数据库性能。
|
11月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
1125 156
|
SQL 关系型数据库 MySQL
Go语言数据库编程:使用 `database/sql` 与 MySQL/PostgreSQL
Go语言通过`database/sql`标准库提供统一数据库操作接口,支持MySQL、PostgreSQL等多种数据库。本文介绍了驱动安装、连接数据库、基本增删改查操作、预处理语句、事务处理及错误管理等内容,涵盖实际开发中常用的技巧与注意事项,适合快速掌握Go语言数据库编程基础。
1613 213
|
11月前
|
SQL 监控 关系型数据库
SQL优化技巧:让MySQL查询快人一步
本文深入解析了MySQL查询优化的核心技巧,涵盖索引设计、查询重写、分页优化、批量操作、数据类型优化及性能监控等方面,帮助开发者显著提升数据库性能,解决慢查询问题,适用于高并发与大数据场景。
|
11月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
11月前
|
SQL 监控 关系型数据库
查寻MySQL或SQL Server的连接数,并配置超时时间和最大连接量
以上步骤提供了直观、实用且易于理解且执行的指导方针来监管和优化数据库服务器配置。务必记得,在做任何重要变更前备份相关配置文件,并确保理解每个参数对系统性能可能产生影响后再做出调节。
920 11

推荐镜像

更多