WEB01MySQL安装和数据库

news2025/2/27 2:54:32

第一天、WEB课程

web课程主要讲三部分内容

数据库

数据库介绍

什么是数据库

  • 数据存储的仓库,其本质也是一个文件系统

  • 数据库会按照特定的格式对数据进行存储,用户可以对数据库中的数据进行增加,修改,删除及查询操作。

数据库管理系统层次

数据库管理系统 (DataBase Management System,DBMS) 指一种操作和管理数据库的大型软件。

数据库管理系统的层次:软件-->数据库-->数据表-->数据记录

常见的数据库管理系统

业界的数据库种类有很多,我们以后见到比较多的是MySQL和Oracle

* MySQL: 开源免费的数据库,小型的数据库。已经被Oracle公司收购了,MySQL6.x版本(商业、社区)也开始收费。
* Oracle:收费的大型数据库,Oracle公司的产品。
​
* DB2:   IBM公司的数据库产品,收费的。
* SQLServer:MicroSoft公司收费的中型的数据库。C#、.net等语言常使用。

MySQL安装

系统修复

检测并添加你系统中mysql需要的一些底层类库

软件安装

将软件解压,然后把文件夹复制到D:\dev(除C盘外任意盘除非只有一个C盘)结构如下(注意:目录不能有空格 不能有中文)

设置环境变量

  1. 新建系统变量,添加MYSQL_HOME=mysql安装目录

  2. 编辑环境变量,在path中添加%MYSQL_HOME%/bin

添加配置文件

在mysql的安装目录下创建配置文件my.ini,然后将下面内容添加到文件中(直接复制粘贴,不要手写容易出错)

[mysqld]
# 设置3306端口
port=3306
# 允许最大连接数
max_connections=200
# 允许连接失败的次数
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用mysql_native_password插件认证
default_authentication_plugin=mysql_native_password
# 配置时区
default-time_zone='+8:00'
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

创建服务并启动

以管理员身份CMD运行dos命令行,并执行下面命令

# 注意调整下面数据库配置文件的位置
mysqld --install  mysql --defaults-file="D:\dev\mysql-8.0.31-winx64\my.ini"
​
# 初始化
mysqld --initialize-insecure
​
# 启动服务
net start mysql
​
# 设置root用户的密码
mysqladmin -u root password root

停止并卸载mysql

如果你想卸载MySQL,也很简单。

点击开始菜单,输入cmd,选择 "命令提示符",选择右侧的 "以管理员身份运行"。

这两个命令用于卸载mysql服务,当需要重装mysql时再执行

net stop mysql
​
mysqld --remove mysql

最后删除MySQL目录及相关的环境变量。

SQL介绍

什么是SQL

  • SQL全称Structured Query Language,翻译为:结构化查询语言

  • 是用来操作数据库的一种语言,通过sql可以实现数据库、数据表、数据记录的增删改查

  • 我们一般把增删改查称为CRUD:create创建、retrieve 检索、update 修改、delete删除

SQL分类

  • DDL(Data Definition Language) 数据定义语言:用来定义数据库,数据表

  • DML(Data Manipulation Language) 数据操作语言:用来对数据库中表的数据进行增删改

  • DQL(Data Query Language) 数据查询语言:用来对数据库中表的数据进行查询

  • DCL(Data Control Language) 数据控制语言:用来定义数据库的访问权限和安全级别以及创建用户

  • TCL(Transaction Control Language) 事务控制语言:用于控制数据库的事务操作

书写标准

  1. SQL可以单行书写,也可以多行书写, 它以;结束一条SQL语句

  2. 在windows环境中SQL语句是不区分大小写的

  3. 在SQL中可以使用注释,一般有两种:单行注释 -- 注释内容 和 多行注释 /* 注释内容 */

数据库操作

连接数据库

-- 语法
mysql [-h 服务器地址  -P 端口号] -u用户名 -p密码
​
--实例
mysql -uroot -p

经典错误1: ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061) 表示数据库服务停止了

经典错误2: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 表示你的用户名和密码不对

创建数据库

需求:创建一个名为db1的数据库

-- 语法
create database [IF NOT EXISTS] 数据库名;
​
-- 实例
create database if not exists db1;

