MySQL-2

复习

  1. Data数据-->DB数据库-->DBMS数据库管理系统

常见DBMS: MySQL oracle sql server db2 ... redis Mongodb

两大功能: 定义DDL 操纵DML

  1. 表table

创建表, 行和列

  1. MySQL数据类型

数据类型分成三大类:数值型、字符型、日期时间类

  1. 关于列属性

null值、primary key主键、auto_increment自增、default默认值、foreign key外键、comment注释

create database 数据库名

create table 表名(

id int primary key not null auto_increment comment'编号',

name varchar(10) not null comment'姓名',

gender char(1) comment'性别',

age tinyint comment'年龄',

salary decimal(m,d) comment'工资',

weight float comment'体重',

content text comment'内容',

birthday date comment'出生年月日',

status_value tinyint default 0 comment '状态0禁用 1激活',

create_time timestamp default current_timestamp comment'创建时间',

update_time timestamp default current_timestamp on update current_timestamp comment'更新时间'

)auto_increment=初始值

删除表结构

drop table 表名

插入语句 insert into 表名(字段名1,字段名2) values(值1,值2,...),(值1,值2,...);

更新语句 update 表名 set 字段名=新值, 字段名=新值 where 子句;

删除语句 delete from 表名 where子句;

查询语句 select 字段名1,字段名2,。。。 from 表名 where 子句

where子句,where是用于对行进行筛选

where 比较条件/确定范围/确定集合/and/or/not/is null/ is not null/like

like模糊匹配,通配符%和_

