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)

相关推荐
一叶知秋哈20 分钟前
Java应用Flink CDC监听MySQL数据变动内容输出到控制台
java·mysql·flink
傻啦嘿哟33 分钟前
Python 数据分析与可视化实战:从数据清洗到图表呈现
大数据·数据库·人工智能
cookqq1 小时前
mongodb源码分析session异步接受asyncSourceMessage()客户端流变Message对象
数据库·sql·mongodb·nosql
呼拉拉呼拉1 小时前
Redis故障转移
数据库·redis·缓存·高可用架构
什么都想学的阿超1 小时前
【Redis系列 04】Redis高可用架构实战:主从复制与哨兵模式从零到生产
数据库·redis·架构
pp-周子晗(努力赶上课程进度版)2 小时前
【MySQL】视图、用户管理、MySQL使用C\C++连接
数据库·mysql
斯特凡今天也很帅2 小时前
clickhouse常用语句汇总——持续更新中
数据库·sql·clickhouse
超级小忍3 小时前
如何配置 MySQL 允许远程连接
数据库·mysql·adb
吹牛不交税3 小时前
sqlsugar WhereIF条件的大于等于和等于查出来的坑
数据库·mysql