查询数据库

需求:查看所有数据数据库

-- 语法
show databases;

删除数据库

需求:删除名为db1的数据库

-- 语法
drop database [IF EXISTS] 数据库名;
​
-- 实例
drop database if exists db1;

切换数据库

需求:查看正在使用的数据库

-- 语法
select database();

需求:切换正在使用的数据库为db1(db1必须存在)

-- 语法
use 数据库名;
​
-- 实例
create database if not exists db1;
use db1;
select database();

数据库工具

连接数据库

打开连接窗口

  1. 点击idea左下角的图标

    ,在弹出框中选择Database

  2. 在idea右边侧边栏中选中Database

  3. 点击+号,然后选择Data Source中的MySQL

选择驱动版本

选择驱动版本,版本号选择8.0.13 Class选择com.mysql.cj.jdbc.Driver

建立连接

填写数据库服务地址、端口、账号、密码,点击测试,通过之后,点击ok保存连接

操作数据库

查看数据库

查看所有的数据库,相当于 show databases;

创建数据库

创建数据库,相当于create database 数据库名;

删除数据库

删除数据库,相当于 drop database 数据库名;

切换数据库

切换数据库,相当于use 数据库名

数据表操作

创建数据表

基本语法

需求:在db1中创建一张名为student1的数据表,表中字段的要求如下

  1. id:标识,数字类型

  2. name:姓名,字符串类型,长度限制最多30个字符

  3. gender:性别,字符串类型,长度限制为1个字符

  4. age:年龄,数值类型

  5. birthday:生日,日期类型,格式YYYY-mm-dd

-- 语法
    create table 表名(    
        字段名1  字段类型1(字段长度) [ comment  字段1注释 ],  -- 不是;号    
        字段名2  字段类型2(字段长度) [ comment  字段2注释 ],   
        ....    
        字段名n  字段类型n(字段长度) [ comment  字段n注释 ]-- 最后一列后面是没有,的
    ) [ comment  表注释 ];
    
-- 实例
create table student1(
    id int comment '标识',
    name varchar(30) comment '姓名',
    gender varchar(1) comment '性别',
    age int comment '年龄',
    birthday date comment '生日'
) comment '学生表';

数据类型

下面列出了最常见的一些数据类型,详细的参照资料中的单独文档

需求:在db1中创建一张名为student2的数据表,要求跟student1一致,数据类型要更符合设计原则

-- 实例
create table student2(
     id int comment '标识',
     name varchar(30) comment '姓名',
     gender char(1) comment '性别', -- 性别,长度固定,采用char更合适
     age tinyint unsigned comment '年龄', -- 年龄,采用无符号的tinyint更合适
     birthday date comment '生日'
) comment '学生表';

数据约束

约束用于对表中的数据进行进一步的限制,一般作用在表中的字段上,用于保证数据的正确性。

约束种类有:主键约束、唯一约束、非空约束、默认值、外键约束。

需求:在db1中创建一张名为student3的数据表,表中字段的要求如下:

  1. id:数字类型,主键字段,并且数值自动增长

  2. name:字符串类型,长度限制最多30个字符,要求姓名不能出现重复

  3. gender:字符串类型,长度限制为1个字符,如果不插入,默认为男

  4. age:数值类型,不能为空

  5. birthday:日期类型,格式YYYY-mm-dd

-- 语法
    create table 表名(    
        字段名1  字段类型1(字段长度) [ 约束 ]  [ comment  字段1注释 ],  -- 不是;号    
        字段名2  字段类型2(字段长度) [ 约束 ]  [ comment  字段2注释 ],   
        ....    
        字段名n  字段类型n(字段长度) [ 约束 ]  [ comment  字段2注释 ] -- 最后一列后面是没有,的
    ) [ comment  表注释 ];
    
-- 实例
create table student3(
     id int primary key comment '标识',
     name varchar(30) unique comment '姓名',
     gender char(1) default '男' comment '性别',
     age tinyint unsigned not null comment '年龄',
     birthday date comment '生日'
) comment '学生表';

添加完约束之后,可以查询添加一些违法数据,观察报错

