MySQL总结(SQL语法 聚合函数 分页查询 多表查询)

文章目录

  • MySQL
  • 1.SQL
  • 2 DML
  • 3 DQL
    • 聚合函数
    • 分页查询
    • 多表查询
    • 模糊查询
  • 数据库设计三大范式

MySQL

MySQL®软件提供了十分快速的多线程、多用户、牢靠的SQL(结构化查询语言)数据库服务器。 MySQL服务器定位于任务关键型、重负荷生产系统,并能嵌入在大量部署的软件中。

安装
mysql8下载

mysql5.7下载

navicat下载

sqlyog下载

可以下载最新版的MySQL或者MySQL5.7,可以使用navicat或者sqlyog管理数据库。

1.SQL

SQL92和SQL99语法均为SQL语法,即structured query language,结构化查询语音,其中92和99分别对应不同的年份

File 类是文件和目录的操作类,主要用于文件和目录的创建、查找和删除等操作。

SQL92/【99】标准的四大分类 :

(A)DML(数据操纵语言):select,insert,update,delete 操作我的数据的。

(B)DDL(数据定义语言):create table,alter table,drop table,truncate table 。。。

(C)DCL(数据控制语言):grant 权限 to scott,revoke 权限 from scott 。。。

(D)TCL(事务控制语言):commit,rollback,rollback to savepoint 。。。

2 DML

insert

# DML 添加删除修改数据
# 添加数据 ``
# 语法 INSERT INTO 表名称 (字段1,字段2...)values(字段的值1,字段的值1..);
# 共 1 行受到影响
INSERT INTO `user` (username,`password`) VALUE ("小明","789");
INSERT INTO `user` (username) VALUE ("小明");

update

# where 条件
# 修改语句 update 表名称 set 字段1 = 修改的值,字段二 = 修改的值.... [where]
# 修改id为4的  把username 改成小明明
# 当修改不加条件时 , 就是修改全部记录
UPDATE `user` SET `username` = '小明明', `password` = 'abc' WHERE `id` = 4;
UPDATE `user` SET `username` = '小明明', `password` = 'abc'
\```

delete

# delete 
# 语法: DELETE FROM 表名称 [where] 
# 强制: 你们删除的时候必须加条件 
# 需求: 删除账号为小明明的用户
DELETE FROM `user` WHERE `username` = '小明明';

3 DQL

# DQL 查询数据
# 查询语句: select 列名称列表 from 表名称列表 [where] ...
# 需求:查询 user 所有记录
SELECT id,`username`,`password` FROM `user`;
# 排序: 降序和升序  asc desc
# 需求: 根据id排序查询所有的用户
# * 代表所有 
# 默认是升序 (asc)  desc : 降序
SELECT * FROM USER ORDER BY id DESC
# limit 分页查询 
# 每页3条数据 
# 查询第二页数据 4 5 6
# LIMIT 起始行数 , 查询的条数
# 如果limit 是一个值的时候 第一个数默认是0
# 当前页数 (2-1)*10 10,10 20,20 
SELECT * FROM USER LIMIT 6,3;
# SELECT * FROM USER LIMIT 4;

# 别名 as 可以省略!!
SELECT id,username 用户名称 FROM USER ;
# 条件查询
-- > 、< 、<= 、>= 、 、<> (不等于)
-- =
SELECT * FROM USER WHERE TYPE = '失效';
# 查询id 大于等5的所有用户 
# <> != 这个2个都是不等于
SELECT * FROM USER WHERE id <> 5;
# in 查询 id 为 2 5 7 的用户  IN( 集合) 
SELECT * FROM USER WHERE id IN(2,5,7);
SELECT * FROM USER WHERE id = 2 OR id = 5 OR id = 7;
# LIKE 模糊查询 % 任意的数
# 查询用户名称为1开头的所有用户
SELECT * FROM USER WHERE username LIKE "1%";
# 查询用户名称包含1的所有用户
SELECT * FROM USER WHERE username LIKE "%1%";  
# 查询用户名称为3位数的所有用户 _ : 站的位数
SELECT * FROM USER WHERE username LIKE "___";  

聚合函数

max(列名) 求这一列的最大值

min(列名) 求这一列的最小值

avg(列名) 求这一列的平均值

count(列名) 统计这一列有多少条记录

sum(列名) 对这一列求总和

分页查询

前端:传递当前页码,每页显示的记录数固定(后端写死)

后端:当前页数据 总记录数量 可以计算总页数

查询当前页数据,查询总记录数

获取第一页的记录

limit start(开始查询的下标 0) pagesize(当前页的个数)

SELECT * FORM stu LIMIT 0,2

获取第二页的记录

SELECT * FORM stu LIMIT 2,2

如果查询的记录数不足pagesize,那就按照当前记录为主

计算总记录数

SELECT COUNT(id) FROM student

多表查询

一对多

多对多

一对一

内连接

显式内连接

多表查询: 查询多个表的数据

查询语句语法:

 select 列名称列表 from 表名称列表 where ...
  1. 查询所有部门
SELECT * FROM dept
  1. 查询所有员工
SELECT * FROM emp
  1. 查询所有的员工并行显示所在部门名称

单表不能满足条件

连表查询:需要消除无用的数据(消除笛卡尔乘积)

通过where 条件消除无用的数据

SELECT * FROM emp , dept WHERE emp.dept_id=dept.id ;

连表查询分类

1.内连接

1.1 隐式内连接

需求: 查询所有用户信息,并且需要显示用户所在部门的名称

隐式内连接: 通过where条件消除无用的数据叫做隐式内连接

SELECT * FROM emp,dept WHERE emp.`dept_id` =dept.`id`;

#查出来发现有多处查询数据的字段名称一致时,可以使用别名区分

SELECT * FROM emp e,dept d WHERE e.`dept_id` =d.`id`;

SELECT e.id AS e_id ,e.name AS emp_name ,e.`gender`,

d.`id` AS d_id,d.name AS dept_name

 FROM emp e,dept d WHERE e.`dept_id` =d.`id`;

在实际开发中,如果连表查询有相同的字段一定要使用别名。

1.2 显式内连接

显式内连接和隐式内连接实现的功能是一样的。只是写法不一样

显式内连接 inner join … on

SELECT e.id AS e_id ,e.name AS emp_name ,e.`gender`,
d.`id` AS d_id,d.name AS dept_name
 FROM emp e INNER JOIN dept d ON e.`dept_id` =d.`id`;

隐式内连接和显式内连接只是写法不一致而已,实现功能没有什么区别,在实际开发中可以随便选择一种

推荐使用隐式内连接

当外键id没有赋值时,使用内连接查询,这条记录就不存在。内部默认认为没有外键的时使用连表查询时

这条记录是不合法的

但是实际开发这种有些记录是没有外键。

2.外连接

2.1 左外连接 left join … on

SELECT e.id AS e_id ,e.name AS emp_name ,e.`gender`,

d.`id` AS d_id,d.name AS dept_name

 FROM emp e LEFT JOIN dept d ON e.`dept_id` =d.`id`;

左外连接 : 以左表为基准查询结果集。会查询左表的所有记录

SELECT e.id AS e_id ,e.name AS emp_name ,e.`gender`,

d.`id` AS d_id,d.name AS dept_name

 FROM dept d LEFT JOIN emp e  ON e.`dept_id` =d.`id`;

模糊查询

SELECT 字段 FROM 表 WHERE 某字段 Like 条件

数据库设计三大范式

第一范式就是原子性,字段不可再分割;

第二范式就是完全依赖,没有部分依赖;

第三范式就是没有传递依赖。

你可能感兴趣的:(java开发,mysql,数据库)