MySQL基础学习笔记
学习笔记
- 1. 基础小知识
- 1.1 数据库分类
- 1.2 下载安装、变量配置过程(略)
- 1.3 连接命令
- 1.4 连接mysql服务端的软件选择
- 1.4.1 要求不高的话,选择有很多
- 1.4.2 适合做企业级管理的工具(适合团队协作)
- 1.4.3 总结
- 1.5 编程语言连接 MySQL(编程语言驱动)
- 1.5.1 Python(PyMySQL / mysql-connector-python)
- 1.5.2 Java(JDBC)
- 1.5.3 Node.js(mysql2 / Sequelize)
- 2. 基本操作语句
- 2.1 DDL 操作数据库对象
- 2.1.1 DDL 操作数据库
- 2.1.2 DDL 操作表
- 2.2 DML 操作表中数据
- 2.2.1 插入操作
- 2.2.2 修改删除
- 2.3 DCL 控制语句
- 2.3.1 创建、删除用户
- 2.3.2 用户授权
- 2.3.3 权限查询
- 2.3.4 权限撤销
- 2.4 DQL查询语句 !!!
- 2.4.1 简单查询
- 2.4.2 条件查询
- 2.4.3 模糊查询
- 2.4.4 字段控制查询
- (1)去除重复记录
- (2)查看两列之和(必须均为数值型)
- (3)给列名加别名
- 2.4.5 排序
- 2.4.6 聚合函数
- 2.4.7 分组查询
- 2.4.8 LIMIT
- (1)分页查询
1. 基础小知识
1.1 数据库分类
- 关系型(SQL)
- 特点
- 数据以表格形式存储,有严格的字段定义,支持SQL语言查询,适合处理结构化数据。
- 结构清晰,易于维护。但数据结构固定,灵活性低
- 代表产品
- MySQL:免费、适合中小型项目(电商、博客、论坛等需要事务支持的场景)。但处理复杂查询时性能下降,不适合集群扩展。
- PostgreSQL:支持复杂查询(如地理数据、JSON),适合高并发和大数据量(如地理信息系统(GIS)、数据分析、企业级复杂业务系统)。但是内存消耗较大,学习成本高。
- Oracle:适合大型企业核心系统(如银行核心交易系统、电信计费系统)。但贵!授权费用高,运维复杂。
- SQL Server:适合企业级开发(企业内部ERP、CRM系统)。但主要运行在Windows服务器,跨平台支持差。
- 特点
- 非关系型(NoSQL)
- 数据结构灵活,适合高并发、海量数据,弱化事务一致性。
- 代表产品
- 文档型数据库
- MongoDB:数据结构灵活(类似JSON),读写快,适合快速迭代的业务(内容管理系统、用户行为日志存储)。但不支持多表联查,事务支持较弱,不适合复杂的关系型数据模型。
- CouchDB:仅以JSON格式存储数据,支持动态数据结构,适合存储半结构化或非结构化数据(内容管理系统(CMS))。适合分布式应用。支持数据在移动设备和浏览器本地存储,适合需要离线操作的场景(移动应用)。复杂查询能力较弱,尤其是对于动态查询。
- 键值对数据库
- Redis:内存存储,速度极快,但数据量受内存限制,持久化可能丢数据。适合缓存、秒杀库存、实时排行榜
- Memcached:高速缓存,内存读写速度极快,适合高并发场景。且易于集成到各种应用中。功能简单,内存和CPU开销较低。通过一致性哈希算法实现分布式缓存,适合大规模分布式系统。 数据存在内存中,同样受内存限制,重启后数据会丢失,不适合需要持久化存储。服务器故障可能导致缓存数据丢失,需要在应用层处理,缺乏高可用机制。
- 列族数据库
- Apache Cassandra:分布式架构,写入速度快,适合海量数据和高可用、高吞吐量场景。但查询灵活性差,学习成本高。适合物联网设备数据、日志存储,适合时间序列数据、大数据分析、物联网、社交应用等场景。
- 图数据库
- Neo4j:适合关系型数据,支持图形查询和分析,适合复杂关系网络分析(如社交网络分析、推荐系统、网络和IT运营分析等场景)。不适合大规模数据,硬件要求高。
- 搜索引擎数据库
- Elasticsearch:通过HTTP使用JSON进行数据索引,是一个分布式、高扩展、高实时的搜索与数据分析引擎,全文搜索能力强,支持模糊查询和实时分析。写入性能一般,数据一致性弱。适合网页、新闻、商品搜索,适合日志分析、舆情监控等场景。它通常跟 LogStash、Kibana 配合,形成一套对日志系统进行分析反馈的集成解决方案 ELK,LogStash收集日志数据,Kibana进行分析与可视化。
- 文档型数据库
- CURD操作:增删改查操作
- SQL 语句分类
- DDL(Data Definition Language):数据定义语言,用来定义数据库对象:数据库、表、列等。
- DML(Data Manipulation Language):数据操作语言,用来对数据库中的表记录进行增、删、改。
- DCL(Data Control Language):数据控制语言,用来定义数据库的访问权限和安全级别,还有创建用户。
- DQL(Data Query Language):数据查询语言,用来查询数据库中表的记录。(这个是重点!)
注意:sql语句以;结尾。mysql中的关键字不区分大小写
1.2 下载安装、变量配置过程(略)
网上有很多安装配置过程记录,这边就不记了,注意安装时,卸载其他版本的mysql数据库。
cmd窗口的版本查询命令 mysql -V
、mysql --version
1.3 连接命令
mysql -h[数据库服务端IP] -P[数据库服务端口] -u[用户名] -p[密码]
mysql -u[用户名] -p[密码]
#退出
quit 或 exit
#修改账户密码,注意命令尾的分号一定要有,这是mysql的语法
alter user 'root'@'localhost' identified with mysql_native_password BY '新密码';
数据库服务端IP:默认为 127.0.0.1
数据库服务端口:默认为 3306
-u 后面是登录的用户名,mysql安装之后,自带一个root用户
-p 后面是登录用户密码,如果不填写,回车之后,会提示输入密码
我连了一下,报错了,ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)。在 cmd 命令行里启动服务,结果显示 拒绝访问。
去 服务 里找mysql ,启动类型设为自动,然后启动服务,右键刷新后,显示 mysql 服务正在启动。再连一下就连上了。
1.4 连接mysql服务端的软件选择
1.4.1 要求不高的话,选择有很多
- MySQL Workbench:官方提供的免费可视化工具,支持Windows、Linux和MacOS。适合数据库管理员DBA、开发人员。
- Navicat:付费。支持多种数据库(MySQL、PostgreSQL、Oracle 等)。适合企业级数据库管理,适合需要高效管理多个MySQL数据库的开发者和数据库管理员,尤其是注重数据可视化和团队协作的用户。
- DBeaver:开源免费,支持几乎所有数据库(MySQL、SQLite、MongoDB 等)。支持 SQL 编辑、数据可视化、ER 图生成。适合开发者和数据库管理员,尤其是需要管理多种数据库的用户。
- HeidiSQL:免费,适用于多种数据库系统,包括MySQL、MariaDB等。适合小型到中等规模的数据库管理,以及需要简单易用的图形化管理工具的用户。
- SQLyog:支持远程。适合开发人员和数据库管理员进行日常的数据库管理和操作。
- MobaXterm:支持SSH、Telnet、Rlogin、SFTP等多种协议。能够轻松连接远程MySQL数据库,还能进行Redis等其他服务的连接和管理。适合需要同时管理多种远程服务的开发者,特别是那些需要在同一工具中处理多种协议的用户。
- TablePlus:付费,据说体验很棒。适合 Mac 用户,追求 UI 体验的用户。支持多数据库(MySQL、PostgreSQL、Redis 等)。支持 SQL 格式化、数据导出为 CSV/JSON。
1.4.2 适合做企业级管理的工具(适合团队协作)
- phpMyAdmin(Web 版 MySQL 管理):团队共享管理,基于浏览器访问,适合远程管理。适合小团队,但安全性较低,不建议暴露在公网。
- Adminer(轻量级 phpMyAdmin 替代):支持多种数据库。
1.4.3 总结
需求 | 推荐 |
---|---|
图形化管理 | MySQL Workbench、Navicat、DBeaver |
命令行操作 | mysql 原生客户端(就是windows中cmd里头连接服务那一套)、MyCLI |
Python 开发 | PyMySQL、SQLAlchemy |
Java 开发 | JDBC(mysql-connector-java) |
Web 管理 | phpMyAdmin、Adminer |
1.5 编程语言连接 MySQL(编程语言驱动)
1.5.1 Python(PyMySQL / mysql-connector-python)
import pymysqlconn = pymysql.connect(host="localhost",user="root",password="123456",database="test_db"
)cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
print(cursor.fetchall())
conn.close()
1.5.2 Java(JDBC)
import java.sql.*;public class MySQLDemo {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/test_db";String user = "root";String password = "123456";try (Connection conn = DriverManager.getConnection(url, user, password)) {Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT * FROM users");while (rs.next()) {System.out.println(rs.getString("username"));}} catch (SQLException e) {e.printStackTrace();}}
}
1.5.3 Node.js(mysql2 / Sequelize)
const mysql = require('mysql2');const connection = mysql.createConnection({host: 'localhost',user: 'root',password: '123456',database: 'test_db'
});connection.query('SELECT * FROM users', (err, results) => {console.log(results);
});
2. 基本操作语句
通用语法:
- SQL语句以分号 ; 结尾
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
- 可用 /* */、–、# 的方式写注释
2.1 DDL 操作数据库对象
关键词建议用大写。
2.1.1 DDL 操作数据库
#创建数据库
CREATE DATABASE [数据库名];
CREATE DATABASE IF NOT EXISTS [数据库名];
CREATE DATABASE [数据库名] CHARACTER SET [编码方式];
CREATE DATABASE [数据库名] CHARSET='[编码方式]';
CREATE DATABASE [数据库名] SET [编码方式] COLLATE [排序规则];#查看当前服务器中所有数据库
SHOW DATABASES;#查看创建的数据库的定义信息
SHOW CREATE DATABASE [数据库名];#修改某数据库的编码方式
ALTER DATABASE [数据库名] CHARACTER SET [编码方式];#删除数据库—— 实际工作中不要删除数据库!!!
DROP DATABASE [数据库名];#查看当前数据库
SELECT DATABASE();#使用指定的数据库或切换数据库
USE [数据库名];
2.1.2 DDL 操作表
#建表
CREATE TABLE 表名(
列名1 数据类型 [约束],
列名2 数据类型 [约束],
列名n 数据类型 [约束]
);
表名、列名是自定义,多列之间用逗号间隔,最后一列的逗号不能写,[约束] 按需求添加,类型必须写。若列名与关键字相同,则需在列两边加 ‘ ’
数据类型选取原则:满足需求的前提下,选择取值范围小的,够用就行。
- int:整型,占 4 字节,32 比特;
- tinyint:最小整型,占 1 字节,8 比特;
- bigint:最大整型,占 8 字节,64 比特;
- double:浮点型,如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;默认支持四舍五入;
- char:固定长度字符串类型;char(10) ‘aaa’ 占10位;
- varchar:可变长度字符串类型; varchar(10) ‘aaa’ 占3位;
- text:字符串类型,比如小说信息;
- blob:字节类型,保存文件信息(视频,音频,图片);
- date:日期类型,格式为:yyyy-MM-dd;
- time:时间类型,格式为:hh:mm:ss;
- timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值;
- datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
常见约束:
- 主键 primary key:唯一标识表中的一行记录。 MySQL 建议所有表的主键字段都叫 id, 类型为 int unsigned。
- 非空 not null:此字段不允许填写空值。NULL表示空
- 惟一 unique:此字段的值不允许重复。
- 默认 default:当不填写字段对应的值会使用默认值,如果填写时以填写为准。
- 外键 foreign key:对关系字段进行约束, 当为关系字段填写值时, 会到关联的表中查询此值是否存在, 如果存在则填写成功, 如果不存在则填写失败并抛出异常。
- 自增 auto_increment:1 2 3 这样自增。
#查看当前数据库已有的表
SHOW TABLES;#查看指定表的字段信息
DESC [表名];#查看表格创建细节
SHOW CREATE TABLE [表名];#修改指定表名
RENAME TABLE [旧表名] TO [新表名];
ALTER TABLE [旧表名] RENAME [新表名];#修改表的字符集
ALTER TABLE [旧表名] CHARACTER SET [编码方式];#删除指定数据表
DROP TABLE [表名];#增加列
ALTER TABLE [表名] ADD [新列名] [新数据类型(长度)] [约束];#修改列字段
ALTER TABLE [表名] MODIFY [列名] [新数据类型];
ALTER TABLE [表名] CHANGE [旧列名] [新列名] [新数据类型(长度)] [约束];#删除列,一次只能删除一列
ALTER TABLE [表名] DROP [列名];
2.2 DML 操作表中数据
在mysql中,字符串类型和日期类型都要用单引号括起来。
2.2.1 插入操作
- 多列和多个列值间用逗号隔开;
- 列名要和列值一一对应;
- 非数值的列值两侧需要加单引号;
- 给所有列添加数据时,可以省略列名,此时列值的顺序按表中列的顺序执行;
insert into 表名(列名) values(数据值);#如:
#insert into student(stuname,stuage,stusex,birthday) values('张三1',18,'a','2000- 1-1');#同时添加多行,列名与列值的类型、个数、顺序要一一对应,插入空值用null,插入的日期和字符一样,都使用引号括起来。
insert into 表名(列名1,列名2,...) values(第一行数据),(第二行数据),(...),(...);#一次添加多条记录
insert into 表 values(值1,值2,....),(值1,值2,....),...;
2.2.2 修改删除
#修改
UPDATE 表名 SET 列名1=列值1,列名2=列值2 ... WHERE 列名=值;
#改所有行
UPDATE 表名 SET 列名1=列值1,列名2=列值2 ... ;#删除
DELETE from 表名 [WHERE 列名=值]#获取当前系统时间
select now();
- DELETE 删除表中的数据,表结构还在,删除后的数据可以找回。且不会重置主键自增序列(不清零)
- TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表,会重置主键自增序列(清零)。删除的数据不能找回。执行速度比DELETE快。
2.3 DCL 控制语句
2.3.1 创建、删除用户
#指定IP
create user 用户名@指定ip identified by 密码;
#任意IP均可登陆
create user 用户名@‘%’ identified by 密码;#删除 drop user 用户名@IP;
drop user test123@localhost;
2.3.2 用户授权
#给指定用户,授予指定指定数据库指定权限
#grant 权限1,权限2,........,权限n on 数据库名.* to 用户名@IP;
grant select,insert,update,delete,create on chaoshi.* to 'test456'@'127.0.0.1';#给指定用户授予所有数据库所有权限
#grant all on . to 用户名@IP
grant all on *.* to 'test456'@'127.0.0.1';
2.3.3 权限查询
#show grants for 用户名@IP;
show grants for 'root'@'%';
2.3.4 权限撤销
#revoke 权限1,权限2,........,权限n on 数据库名.* from 用户名@IP;
REVOKE SELECT ON *.* FROM 'root'@'%' ;
2.4 DQL查询语句 !!!
查询返回的结果集是一张虚拟表。
SELECT 要查询的列名称 FROM 表名称
WHERE 限定条件 /行条件/
GROUP BY grouping_columns /对结果分组/
HAVING condition /分组后的行条件/
ORDER BY sorting_columns /对结果分组/
LIMIT offset_start, row_count /结果限定/
案例:
#1> 创建学生表并添加数据#创建表 stu
CREATE TABLE stu ( sid CHAR(6),sname VARCHAR(50), age INT, gender VARCHAR(50)
);#添加数据
INSERT INTO stu VALUES('S_1001', 'liuYi', 35, 'male');
INSERT INTO stu VALUES('S_1002', 'chenEr', 15, 'female');
INSERT INTO stu VALUES('S_1003', 'zhangSan', 95, 'male');
INSERT INTO stu VALUES('S_1004', 'liSi', 65, 'female');
INSERT INTO stu VALUES('S_1005', 'wangWu', 55, 'male');
INSERT INTO stu VALUES('S_1006', 'zhaoLiu', 75, 'female');
INSERT INTO stu VALUES('S_1007', 'sunQi', 25, 'male');
INSERT INTO stu VALUES('S_1008', 'zhouBa', 45, 'female');
INSERT INTO stu VALUES('S_1009', 'wuJiu', 85, 'male');
INSERT INTO stu VALUES('S_1010', 'zhengShi', 5, 'female');
INSERT INTO stu VALUES('S_1011', 'xxx', NULL, NULL);#2>创建雇员表并添加数据
#创建雇员表
CREATE TABLE emp2( empno INT, ename VARCHAR(50), job VARCHAR(50), mgr INT, hiredate DATE, sal DECIMAL(7,2), comm decimal(7,2), deptno INT ); #添加数据
INSERT INTO emp2 values(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERT INTO emp2 values(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO emp2 values(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO emp2 values(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO emp2 values(7654,'MARTIN','SALESMAN',7698,'1981-09- 28',1250,1400,30);
INSERT INTO emp2 values(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO emp2 values(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO emp2 values(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);
INSERT INTO emp2 values(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO emp2 values(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO emp2 values(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);#3> 创建部门表并添加数据
#创建部门表
CREATE TABLE dept( deptno INT, dname varchar(14), loc varchar(13) );#添加数据
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');
2.4.1 简单查询
#查所有列
SELECT * FROM 表名;
#查询指定列
SELECT 列1,列2,.. FROM 表名;
2.4.2 条件查询
在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:=、!=、<>、<、<=、>、>=; BETWEEN…AND; IN(set); IS NULL; AND;OR; NOT;
举例:
#查询学生表stu中,性别为女,并且年龄50以内的记录
SELECT * FROM stu WHERE gender='female' AND age<50;#查询学生表stu中,学号为S_1001,或者姓名为liSi的记录
SELECT * FROM stu WHERE sid ='S_1001' OR sname='liSi';#查询学生表stu中,学号为S_1001,S_1002,S_1003的记录
SELECT * FROM stu WHERE sid IN ('S_1001','S_1002','S_1003');#查询学生表stu中,学号不是S_1001,S_1002,S_1003的记录
SELECT * FROM tab_student WHERE sid NOT IN('S1001','S1002','S_1003');#查询年龄为null的记录
SELECT * FROM stu WHERE age IS NULL;#查询年龄在20到40之间的学生记录
SELECT * FROM stu WHERE age>=20 AND age<=40;
#列名 between 开始值 and 结束值;//注意:1.开始值<结束值 2.包含临界值的
SELECT * FROM stu WHERE age BETWEEN 20 AND 40;#查询性别非男的学生记录
SELECT * FROM stu WHERE gender!='male';
SELECT * FROM stu WHERE gender<>'male';
SELECT * FROM stu WHERE NOT gender='male';#查询姓名不为null的学生记录
SELECT * FROM stu WHERE NOT sname IS NULL;
SELECT * FROM stu WHERE sname IS NOT NULL;
2.4.3 模糊查询
列名 like ‘表达式’ //表达式必须是字符串
通配符:
_: 任意一个字符
%:任意0~n个字符,‘张%’
#查询姓名由3个字构成的学生记录
SELECT * FROM stu WHERE sname LIKE '___';
#查询姓名由5个字母构成,并且第5个字母为“i”的学生记录
SELECT * FROM stu WHERE sname LIKE '____i';
#查询姓名以“z”开头的学生记录
SELECT * FROM stu WHERE sname LIKE 'z%';
#查询姓名中第2个字母为“i”的学生记录
SELECT * FROM stu WHERE sname LIKE '_i%';
#查询姓名中包含“a”字母的学生记录
SELECT * FROM stu WHERE sname LIKE '%a%';
2.4.4 字段控制查询
(1)去除重复记录
两行或两行以上记录中系列的上的数据都相同。
如emp表中sal字段就存在相同的记录。当只查询emp表的sal字段时,那么会出现重复记录,那么想去除重复记录,需要使用 DISTINCT。
#SELECT DISTINCT 字段名 FROM 表名;
SELECT DISTINCT sal FROM emp;
(2)查看两列之和(必须均为数值型)
# SELECT *,列名1+列名2 FROM 表名;
SELECT *,sal+comm FROM emp;# 若 comm列(列2)中有NULL,任何东西 + NULL 结果均为 NULL,把 NULL转成数值0的函数 IFNULL()
# SELECT *,列名1+IFNULL(列名2,0) FROM 表名;
SELECT *,sal+IFNULL(comm,0) FROM emp;
(3)给列名加别名
如(2)中查询出现 sal+IFNULL(comm,0)列,给他一个别名 total :
SELECT *, sal+IFNULL(comm,0) AS total FROM emp;
# 也可省略 AS 关键字:
SELECT *,sal+IFNULL(comm,0) total FROM emp;
2.4.5 排序
order by 列名 asc/desc;
//asc 升序 desc 降序 默认不写的话是升序
例如:
#查询所有学生记录,按年龄升序排序
SELECT * FROM stu ORDER BY age ASC;
SELECT * FROM stu ORDER BY age;
#查询所有学生记录,按年龄降序排序
SELECT * FROM stu ORDER BY age DESC;
2.4.6 聚合函数
- COUNT(列名):统计指定列不为NULL的记录行数;
- MAX(列名):计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
- MIN(列名):计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
- SUM(列名):计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
- AVG(列名):计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
案例如下
#查询emp表中记录数
SELECT COUNT(*) AS cnt FROM emp;#查询emp表中有佣金的人数:count()函数是comm列,则只统计comm列非NULL的行数。
SELECT COUNT(comm) cnt FROM emp;#查询emp表中月薪大于2500的人数:
SELECT COUNT(*) FROM emp WHERE sal > 2500;#统计月薪与佣金之和大于2500元的人数:
SELECT COUNT(*) AS cnt FROM emp WHERE sal+IFNULL(COMM,0) > 2500;#查询有佣金的人数,以及有领导的人数:
SELECT COUNT(comm), COUNT(mgr) FROM emp;#SUM 和 AVG
#需要纵向求和时使用sum()函数
#查询所有雇员月薪和
SELECT SUM(sal) FROM emp;#查询所有雇员月薪和,以及所有雇员佣金和
SELECT SUM(SAL),SUM(IFNULL(comm,0)) FROM emp;
#查询所有雇员月薪+佣金和
SELECT SUM(sal+IFNULL(comm,0)) FROM emp;#统计所有员工平均工资
SELECT AVG(sal) FROM emp;#MAX 和 MIN
#查询最高工资和最低工资
SELECT MAX(sal),MIN(sal) FROM emp;
2.4.7 分组查询
GROUP BY 子句
如果查询语句中有分组操作,则select后面能添加的只能是聚合函数和被分组的列名。
#查询每个部门的部门编号和每个部门的工资和
SELECT deptno,SUM(sal) FROM emp GROUP BY deptno;#查询每个部门的部门编号和每个部门的人数
SELECT deptno,COUNT(*) FROM emp GROUP BY deptno;#查询每个部门的部门编号以及每个部门工资大于1500的人数
SELECT deptno,COUNT(*) FROM emp WHERE sal>1500 GROUP BY deptno;
HAVING 子句
- having 是在分组后对数据进行过滤,where 是在分组前对数据进行过滤。
- having 后面可以使用分组函数(统计函数),where后面不可以使用分组函数。
- WHERE 是对分组前记录的条件,如果某行记录没有满足 WHERE 子句的条件,那么这行记录不会参加分组;而 HAVING 是对分组后数据的约束。
#查询工资总和大于9000的部门编号以及工资和
SELECT deptno,SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal)>9000;#多列分组
#统计出stu表中每个班级的男女生各多少人
SELECT gradename,gender,COUNT(*) FROM stu GROUP BY gradename,gender;
2.4.8 LIMIT
限定查询结果的起始行,以及总行数。起始行从0开始,即第一行开始!
limit 开始下标,显示条数;//开始下标从0开始
limit 显示条数;//表示默认从0开始获取数据
#查询5行记录,起始行从0开始
SELECT * FROM emp LIMIT 0,5;#查询10行记录,起始行从3开始
SELECT * FROM emp LIMIT 3,10;
(1)分页查询
若一页的记录为10条,要查看第3页记录:
第一页记录起始行为0,一共查询10行; limit 0,10
第二页记录起始行为10,一共查询10行;limit 10,10
第三页记录起始行为20,一共查询10行; limit 20,10
pageIndex 页码值 , pageSize 每页显示条数
limit (pageIndex-1)*pageSize, pageSize;
查询语句的书写顺序
select – from- where- groupby- having- order by-limit
查询语句的执行顺序
from - where -group by -having - select - order by-limit
相关文章:
MySQL基础学习笔记
学习笔记 1. 基础小知识1.1 数据库分类1.2 下载安装、变量配置过程(略)1.3 连接命令1.4 连接mysql服务端的软件选择1.4.1 要求不高的话,选择有很多1.4.2 适合做企业级管理的工具(适合团队协作)1.4.3 总结 1.5 编程语言…...
[Linux]进程状态、僵尸进程处理回收、进程优先级 + 图例展示
目录 一、进程状态 1.一般操作系统学科的进程状态 二、Linux操作系统的进程状态 运行状态(R) 睡眠状态(S) 深度睡眠状态(D) 暂停状态(T) 追踪暂停状态&#x…...
2022 年 6 月青少年软编等考 C 语言七级真题解析
目录 T1. 有多少种二叉树思路分析T2. 城堡问题T3. 快速堆猪思路分析T4. 重建二叉树思路分析T1. 有多少种二叉树 题目链接:SOJ D1189 输入 n ( 1 < n < 13 ) n\ (1<n<13) n (1<n<13),求 n n n 个结点的二叉树有多少种形态? 思路分析 此题考查 C a…...
flutter修改 Container 中的 Text 和 Image 的样式
在Flutter中,Container 是一个常用的布局组件,它可以包含子组件(如文本、图片等),并允许你通过设置各种属性来自定义样式。如果你需要修改 Container 中的 Text 和 Image 的样式,可以通过以下方式实现。 1.…...
零基础入门unity游戏开发——动画篇】Animation动画窗口,创建编辑动画
考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、…...
【设计模式】命令模式
简介 假设你有一个智能家居遥控器,上面有多个按钮,每个按钮对应不同的设备操作(如开灯、关灯、调空调温度)。 命令模式的解决方案是: 将每个操作(如“开灯”)封装成一个独立的命令对象&#x…...
Python作业3 字符田字格绘制
字符田字格绘制:编写程序,用字符方式打印输出一个简单的田字格,要求采用函数方式,以田字格宽度为参数,能够根据参数绘制任意大小的田字格。 def draw(n):line 3 * n 1for i in range(1, line 1):if i % 3 1:print(n * " —— —— ", end"&quo…...
文章记单词 | 第23篇(六级)
一,单词释义 occupy /ˈɒkjupaɪ/v. 占用,占领,使忙碌thermal /ˈθɜːml/adj. 热的,热量的,保暖的;n. 热气流persistent /pəˈsɪstənt/adj. 执着的,坚持不懈的,持续存在的wee…...
【算法】滑动窗口
什么是滑动窗口算法? 滑动窗口算法本质上就是双指针的一种情况,当两个指针进行移动的方向是同一个方向,并且这两个指针并不会向后回退,一直是往一个方向进行移动的。这也就是滑动窗口的使用场景。 滑动窗口算法的一般步骤 进窗…...
可视化工具
在PyTorch中,可视化工具对于模型调试、性能分析和结果解释至关重要。以下是常用的可视化工具及其应用场景: 1. 训练过程监控 TensorBoard (PyTorch官方集成) 用途:跟踪训练指标(损失、准确率)、可视化模型结构、分析…...
hashtable遍历的方法有哪些
在 Java 中,遍历 Hashtable(或其现代替代品 HashMap)有多种方式,以下是 6 种常用方法的详细说明和代码示例: 1. 使用 keySet() 增强 for 循环 Hashtable<String, Integer> table new Hashtable<>(); // …...
LeetCode --- 443周赛
题目列表 Q1. 到达每个位置的最小费用 Q2. 子字符串连接后的最长回文串 I Q3. 子字符串连接后的最长回文串 II Q4. 使 K 个子数组内元素相等的最少操作数 一、到达每个位置的最小费用 题目要求返回从队尾到达任意位置的最小费用,规则:如果下标 i i i …...
从零构建大语言模型全栈开发指南:附录与资源-3.面试与进阶-200道大模型面试真题与职业发展路线图-基础理论篇50题
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 附录与资源-3. 面试与进阶:200道大模型面试真题与职业发展路线图一、大模型面试真题分类与解析1. 基础理论篇(50+题精选)2. 进阶实战篇(50+题精选)3. 应用场景篇(70题精选)二、职业发展路线图1. …...
使用Android Studio开发基于Java+xml的安卓app之环境搭建
以下是使用Android Studio搭建基于Java和XML的Android应用开发环境的详细步骤: 一、系统要求 操作系统:Windows 7/8/10/11(64位)内存:建议8GB及以上磁盘空间:至少5GB空闲(建议预留10GB以上&…...
GD32H759IMT6 Cortex-M7 OpenHarmony轻量系统移植——4.1版本升级到5.0.3
笔者在去年利用国庆时间,将Cortex-M7 的国产厂商兆易创新GD32H459移植OpenHarmony轻量系统,但是适配不太完善——只能选择liteos-m接管中断。这样导致使用中断非常麻烦。于是笔者最近将接管中断模式修改为不接管,这样可以方便的使用gd32提供的…...
学习汇编随手记
学习汇编随手记 前言 本笔记是关于王爽汇编的笔记,覆盖不全,到了内中断就完结了,听从学长建议,我跑去学xv6了,x86告辞。 1. 寄存器 1.1 寄存器初步 (A,B,C,D)X是通用寄存器,通常存放一般性数据&#x…...
打造高效英文单词记忆系统:基于Python的实现与分析
在当今全球化的世界中,掌握一门外语已成为必不可少的技能。对于许多学习者来说,记忆大量的英文单词是一个漫长而艰难的过程。为了提高学习效率,我们开发了一个基于Python的英文单词记忆系统。这个系统结合了数据管理、复习计划、学习统计和测试练习等多个模块,旨在为用户提…...
【漫话机器学习系列】182.噪声修正线性单元(Noisy ReLU)
噪声修正线性单元(Noisy ReLU)详解 1. 引言 在深度学习中,修正线性单元(ReLU, Rectified Linear Unit) 是一种常见的激活函数,具有计算简单、梯度稳定等优点。然而,ReLU 也有一些缺点…...
连续数据离散化与逆离散化策略
数学语言描述: 在区间[a,b]中有一组符合某分布的数据: 1.求相同区间中另一组符合同样分布的数据与这组数据的均方误差 2.求区间中点与数据的均方误差 3.求在区间中均匀分布的一组数据与这组数据的均方误差 一:同分布数据随机映射 假设在…...
《安富莱嵌入式周报》第352期:手持开源终端,基于参数阵列的定向扬声器,炫酷ASCII播放器,PCB电阻箱,支持1Ω到500KΩ,Pebble智能手表代码重构
周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版 https://www.bilibili.com/video/BV1DEf3YiEqE/ 《安富莱嵌入式周报》第352期:手持开源终端&#x…...
游戏引擎学习第205天
回顾 我们今天要实现的是一些实体浏览功能,原本是昨天就计划好的,但因为渲染上的一些问题耽搁了一些时间。 实际上,我们遇到的并不是一个真正的bug,尽管我们花了大约40分钟才搞清楚,最终发现它只是渲染方式的一个正常…...
Boost库搜索引擎项目(版本1)
Boost库搜索引擎 项目开源地址 Github:https://github.com/H0308/BoostSearchingEngine Gitee:https://gitee.com/EPSDA/BoostSearchingEngine 版本声明 当前为最初版本,后续会根据其他内容对当前项目进行修改,具体见后续版本…...
复古千禧Y2风格霓虹发光酸性镀铬金属短片音乐视频文字标题动画AE/PR模板
踏入时光机,重温 21 世纪初大胆、未来主义和超光彩的美学!这是一个动态的 After Effects 模板,旨在重现千禧年的标志性视觉效果——铬反射、霓虹灯发光、闪亮的金属和流畅的动态图形。无论您是在制作时尚宣传片、怀旧音乐视频还是时尚的社交媒…...
如何高效使用 Ubuntu 中文官方网站
Ubuntu 中文官方网站 一、快速导航与核心模块 首页焦点区 顶部菜单栏:快速访问「下载」「文档」「支持」「商店」等核心功能。轮播图区:展示最新版本(如 Ubuntu 24.04 LTS)和特色功能(如 Ubuntu Pro 订阅服务)。搜索框:支持中文关键词搜索(如 "边缘计算"),…...
简单多状态dp问题 + 总结(一)
文章目录 按摩师题解代码 打家劫舍II题解代码 删除并获得点数题解代码 粉刷房子题解代码 按摩师 题目链接 题解 1. 细节处理:题目是有没有客人的时候,所有n等于零时返回零 2. 状态表示:到达i位置时的最长预约时长 3. 状态转移方程…...
2022 CCF CSP-S2.假期计划
题目 4732. 假期计划 算法标签: 搜索, 枚举, 贪心 思路 最多转车 k k k次等价于路线长度小于等于 k 1 k 1 k1, 经过的点没有限制, 注意到点的数量 2500 2500 2500, 因此 n 2 n ^ 2 n2的时间复杂度是可以考虑的, 边的数量 10000 10000 10000, n m n \times m nm时间复杂…...
STM32低功耗模式详解:睡眠、停机、待机模式原理与实践(下) | 零基础入门STM32第九十三步
主题内容教学目的/扩展视频低功耗模式什么是低功耗,模式介绍,切换方法。为电池设备开发做准备。 师从洋桃电子,杜洋老师 📑文章目录 一、低功耗模式基本工作原理1.1 功耗层级对比1.2 工作流程 二、睡眠模式实践2.1 测试程序解析2.…...
【Docker】在Orin Nano上使用Docker
1、安装Docker 1)使用 SDKManager 烧写系统时,选择NVIDIA Container Runtime,将会安装Docker, 并将 NVIDIA GPU 暴露给容器中的应用程序,这样可以在Docker中使用GPU等NVIDIA的特性。 2)使用命令安装 添加源 distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \…...
C# 程序脱壳,去除强签名StrongNameRemove
由于.net程序的运行机制,利用Reflector,ilspy等反射工具很容易就能看到原代码。很多程序都做了代码混淆,加壳。代码混淆后反编译乱码,不容易理解;加壳使反编译工具不能正常反射,提示无效的程序集。 需要做…...
【mongodb】mongodb和MySQL体系结构的对比
目录 1. 说明2. 数据存储模型2.1 MySQL2.2 MongoDB 3. 扩展性3.1 MySQL3.2 MongoDB 4. 查询语言4.1 MySQL4.2 MongoDB 5. 索引和性能5.1 MySQL5.2 MongoDB 6. 一致性模型6.1 MySQL6.2 MongoDB 7. 架构组件7.1 MySQL7.2 MongoDB 8. 使用场景7.1 MySQL7.2 MongoDB 9. 总结对比表 …...
【深度学习新浪潮】视觉与多模态大模型文字生成技术研究进展与产品实践
一、研究进展 跨模态架构创新 原生多模态模型:微软KOSMOS系列通过统一框架支持文本、图像、语音等多模态输入输出,实现跨模态推理与迁移。例如,KOSMOS-2.5可处理文本密集图像,生成结构化文本描述,并通过重采样模块优化视觉与语言的对齐。混合专家架构:第三代模型(如Deep…...
麒麟系统桌面版本v10安装教程
下载地址 共享文件下载 - Kylin Distro 虚拟机安装教程 选择默认兼容 内核数量选择2个 内存给2g 存储为单个文件的话,占用你内存大,多个文件的话,用多少就占多少内存 打开虚拟机 开机 补充 安装来源 Live 安装:通过镜像文件进行…...
Python-文件操作
1. 文件操作基础 1.1 打开文件 在Python中使用open()函数来打开文件: file open(example.txt, r) # 以只读模式打开文件文件打开模式: r - 只读(默认)w - 写入,会覆盖已有文件a - 追加,写入到文件末尾…...
Apache 配置负载均衡详解(含配置示例)
Apache 是互联网上最受欢迎的 Web 服务器之一。除了基本的网页服务,它还能通过模块扩展出丰富的功能。其中一个重要用途就是将 Apache 配置成负载均衡器,用于在多个后端服务器之间分配流量,提升网站的性能和稳定性。Google Gemini中国版调用G…...
文章记单词 | 第24篇(六级)
一,单词释义 liner:名词,意为 “班轮;邮轮;衬里;画线者”convention:名词,意为 “大会;会议;习俗;惯例;公约;协定”lavat…...
日本汽车规模性经济计划失败,日产三大品牌的合并合作共赢,还是绝地求生?本田与日产合并确认失败,将成为世界第三大汽车集团愿景失败
本田与日产(含三菱汽车)的合并计划最终因核心矛盾无法调和而宣告失败,这一事件揭示了传统车企在行业变革期的深层困境。以下从合并动机、失败原因、本质判断及未来影响等方面综合分析: 一、合并的初衷:生存压力主导的被动策略 市场危机与财务困境 中国市场溃败:日系品牌在…...
人工智能赋能工业制造:智能制造的未来之路
一、引言 随着人工智能技术的飞速发展,其应用场景不断拓展,从消费电子到医疗健康,从金融科技到交通运输,几乎涵盖了所有行业。而工业制造作为国民经济的支柱产业,也在人工智能的浪潮中迎来了深刻的变革。智能制造&…...
支持selenium的chrome driver更新到135.0.7049.42
最近chrome释放新版本:135.0.7049.42 如果运行selenium自动化测试出现以下问题,是需要升级chromedriver才可以解决的。 selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only su…...
C++/Qt 模拟sensornetwork的工作
C/Qt 可视化模拟sensornetwork的工作 C/Qt 模拟sensornetwork的工作 C/Qt 可视化模拟sensornetwork的工作内容简介(一) 需求和规格说明(1)问题描述(2)设计目的(3)基本要求࿰…...
无状态版的DHCPv6是不是SLAAC? 笔记250405
无状态版的DHCPv6是不是SLAAC? 笔记250405 无状态版 DHCPv6 不是 SLAAC,但二者在 IPv6 网络中可协同工作。以下是核心区别与协作关系: 本质区别 特性SLAAC无状态 DHCPv6主要功能生成 IPv6 地址(基于路由器通告的前缀)分发 DNS、…...
前端判断值相等的方法和区别
1. (宽松相等) 在比较之前会进行类型转换 可能导致一些意外的结果 0 // true 0 0 // true false 0 // true null undefined // true [1,2,3]1,2,3 // true2. (严格相等) 不进行类型转换 类型和值都必须相同 0 // false 0 0 // false false 0 /…...
AWS全球化低延迟架构实战:助力APP快速上架欧美、加拿大、澳大利亚
作者:AWS解决方案架构师 关键词:AWS全球架构、低延迟优化、多区域部署、Serverless、GDPR合规 一、客户需求分析 客户计划将APP上架至欧美(欧盟)、加拿大、澳大利亚等地区,并要求: 全球用户低延迟访问&…...
Maven使用
配置 Maven repository 教学视频 windows环境 idea配置 Maven项目结构 src:主项目文件 main:项目文件,其中java存放java文件,resource存放其他文件如图片文件等;test存放测试文件,如果需要也可以自己创建一个resources文件 target:主要存放我运行后的jar包等,以及一些…...
笔试强训题(7)
目录 1. Day371.1 旋转字符串(字符串)1.2 合并k个已排序的链表(链表)1.3 滑雪(记忆化搜索) 2. Day382.1 天使果冻(递推 DP)2.2 dd爱旋转(模拟)2.3 小红取数&…...
2023-2024总结记录
概括经历 这一年算是一个人生节点,2023年花了一整年的时间在准备考研,基本上等于一个人奋战,我不怎么去图书馆,只呆在无人的实验室,还好有对象陪我,不然可能要抑郁了。作息上还是很随意,什么时…...
类初始化、类加载、垃圾回收---JVM
创建对象过程 类加载 一个类从被加载到虚拟机内存中开始,到从内存中卸载,整个生命周期需要经过七个阶段:加载 、验证、准备、解析、初始化、使用和卸载。 类加载过程分为三个主要步骤:加载、链接、初始化 加载:通过…...
交换机与ARP
交换机与 ARP(Address Resolution Protocol,地址解析协议) 的关系主要体现在 局域网(LAN)内设备通信的地址解析与数据帧转发 过程中。以下是二者的核心关联: 1. 基本角色 交换机:工作在 数据链…...
元宇宙概念下,UI 设计如何打造沉浸式体验?
一、元宇宙时代UI设计的核心趋势 在元宇宙概念下,UI设计的核心目标是打造沉浸式体验,让用户在虚拟世界中感受到身临其境的交互效果。以下是元宇宙时代UI设计的几个核心趋势: 沉浸式体验设计 元宇宙的核心是提供沉浸式体验,UI设计…...
pycharm 有智能提示,但是没法自动导包,也就是alt+enter无效果
找到file->settings->editor->inspections 把python勾选上,原来不能用是因为只勾选了一部分。...
神经网络与深度学习:案例与实践——第三章(3)
神经网络与深度学习:案例与实践——第三章(3)——基于Softmax回归完成鸢尾花分类任务 实践流程主要包括以下7个步骤:数据处理、模型构建、损失函数定义、优化器构建、模型训练、模型评价和模型预测等, ①数据处理&am…...