-- id重复会报错   Duplicate entry '1' for key 'PRIMARY'
-- 姓名重复会报错 Duplicate entry '黑张三' for key 'name'
-- age为null,会报错  Column 'age' cannot be null

查询数据表

查询当前数据库所有表:show tables

查询表结构:desc 表名

查询建表语句:show create table 表名

-- 1. 查看当前库中的所有数据表
show tables;
​
-- 2. 查看student3表的表结构
desc student3;
​
-- 3. 查看student3表的建表语句
show create table student3;

修改数据表

添加字段:alter table 表名 add 字段名 类型(长度)

修改字段类型:alter table 表名 modify 字段名 新数据类型(长度)

修改字段名和字段类型:alter table 表名 change 旧字段名 新字段名 类型 (长度)

删除字段:alter table 表名 drop column 字段名

修改表名: rename table 表名 to 新表名

-- 1. 修改student3表, 添加一列description 变长字符串类型,长度30
alter table student3 add description varchar(30);
​
-- 2. 修改student3表 description列为定长字符串类型,长度40
alter table student3 modify description char(40);
​
-- 3. 修改student3表 description列名为descr,变长字符串类型,长度20
alter table student3 change description descr varchar(20);
​
-- 4. 删除student3表的descr列
alter table student3 drop column descr;
​
-- 5. 修改student3表的名称为stu
rename table student3 to stu;

删除数据表

删除表:drop table [ if exists ] 表名

-- 删除stu表
drop table stu;

注意事项

  • 在删除表时,表中的全部数据也会被删除

表设计案例

需求:参考资料中提供的《智能学习辅助系统》页面原型,设计员工管理模块的表结构(暂不考虑所属部门字段)

drop table if exists tb_emp;
create table tb_emp(
       id int primary key auto_increment comment '主键ID',
       username    varchar(20)                  unique not null comment '用户名',
       password    varchar(32) default '123456' null comment '密码',
       name        varchar(10)                  not null comment '姓名',
       gender      tinyint unsigned             not null comment '性别, 1 男, 2 女',
       image       varchar(300)                 null comment '图像url',
       job         tinyint unsigned             null comment '职位, 1 班主任 , 2 讲师 , 3 学工主管, 4 教研主管',
       entrydate   date                         null comment '入职日期',
       create_time datetime                     not null comment '创建时间',
       update_time datetime                     not null comment '修改时间'
) comment '员工表';

增删改数据

DML

  • DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作

插入数据

指定字段添加数据:insert into 表名 (字段名1, 字段名2) values (值1, 值2)

全部字段添加数据:insert into 表名 values (值1, 值2, ...)

-- 1. 为 tb_emp 表的 username, name, gender, create_time, update_time 字段插入值
insert into tb_emp(username, name, gender, create_time, update_time) values ('zhangsan', '张三', 1, now(), now());
​
-- 2. 为 tb_emp 表的 所有字段插入值
insert into tb_emp(id, username, password, name, gender, image, job, entrydate, create_time, update_time)
            values (null, 'lisi', 'admin', '李四', 0, '1.jpg', 1, '2011-01-01', now(), now());
​
insert into tb_emp values (null, 'wangwu', '123', '王五', 0, '1.jpg', 1, '2011-01-01', now(), now());
​
-- 注意    
    1. 插入数据时,指定的字段顺序需要与值的顺序是一一对应的
    2. 字符串和日期型数据应该包含在引号中

批量添加数据(指定字段):insert into 表名 (字段名1, 字段名2) values (值1, 值2), (值1, 值2)

批量添加数据(全部字段):insert into 表名 values (值1, 值2, ...), (值1, 值2, ...)

-- 3. 批量为 为 tb_emp 表的 username , name , gender, create_time, update_time 字段插入数据
insert into tb_emp(username, name, gender, create_time, update_time)
        values ('zhangsan1', '张三1', 1, now(), now())
              ,('zhangsan2', '张三2', 1, now(), now());

注意事项

  • 插入数据时,指定的字段顺序需要与值的顺序是一一对应的。

  • 字符串和日期型数据应该包含在引号中。

  • 插入的数据大小,应该在字段的规定范围内。

修改数据

