数据库语句执行过程理解,存储引擎的学习,字符集的理解,加各种sql数据类型理解介绍加之SQL各种数据查询分析和题目专练(2)

简介: 数据库语句执行过程理解,存储引擎的学习,字符集的理解,加各种sql数据类型理解介绍加之SQL各种数据查询分析和题目专练(2)
  • 聚合函数介绍, select  聚集聚合查询  (整合一整列字段)

语法形式:select 函数名(作用字段)  from 表名;

解释:查询   函数处理指定字段(列)之后的结果:

有的时候我们需要整合一列的信息来看,这个时候就可以使用聚合函数,聚合函数就是用于整合一列的数据的

  • count(*)  和  count(指定字段(列))的区别:* 会连着NULL 一起做统计,指定具体字段不会统计NULL

具体例子, 后序有专练

  • select 分组查询
  • 语法形式:    select 指定分组字段,  聚合函数(处理字段) from 表名 group by 前面的指定分组字段.         (强调,前面的指定分组字段和后面的指定分组字段一定要一一对应,不能少)

  • 看不同语法不要着急,先搞清楚分组是个啥,分组需要用在哪里....
  • 分组现象那可是相当常见,男生女生各排成一列,分别统计不同职业的人数和。(不同的职业也可以用来分组)
  • 强调,前面的指定分组字段和后面的指定分组字段一定要一一对应,不能少. 这句话很重要.     如果不对应会报错.
  • 举几个栗子

分解一下第一个查询每个工作岗位的人数,一步一步的来:

分组其实就是按照字段值不同将重复的哪些字段值分为一组  (相当于是按照字段值分组)

然后接着加上

就很简单了  分组一般结合聚合函数一同操作使用,先进行分组,然后针对分组使用聚合函数进行一个聚合统计数据.


针对where 和 having 做出解释区分:where 是对于记录行做筛选,筛选的是行,having 是对于分组进行筛选,筛选的是分组.    (如何筛,条件限定限制)

eg :  

上述操作筛除记录,也就是行:

然后是按照 分组 进行  having 筛选分组结果


小结:聚合查询常常和分组一同使用,对于分组后的哪些组进行聚合处理数据,然后在过程中还需要筛选出复合我们要求的记录的话, where是针对 记录(行)筛选 (先筛), having 是针对分组后的结果进行筛选,后筛      

(还有就是分组字段前后保持相同) 注意

  • select 排序查询
  • 语法形式: select 字段 表名 ,,, order by 排序字段1 排序规则1, 排序字段2 排序规则2

  • 首先,排序字段可以给与多个,再给与多个排序字段的情况下,是依次按照排序字段进行比较排序,如果前面的排序字段相同再使用后序的排序字段进行排序
  • 默认排序规则是ASC  升序排序,   DESC 降序排序

来几个栗子:

  • select 限制查询 limit
语法形式:

select 查询字段 from emp limit m, n;     //查询emp 记录  省略前m 行记录查询后n 条

select 查询字段 from emp limit n;          //查询emp 前n 条记录  

eg:

  • select 查询且设置别名   +    去除重复记录
  • 语法形式:  
  • 上面两个都蛮简单的,就简单使用一下就是了:

eg :

注意一下distinct 需要加载修饰字段的前面就是了

  • select 分页查询(小杰因为对于页还没有直观的理解,所以自己没敢尝试写,怕误导大家,有很会的大家可以给出解释,蟹蟹)

六.查询这些基本语法是学的差不多点了,可是需要练习呀,接下来请你按照我给的sql文件进行导入数据库,然后请你根据题目进行练习,练完之后最下面有答案. (数据库就是需要操作,小杰初学者小感受)

  • 第一步,导入数据库:   方式,两种:  
  • 第一种   指定导入:
  • source xxx/test.sql导入sql文件,sql文件实际上是一个脚本文件,里面有多行SQL语句,通过source命令可以批量执行。  (命令导入)

sql 文件代码:

  comm    SMALLINT ) ;
CREATE TABLE IF NOT EXISTS salgrade ( 
  grade   INT,
  losal   INT,
  hisal   INT );