面试题\] drop truncate delete区别 ## 1 binary关键字区分大小写 ![](https://file.jishuzhan.net/article/1738423898631835649/7d8180d7b8db00dfa18ec8a27a17950d.webp) ## 2 as关键字 ![](https://file.jishuzhan.net/article/1738423898631835649/08ce452fbf05bc7cc3c1e49c67f2ac56.webp) ## 3统计函数 SQL提供的统计函数称为集函数. 主要的集函数:(可与DISTINCT连用) 计数函数: count(列名) 计算非空行记录个数 求和函数: sum(数值列名) 对某一列的值求和 求平均值: avg(数值列名) 对某一列的值计算平均值 求最大值: max(数值列名) 找出某一列的最大值 求最小值: min(数值列名) 找出某一列的最小值 ![](https://file.jishuzhan.net/article/1738423898631835649/f68b942fb225c3e182b87bdff5c348ac.webp) ## 4 DISTINCT去重复关键字的使用 ![](https://file.jishuzhan.net/article/1738423898631835649/44e1ed7344beb71cc220d04b65c7c4f5.webp) ## 5 注意:where子句不能使用聚合函数 ![](https://file.jishuzhan.net/article/1738423898631835649/c0f9cd00153b7e76249a87ab187cec6c.webp) ## 6 分组group by 分组可以使用"GROUP BY 列名"的写法,通常分组后都会有对组进行统计的函数的操作 以下代码查询选课表中每个学生的选课数量: select sid,count(\*) from grade group by sid ![](https://file.jishuzhan.net/article/1738423898631835649/bf81f116fcf5085e76627f4ae96a2be9.webp) ## 7对组筛选having **分完组后** ,有时只需要显示其中一部分的组的数据,如查询一个学校中人数超过40人的班级,这时就要使用HAVING子句。 以下代码从学生表中查询人数超过40人的班级: SELECT 班级,COUNT(\*) AS 人数 FROM 学生 GROUP BY 班级 HAVING 人数\>40 ![](https://file.jishuzhan.net/article/1738423898631835649/2ae8f69bdb59e131d13583fc7679e952.webp) ![](https://file.jishuzhan.net/article/1738423898631835649/2bda6b6188d959bb1813ffd288a9a8ca.webp) ## 8 排序order by 将结果集按照某一个列进行排序 desc: 降序排列 asc: 升序排列(默认) 语法: select ... from 表名 where 子句 ... order by 列1 desc/asc, 列2 desc/asc ![](https://file.jishuzhan.net/article/1738423898631835649/9cb7aadbadce16a6a03641e397d3f487.webp) ## 9 限制limit 对最终结果集记录数进行限制,实现分页功能 select... from 表 where ... limit a,b 应用程序中一般分页可以通过两种方式实现: ①基于数据库分页的物理分页(掌握); ②基于业务逻辑实现的逻辑分页 ![](https://file.jishuzhan.net/article/1738423898631835649/87348b25b6ded5947ab6bde94347393b.webp) ## 单表练习 单表基本语句练习题目:建立一个hw_student_info表。 字段名 数据类型 说明 stu_id int 学生编号 主键自增 stu_name varchar(10) 学生姓名 不可空 age int 学生年龄 可空 class_id int 班级编号 可空 course varchar(10) 选修课程名 可空 score decimal(4,1) 分数 可空 status_values tinyint 状态 可空0休学或1在读 -- 通过DDL创建表 -- 批量插入5条学生记录,数据自定义 -- 根据学生编号批量删除学生,例如删除1 3 5号学生 -- 修改表中所有学生的状态为1,设置为在读状态 -- 修改表中1班级学生的状态为0,设置为全部休学 -- 查询学生表所有信息 -- 查询所有学生的学号,姓名,年龄 -- 查询1号的学生学号,年龄,选修课程,分数信息 -- 查询1班和2班的学生信息 -- 查询在读的所有学生 -- 查询20-23岁之间的学生 -- 查询已分配班级信息的学生列表 -- 查询选修'Java'类似课程的学生列表 -- 查询'王'氏学生列表 -- 查询1班的学生总数 -- 查询每一种选修课程的人数 -- 查询班级列表 -- 查询1班的男生和女生的数量 -- 查询每个班级的人数 -- 查询1班学生的"java开发"课程最低分,最高分,和平均分 -- 查询每门选修课程的平均成绩 -- 查询班级人数大于1个的班级列表,显示出: 班级编号,总人数 -- 查询选修课程达到2人以上的选修课列表,显示出:选修课程,选修人数 -- 查询1班'Java'课程成绩前三名的学生信息(无相同分数的情况) -- 查询1班'Java'课程成绩最后一名的学生信息(无相同分数的情况) -- 查询1班'Java'课程成绩第三名的学生信息(无相同分数的情况) ## ![](https://file.jishuzhan.net/article/1738423898631835649/6a9961bd6a76fc06efa9b90c337eb87c.webp) ## 10 SQL查询语句的执行顺序 select name,max(score) as max_score from stu_score where name is not null group by name having max(score) \> 500 order by max_score limit 0,10 首先执行 from子句,从stu_score表组装数据源的数据 执行where子句,筛选stu_score表中所有数据不为NULL的数据 执行group by 子句,把stu_score表按"name"列进行分组 计算max()聚合函数,按'score'列求出每组学生中成绩的最高分 执行having,对组进行筛选 执行select列表 执行order by子句,把最后的结果按照max_score列进行升序排序 执行limit子句,筛选前10条结果 ## 11 嵌套子查询 嵌套子查询:一个查询中嵌套另一个查询 嵌套子查询分类:标量子查询、列子查询、行子查询、表子查询 7.1 标量子查询:返回1行1列, 返回单一的一个值或者字符串 SELECT \* FROM t1 WHERE column1 = (SELECT MAX(column2) FROM t2) 7.2 列子查询:返回N行1列 SELECT \* FROM article WHERE uid IN(SELECT uid FROM user WHERE status=1) 7.3 行子查询:返回1行N列 SELECT \* FROM (SELECT uid,uname FROM user WHERE status=1) as 表别名 7.4 表子查询:返回N行N列 SELECT \* FROM (SELECT \* FROM USER) AS 表别名 ![](https://file.jishuzhan.net/article/1738423898631835649/239ac3601e036f7dcbd61e6ec05364cb.webp) ## 子查询练习-继续单表练习hw_student_info 查询年龄最高的学生信息 从各课程中获取课程成绩最高分大于90分的课程,将选修这些课程的学生列出来 查询Java课程成绩大于该课程平均分的学生列表 查询Java课程班级平均分大于该课程总平均分的班级列表 查询Java课程班级平均分大于该课程总平均分的班级数量 ![](https://file.jishuzhan.net/article/1738423898631835649/ee199c4076a8f9800b9b1cd3b4ddc7b4.webp) ## 12 Navicat导入和导出表结构和数据 ### 导出表结构和数据 ![](https://file.jishuzhan.net/article/1738423898631835649/7102d92a504bf676875f04a0b1364c8b.webp) 生成一个.sql文件 ![](https://file.jishuzhan.net/article/1738423898631835649/2055919f620f2bb8ddce348030599786.webp) ### 导入表结构和数据 ![](https://file.jishuzhan.net/article/1738423898631835649/5468c512dfe73886d27f37e09bcee343.webp) ![](https://file.jishuzhan.net/article/1738423898631835649/b889ac17c4f4839f88dcbcfa7268e9b3.webp) ![](https://file.jishuzhan.net/article/1738423898631835649/8ea1c1c79fa88c486402dc8f83430463.webp)

相关推荐
SelectDB31 分钟前
天翼云与飞轮科技达成战略合作,共筑云数融合新生态
大数据·数据库·数据分析
望获linux1 小时前
【实时Linux实战系列】实时数据流处理框架分析
linux·运维·前端·数据库·chrome·操作系统·wpf
野犬寒鸦3 小时前
Pipeline功能实现Redis批处理(项目批量查询点赞情况的应用)
java·服务器·数据库·redis·后端·缓存
五岁小孩吖3 小时前
Mysql 如何使用 binlog 日志回滚操作失误的数据
mysql
꧁༺摩༒西༻꧂3 小时前
Spring Boot Actuator 监控功能的简介及禁用
java·数据库·spring boot
程序员JerrySUN3 小时前
当前主流GPU全景讲解:架构、功能与应用方向
数据库·人工智能·驱动开发·redis·缓存·架构
__Smile°3 小时前
kubeadm-k8s 中的 etcd 备份与恢复
数据库·docker·云原生·容器·kubernetes·etcd
Runing_WoNiu4 小时前
最佳左前缀法则(Optimal Left-Prefix Rule)
数据库·mysql
IvorySQL5 小时前
如何使用 pg_rman 进行 PostgreSQL 的备份与恢复
数据库
Tapdata5 小时前
一文了解增量物化视图维护(IVM):原理、演化与实践落地
数据库