修改数据

  • update 表名 set 字段名1 = 值1 , 字段名2 = 值2 , .... [ where 条件 ]

注意事项

  • 修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据

-- 1. 将 tb_emp 表的所有员工的入职日期更新为'2010-01-01'
update tb_emp set entrydate = '2010-01-01';
​
-- 2. 将 tb_emp 表的ID为1员工 姓名name字段更新为'黑马'
update tb_emp set name = '黑马' where id = 1;
​
-- 3. 将 tb_emp 表的ID为1员工 姓名name字段更新为'传智',入职日期更新为'2022-01-01'
update tb_emp set name = '传智',entrydate = '2022-01-01' where id = 1;
​
-- 注意   
    如果idea不让修改所有数据就在where后面加一个1=1 例如: update tb_emp set entrydate = '2010-01-01' where 1=1;
    修改语句中如果不加条件,则将所有数据都会被修改!

删除数据

删除数据

  • delete from 表名 [ where 条件 ]

注意事项

  • DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。

  • DELETE 语句不能删除某一个字段的值(如果要操作,可以使用UPDATE,将该字段的值置为NULL)。

-- 1. 删除 tb_emp 表中ID为1的员工
delete from tb_emp where id = 1;
​
-- 2. 删除 tb_emp 表中的所有员工
delete from tb_emp;
​
-- 注意
    如果在idea中不让删除所有 就在where后面加一个 1=1   例如:delete from tb_emp where 1=1;
    删除语句中如果不加条件,则将所有数据都会被删除!    

小结

-- 增加   
insert into 表名 values(值1,值2...)
​
-- 修改   
update 表名 set 列1=值1,列2=值2 [where 条件]
​
-- 删除   
delete from 表名 [where 条件]

查询数据

创建数据库,使用下面sql创建数据