-- 插入测试数据 —— dept
INSERT INTO dept VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO dept VALUES (20,'RESEARCH','DALLAS');
INSERT INTO dept VALUES (30,'SALES','CHICAGO');
INSERT INTO dept VALUES (40,'OPERATIONS','BOSTON');
-- 插入测试数据 —— emp
INSERT INTO emp VALUES (7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERT INTO emp VALUES (7499,'ALLEN','SALESMAN',7698,'1981-2-20',1600,300,30);
INSERT INTO emp VALUES (7521,'WARD','SALESMAN',7698,'1981-2-22',1250,500,30);
INSERT INTO emp VALUES (7566,'JONES','MANAGER',7839,'1981-4-2',2975,NULL,20);
INSERT INTO emp VALUES (7654,'MARTIN','SALESMAN',7698,'1981-9-28',1250,1400,30);
INSERT INTO emp VALUES (7698,'BLAKE','MANAGER',7839,'1981-5-1',2850,NULL,30);
INSERT INTO emp VALUES (7782,'CLARK','MANAGER',7839,'1981-6-9',2450,NULL,10);
INSERT INTO emp VALUES (7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);
INSERT INTO emp VALUES (7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO emp VALUES (7844,'TURNER','SALESMAN',7698,'1981-9-8',1500,0,30);
INSERT INTO emp VALUES (7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);
INSERT INTO emp VALUES (7900,'JAMES','CLERK',7698,'1981-12-3',950,NULL,30);
INSERT INTO emp VALUES (7902,'FORD','ANALYST',7566,'1981-12-3',3000,NULL,20);
INSERT INTO emp VALUES (7934,'MILLER','CLERK',7782,'1982-1-23',1300,NULL,10);
-- 插入测试数据 —— salgrade
INSERT INTO salgrade VALUES (1,700,1200);
INSERT INTO salgrade VALUES (2,1201,1400);
INSERT INTO salgrade VALUES (3,1401,2000);
INSERT INTO salgrade VALUES (4,2001,3000);
INSERT INTO salgrade VALUES (5,3001,9999);

新建一个文件命名为test.sql   将上述拷贝进去,导入执行上述语句创建数据库即可

  • 专项练习1:     练习基本的指定字段  去重,别名查询
  1. 查询指定字段 ename,job,sal的数据
  2. 查询所有字段
  3. 查询所有员工的职位,并起别名
  4. 查询员工的的职位有哪些(不要重复)
  5. 查询员工年薪 即 sal* 12
  • 专项练习2:     条件查询练习

    查询工资等于3000的员工

查询工资小于1000的员工

查询工资小于等于1000的员工

查询没有奖金的员工

查询有奖金的员工

查询工资在1200到1800之间的员工(包含1200和1800岁)


查询职位为推销员,且工资小于1500的员工


查询工资为800 或 3000 或 5000的员工


查询姓名为四个字的员工


查询姓名最后一位是S的员工


  • 专项训练3  聚合函数使用
    1. 统计该企业员工数量
    2. 统计该企业员工的平均工资
    3. 查询该企业员工的最高工资
    4. 查询该企业员工的最低工资
    5. 计算所有销售的工资之和


    • 专项训练4 : 聚合函数结合分组查询使用
    1. 统计出每个工作岗位的人数
    2. 统计出每种职位的最低和最高工资
    3. 显示不同职位薪资少于1500的人数
    4. 显示非销售人员(salesman)工作名称以及从事同一工作的员工的月工资的总和,并且要满足从事同一工作的员工的月工资合计大于等于5000。
    • 专项训练5 : 排序查询

      根据姓名对员工进行排序(升序)

    查询入职时间大于1981年6月6日的员工信息,并按照入职时间升序排列

    根据工作职位,进行升序排列,职位相同的情况下,再根据入职时间降序排列

    查询工资不在1000到2000之间的员工的姓名和工资,工资按降序排列

    按工作职位进行分组,查看每个工作职位的人数,工作职位按升序排列


    七. 总结本文

    提取码:928z

    --来自百度网盘超级会员V1的分享

    本章首先是回顾了之前所学重点,然后接着是介绍了Mysql语句执行流程,SQL层仅仅只是做sql语句的优化处理,真正实现将数据存储到表中和从表中提取数据,其实实要存储到对应的物理内存,也是需要从物理内存上去取出数据的,这些数据存取的工作其实是表处理器 (存储引擎) 帮助我们完成的

    主要的存储引擎  myisam 查询速度快,对于小型数据库比较合适,还有查询多的,但是它不支持行级锁, 不支持事务,也不支持外键   在  5. 7 还是5点几版本之前他是默认的存储引擎   之后 是 innodb

    然后是字符集的介绍, 包含字符的范围  +  编码规则,现在默认mysql 使用的是utf8  最好我们写成utf8mb4;

    然后是各种表的字段修饰,主键,每个表都要有一个主键,主键是唯一且不为空的,不会出现重复.

    然后介绍了各种数据类型,主要就是串   (char, varchar text)  数值 (int, tinyint, float decimal(m, n) )       日期数据类型  (time dte datetime)

    核心就是select 的多种查询方式,  指定字段查询(列查询),条件查询(指定行查询),聚合查询,分组查询group by,去重查询distinct , 排序查询 order by

    最后,小杰以初学者的感受斗胆给大家提出意见,数据库的学习绝非是只动头脑思考可行的,小杰认为初学一定要多写, 将学习时间拉长,理论知识慢慢积累,但是一定要学练并举,学习后马上训练  (如果您觉着小杰写的还有用,麻烦支持下小杰蟹蟹您)


    相关文章
    |
    5天前
    |
    SQL 关系型数据库 MySQL
    大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
    本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
    |
    27天前
    |
    SQL 数据库连接 Linux
    数据库编程:在PHP环境下使用SQL Server的方法。
    看看你吧,就像一个调皮的小丑鱼在一片广阔的数据库海洋中游弋,一路上吞下大小数据如同海中的珍珠。不管有多少难关,只要记住这个流程,剩下的就只是探索未知的乐趣,沉浸在这个充满挑战的数据库海洋中。
    45 16
    |
    29天前
    |
    SQL 关系型数据库 MySQL
    如何优化SQL查询以提高数据库性能?
    这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
    |
    6月前
    |
    SQL 开发框架 .NET
    ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
    随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
    475 3
    |
    2月前
    |
    SQL 存储 关系型数据库
    【SQL技术】不同数据库引擎 SQL 优化方案剖析
    不同数据库系统(MySQL、PostgreSQL、Doris、Hive)的SQL优化策略。存储引擎特点、SQL执行流程及常见操作(如条件查询、排序、聚合函数)的优化方法。针对各数据库,索引使用、分区裁剪、谓词下推等技术,并提供了具体的SQL示例。通用的SQL调优技巧,如避免使用`COUNT(DISTINCT)`、减少小文件问题、慎重使用`SELECT *`等。通过合理选择和应用这些优化策略,可以显著提升数据库查询性能和系统稳定性。
    112 9
    |
    3月前
    |
    SQL Java 数据库连接
    【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
    本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
    314 6
    |
    4月前
    |
    存储 JSON NoSQL
    学习 MongoDB:打开强大的数据库技术大门
    MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
    111 15
    |
    4月前
    |
    SQL Oracle 数据库
    使用访问指导(SQL Access Advisor)优化数据库业务负载
    本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
    123 11
    |
    4月前
    |
    SQL 关系型数据库 MySQL
    MySQL导入.sql文件后数据库乱码问题
    本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
    |
    4月前
    |
    SQL 监控 安全
    SQL Servers审核提高数据库安全性
    SQL Server审核是一种追踪和审查SQL Server上所有活动的机制,旨在检测潜在威胁和漏洞,监控服务器设置的更改。审核日志记录安全问题和数据泄露的详细信息,帮助管理员追踪数据库中的特定活动,确保数据安全和合规性。SQL Server审核分为服务器级和数据库级,涵盖登录、配置变更和数据操作等事件。审核工具如EventLog Analyzer提供实时监控和即时告警,帮助快速响应安全事件。

    热门文章

    最新文章