-- 员工管理(带约束)
drop table if exists tb_emp;
create table tb_emp (
    id int unsigned primary key auto_increment comment 'ID',
    username varchar(20) not null unique comment '用户名',
    password varchar(32) default '123456' comment '密码',
    name varchar(10) not null comment '姓名',
    gender tinyint unsigned not null comment '性别, 说明: 1 男, 2 女',
    image varchar(300) comment '图像',
    job tinyint unsigned comment '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管',
    entrydate date comment '入职时间',
    create_time datetime not null comment '创建时间',
    update_time datetime not null comment '修改时间'
) comment '员工表';
​
-- 准备测试数据
INSERT INTO tb_emp (id, username, password, name, gender, image, job, entrydate, create_time, update_time) VALUES
    (1, 'jinyong', '123456', '金庸', 1, '1.jpg', 4, '2000-01-01', '2022-10-27 16:35:33', '2022-10-27 16:35:35'),
    (2, 'zhangwuji', '123456', '张无忌', 1, '2.jpg', 2, '2015-01-01', '2022-10-27 16:35:33', '2022-10-27 16:35:37'),
    (3, 'yangxiao', '123456', '杨逍', 1, '3.jpg', 2, '2008-05-01', '2022-10-27 16:35:33', '2022-10-27 16:35:39'),
    (4, 'weiyixiao', '123456', '韦一笑', 1, '4.jpg', 2, '2007-01-01', '2022-10-27 16:35:33', '2022-10-27 16:35:41'),
    (5, 'changyuchun', '123456', '常遇春', 1, '5.jpg', 2, '2012-12-05', '2022-10-27 16:35:33', '2022-10-27 16:35:43'),
    (6, 'xiaozhao', '123456', '小昭', 2, '6.jpg', 3, '2013-09-05', '2022-10-27 16:35:33', '2022-10-27 16:35:45'),
    (7, 'jixiaofu', '123456', '纪晓芙', 2, '7.jpg', 1, '2005-08-01', '2022-10-27 16:35:33', '2022-10-27 16:35:47'),
    (8, 'zhouzhiruo', '123456', '周芷若', 2, '8.jpg', 1, '2014-11-09', '2022-10-27 16:35:33', '2022-10-27 16:35:49'),
    (9, 'dingminjun', '123456', '丁敏君', 2, '9.jpg', 1, '2011-03-11', '2022-10-27 16:35:33', '2022-10-27 16:35:51'),
    (10, 'zhaomin', '123456', '赵敏', 2, '10.jpg', 1, '2013-09-05', '2022-10-27 16:35:33', '2022-10-27 16:35:53'),
    (11, 'luzhangke', '123456', '鹿杖客', 1, '11.jpg', 2, '2007-02-01', '2022-10-27 16:35:33', '2022-10-27 16:35:55'),
    (12, 'hebiweng', '123456', '鹤笔翁', 1, '12.jpg', 2, '2008-08-18', '2022-10-27 16:35:33', '2022-10-27 16:35:57'),
    (13, 'fangdongbai', '123456', '方东白', 1, '13.jpg', 1, '2012-11-01', '2022-10-27 16:35:33', '2022-10-27 16:35:59'),
    (14, 'zhangsanfeng', '123456', '张三丰', 1, '14.jpg', 2, '2002-08-01', '2022-10-27 16:35:33', '2022-10-27 16:36:01'),
    (15, 'yulianzhou', '123456', '俞莲舟', 1, '15.jpg', 2, '2011-05-01', '2022-10-27 16:35:33', '2022-10-27 16:36:03'),
    (16, 'songyuanqiao', '123456', '宋远桥', 1, '16.jpg', 2, '2010-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:05'),
    (17, 'chenyouliang', '12345678', '陈友谅', 1, '17.jpg', null, '2015-03-21', '2022-10-27 16:35:33', '2022-10-27 16:36:07'),
    (18, 'zhang1', '123456', '张一', 1, '2.jpg', 2, '2015-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:09'),
    (19, 'zhang2', '123456', '张二', 1, '2.jpg', 2, '2012-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:11'),
    (20, 'zhang3', '123456', '张三', 1, '2.jpg', 2, '2018-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:13'),
    (21, 'zhang4', '123456', '张四', 1, '2.jpg', 2, '2015-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:15'),
    (22, 'zhang5', '123456', '张五', 1, '2.jpg', 2, '2016-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:17'),
    (23, 'zhang6', '123456', '张六', 1, '2.jpg', 2, '2012-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:19'),
    (24, 'zhang7', '123456', '张七', 1, '2.jpg', 2, '2006-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:21'),
    (25, 'zhang8', '123456', '张八', 1, '2.jpg', 2, '2002-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:23'),
    (26, 'zhang9', '123456', '张九', 1, '2.jpg', 2, '2011-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:25'),
    (27, 'zhang10', '123456', '张十', 1, '2.jpg', 2, '2004-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:27'),
    (28, 'zhang11', '123456', '张十一', 1, '2.jpg', 2, '2007-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:29'),
    (29, 'zhang12', '123456', '张十二', 1, '2.jpg', 2, '2020-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:31');

基本查询

DQL

  • DQL英文全称是Data Query Language(数据查询语言),用来查询数据库表中的记录

  • 关键字:SELECT

查询指定字段:select 字段1, 字段2, 字段3 from 表名

查询所有字段:select * from 表名

设置别名:select 字段1 [ as 别名1 ] , 字段2 [ as 别名2 ] from 表名

去除重复记录:select distinct 字段列表 from 表名

注意事项: 号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率)

-- 1. 查询指定字段 name,entrydate 并返回
select name,entrydate from tb_emp;
​
-- 2. 查询返回所有字段
select * from tb_emp;
​
-- 3. 查询所有员工的 name,entrydate, 并起别名(姓名、入职日期)  --- as 关键字可以省略
select name as '姓名' ,entrydate as '入职日期' from tb_emp;
select name  '姓名' ,entrydate '入职日期' from tb_emp;
​
-- 4. 查询员工有哪几种职位(不要重复)
select distinct job from tb_emp;
​

条件查询

条件查询

  • select 字段列表 from 表名 where 条件列表

-- 1-1. 查询 姓名 为 杨逍 的员工
select * from tb_emp where name = '杨逍';
​
-- 1-2. 查询在 id小于等于5 的员工信息
select * from tb_emp where id <=5;
​
-- 1-3. 查询 密码不等于 '123456' 的员工信息
select * from tb_emp where password != '123456';
​
-- 1-4. 查询 没有分配职位 的员工信息
select * from tb_emp where job is null;
​
-- 1-5. 查询 有职位 的员工信息
select * from tb_emp where job is not null;
​
​
-- 2-1. 查询 id<=5 并且 job=2  的员工信息
select * from tb_emp where id <=5 and job = 2;
​
-- 2-1. 查询 id<=5 或者 job=2  的员工信息
select * from tb_emp where id <=5 or job = 2;
​
​
-- 3-1. 查询入职日期 在 '2000-01-01' (包含) 到 '2010-01-01'(包含) 之间的员工信息
select * from tb_emp where entrydate >= '2000-01-01' and entrydate <= '2010-01-01';
select * from tb_emp where entrydate between '2000-01-01' and '2010-01-01';
​
-- 3-2. 查询职位是 2 (讲师), 3 (学工主管), 4 (教研主管) 的员工信息
select * from tb_emp where job = 2 or job = 3 or job = 4;
select * from tb_emp where job in (2,3,4);
​
​
-- 4-1. 查询姓 '张' 的员工信息
select * from tb_emp where name like '张%';
​
-- 4-2. 查询姓名中包含 '三' 的员工信息
select * from tb_emp where name like '%三%';
​
-- 4-3. 查询姓'张',并且姓名为三个字的员工信息
select * from tb_emp where name like '张__';

聚合函数

聚合函数

  • 将一列数据作为一个整体,进行纵向计算,语法为: select 聚合函数(字段名) from 表名

注意事项:

  • null值不参与所有聚合函数运算。

  • 统计数量可以使用:count() count(字段) count(常量),推荐使用count()

-- 1. 统计该企业员工数量
select count(*) from tb_emp;
select count(id) from tb_emp; -- 不包含空值的列
select count(1) from tb_emp; -- 任意数字
​
-- 2. 统计该企业最早入职的员工的入职日期
select min(entrydate) from tb_emp;
​
-- 3. 统计该企业最迟入职的员工的入职日期
select max(entrydate) from tb_emp;
​
-- 4. 统计该企业员工ID的平均值
select avg(id) from tb_emp;
​
-- 5. 统计该企业员工的ID之和
select sum(id) from tb_emp;
​

分组过滤

分组过滤

  • select 分组字段,聚合函数() from 表名 group by 分组字段名 having 分组后过滤条件

where与having区别

  • 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤

  • 判断条件不同:where不能对聚合函数进行判断,而having可以

注意事项

  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义

  • 执行顺序: where > 聚合函数 > having

-- 1. 根据性别分组, 统计男性和女性员工的数量
select gender,count(1) from tb_emp group by gender;
​
-- 2. 先查询入职时间在 '2015-01-01' (包含) 以前的员工
select * from tb_emp where entrydate <= '2015-01-01';
​
-- 3. 先查询入职时间在 '2015-01-01' (包含) 以前的员工,并对结果根据职位分组
select job,count(1) from tb_emp where entrydate <= '2015-01-01' group by job;
​
-- 4. 先查询入职时间在 '2015-01-01' (包含) 以前的员工,并对结果根据职位分组,获取员工数量大于等于2的职位
select job,count(1) from tb_emp where entrydate <= '2015-01-01' group by job having count(1) > 2;
​

排序

排序

  • select 字段列表 from 表名 order by 字段1 排序方式1 , 字段2 排序方式2

ASC:升序(默认值)

DESC:降序

注意事项

  • 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序

-- 1. 根据入职时间,对员工进行降序排序
select * from tb_emp order by entrydate desc;
​
-- 2. 根据入职时间,对员工进行升序排序
select * from tb_emp order by entrydate asc;
​
-- 3. 根据入职时间对公司的员工进行升序排序,入职时间相同再按照ID进行降序排序
select * from tb_emp order by entrydate asc, id desc;

分页

分页:

  • select 字段列表 from 表名 limit 起始索引, 查询记录数

注意事项

  • 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。

  • 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。

  • 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。

-- 1. 查询第1页员工数据, 每页展示5条记录
select * from tb_emp limit 0,5;
​
-- 2. 查询第2页员工数据, 每页展示5条记录
select * from tb_emp limit 5,5;
​
-- 3. 查询第3页员工数据, 每页展示5条记录
select * from tb_emp limit 10,5;
​
-- 4. 查询第4页员工数据, 每页展示5条记录
select * from tb_emp limit 15,5;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1894857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

航空数据管控系统-②项目分析与设计:任务2:使用Git或SVN管理项目(可选任务,只介绍Git安装)

任务描述 1、安装Git 2、注册GitHub 3、配置本地库 4、配置远程库 5、使用Git管理项目 任务指导 分为以下几个部分完成&#xff1a; 学会Git的安装&#xff0c;帐号注册本地存储库的管理自己创建一个项目&#xff0c;项目名称为自己的名字&#xff0c;上传到代码仓库&#xff…

秋招突击——设计模式补充——单例模式、依赖倒转原则、工厂方法模式

文章目录 引言正文依赖倒转原则工厂方法模式工厂模式的实现简单工厂和工厂方法的对比 抽线工厂模式最基本的数据访问程序使用工厂模式实现数据库的访问使用抽象工厂模式的数据访问程序抽象工厂模式的优点和缺点使用反射抽象工厂的数据访问程序使用反射配置文件实现数据访问程序…

iPad卡在白苹果开不了机怎么办?3种解决办法!

iPad开机卡在白苹果&#xff1f;iPad Air 黑屏重启白苹果&#xff1f;iPad Pro 莫名关机&#xff0c;开机白苹果无法启动&#xff1f;iPad mini 摔落、泡水等&#xff0c;开机一直显示白苹果&#xff0c;iPad出现这些情况怎么办&#xff1f; 无论是使用iPad、iPad Air、iPad P…

WCCI 2024第三弹:忍者表演惊艳全场,盛大晚宴不容错过

WCCI 2024第三弹&#xff1a;忍者表演惊艳全场&#xff0c;盛大晚宴不容错过&#xff01; 会议之眼 快讯 会议介绍 IEEE WCCI&#xff08;World Congress on Computational Intelligence&#xff09;2024&#xff0c;即2024年IEEE世界计算智能大会&#xff0c;于6月30日至7月…

【第17章】MyBatis-Plus自动维护DDL

文章目录 前言一、功能概述二、注意事项三、代码示例四、实战1. 准备2. ddl配置类3. 程序启动4. 效果(数据库) 总结 前言 在MyBatis-Plus的3.5.3版本中&#xff0c;引入了一项强大的功能&#xff1a;数据库DDL&#xff08;数据定义语言&#xff09;表结构的自动维护。这一功能…

安全事件响应管理系统好用?10项功能不可或缺

网络安全事件的发生&#xff0c;往往意味着一家企业的生产经营活动将受到重大影响&#xff0c;甚至会面临法律层面的违规处罚。因此&#xff0c;企业必须提前准备好响应网络安全事件的措施&#xff0c;并制定流程清晰、目标明确的事件响应计划。而为了有效提升企业的网络安全事…

企业数据API平台:获取企业多维度信息

数据API平台是指提供一系列预先定义的接口、协议与工具&#xff0c;允许不同应用程序或系统之间进行数据交换和通信的平台。这些接口被称为数据API&#xff08;Data Application Programming Interface&#xff09;&#xff0c;是数据管理系统或应用程序提供的一组开放式接口。…

【CSAPP】-linklab实验

目录 实验目的与要求 实验原理与内容 实验步骤 实验设备与软件环境 实验过程与结果&#xff08;可贴图&#xff09; 实验总结 实验目的与要求 1.了解链接的基本概念和链接过程所要完成的任务。 2.理解ELF目标代码和目标代码文件的基本概念和基本构成 3.了解ELF可重定位目…

Cloudflare 推出一款免费对抗 AI 机器人的可防止抓取数据工具

上市云服务提供商Cloudflare推出了一种新的免费工具&#xff0c;可防止机器人抓取其平台上托管的网站以获取数据以训练AI模型。 一些人工智能供应商&#xff0c;包括谷歌、OpenAI 和苹果&#xff0c;允许网站所有者通过修改他们网站的robots.txt来阻止他们用于数据抓取和模型训…

Movable antenna 早期研究

原英文论文名字Historical Review of Fluid Antenna and Movable Antenna 最近&#xff0c;无线通信研究界对“流体天线”和“可移动天线”两种新兴天线技术的发展引起了极大的关注&#xff0c;这两种技术因其前所未有的灵活性和可重构性而极大地提高了无线应用中的系统性能。…

推荐 2个功能强大的黑科技工具,真的会让你直呼卧槽

Waifu2X Waifu2x 是一个基于深度学习的开源项目&#xff0c;主要用于处理二次元动漫风格的图像。它使用卷积神经网络&#xff08;CNN&#xff09;进行超分辨率处理和降噪&#xff0c;能够将图像放大2倍或更多&#xff0c;同时显著提高清晰度和减少噪声。Waifu2x 特别针对日系漫…

如何在TikTok上获得更多观看量:12个流量秘诀

TikTok作为热门海外社媒&#xff0c;在跨境出海行业中成为新兴的推广渠道&#xff0c;但你知道如何让你的TikTok赢得更多关注次数吗&#xff1f;如果您正在寻找增加 TikTok 观看次数的方法&#xff0c;接下来这12种策略&#xff0c;你需要一一做好&#xff01; 1. 在内容中添加…

菊风 Juphoon | 直击 MWC 2024 上海首日开幕

​ 6月26日&#xff0c;上海世界移动通信大会&#xff08;MWC 2024&#xff09;在上海新国际博览中心正式开幕&#xff0c;以“未来先行”为大会主题&#xff0c;为期三天&#xff08;6月26日 - 6月28日&#xff09;&#xff0c;吸引了来自全球的数千名参展商和观众&#xff0…

99. 岛屿数量

题目描述&#xff1a;给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成&#xff0c;并且四周都是水域。你可以假设矩阵外均被水包围。 输入描述&#xff1a…

YOLOv8

YOLOv8 设计快速、准确且易于使用&#xff0c;使其成为各种物体检测与跟踪、实例分割、图像分类和姿态估计任务的绝佳选择框架 1.安装YOLOv8 创建虚拟环境 conda create --name ros2 python3.10 激活虚拟环境 conda activate ros2 安装组件 pip install ultralytics -i h…

classin视频下载提取为mp4教程

最近在上classin网课&#xff0c;无奈网课视频要过期了&#xff0c;所以想保存下来&#xff01; 下面介绍提取的教程 我们可以绕过最开始的握手&#xff0c;就是先播放了一段时间后&#xff0c;再打开抓包&#xff0c;回到Classin播放后&#xff0c;就可以获得网课链接了 直接打…

智慧矿山:EasyCVR助力矿井视频多业务融合及视频转发服务建设

一、方案背景 随着矿井安全生产要求的不断提高&#xff0c;视频监控、数据传输、通讯联络等业务的需求日益增长。为满足矿井生产管理的多元化需求&#xff0c;提高矿井作业的安全性和效率&#xff0c;TSINGSEE青犀EasyCVR视频汇聚/安防监控综合管理平台&#xff0c;旨在构建一…

Buuctf之不一样的flag(迷宫题)

首先&#xff0c;进行查壳无壳&#xff0c;32bit&#xff0c;丢进ida32中进行反编译进入main函数&#xff0c;对其进行分析&#xff0c;可以在一旁打上注释&#xff0c;这边最关键的一个点就是&#xff0c;需要联想到这是一个迷宫题&#xff0c;很小的迷宫题&#xff0c;迷宫就…

easyexcel使用小结-未完待续

官网&#xff1a;https://easyexcel.opensource.alibaba.com/docs/current/ <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>4.0.1</version></dependency>一、读 1.1简单读 Getter…

《昇思25天学习打卡营第8天|模型训练》

文章目录 今日所学&#xff1a;一、构建数据集二、定义神经网络模型三、了解超参、损失函数和优化器1. 超参2. 损失函数3. 优化器 四、训练与评估总结 今日所学&#xff1a; 在今天这一节我主要学习了模型的训练&#xff0c;知道了模型训练一般分为四个步骤&#xff1a; 构建…