Mysql

82 阅读6分钟

数据库,DataBase,简称DB

数据库的结构

主要分为两部分,数据库管理系统和数据库,数据库往下还可分出数据表和数据

image.png

sql

语言分类

  1. DDL:数据定义语言,操作表,库,列等,create,drop,truncate等
  2. DML:数据操作语言,增删改,insert,delete,update
  3. DQL:数据查询语言,select
  4. DCL:数据控制语言
  5. TCL:事务控制语言 truncate和delete的区别:truncate是数据定义语言,直接操作数据库的结构(表等),delete是数据操作语言,操作库里的数据

语法

  1. SQL 语句可以单行或多行书写,以分号结尾
  2. 可使用空格和缩进来增强语句的可读性
  3. MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写
  4. 单行注释:-- 注释内容 #注释内容(MySQL特有)ps:数据库特有的语法称之为方言
  5. 多行注释:/* 注释内容 */
创建数据库
  1. 语法

CREATE DATABASE 数据库名称;

  1. 代码
-- 建库
CREATE DATABASE Mysql_Day_01
-- 展示所有库
SHOW DATABASES
-- 使用某个库(tab可以补全命令)
USE mysql
USE Mysql_Day_01
创建表
  1. 语法
CREATE TABLE 表名(
          列名 数据类型 约束,
          列名 数据类型 约束,
          ...
          列名 数据类型 约束
);
  1. 代码
/*
	常见数据类型:

        int:整数类型
        double:小数类型
        date:日期类型。包含年月日,格式 yyyy-MM-dd
        datetime:日期类型。包含年月日时分秒,格式 yyyy-MM-dd HH:mm:ss
        timestamp:时间戳类型。包含年月日时分秒,格式 yyyy-MM-dd HH:mm:ss
            * 如果不给该列赋值、或赋值为null,则默认使用当前系统时间自动赋值
        varchar(长度):字符串类型
        varchar和char的区别:varchar长度可变,容量更高,char放255.var6w多个
        重音符号:`可以让小海豚忽略关键字的功能(见33,35行)
        
        `id`在java类中叫做:成员变量
	在数据库中叫:字段
	面向对象:属性
	html的form表单中:字段
	编程语言中: 域
*/
NAME
CREATE TABLE stu(
	id INT,#标识
	`name` VARCHAR(20),#姓名
	chinese DOUBLE,#语文成绩
	english DOUBLE,#英语成绩
	math DOUBLE #数学成绩
)

  1. 语法:

列名和值的数量以及数据类型要对应,除了数字类型,其他数据类型的数据都需要加引号

格式1:给指定的字段赋值

insert into 表名 (字段1,字段2) values (值1,值2);

格式2:给全部字段赋值

insert into 表名 values(值1,值2,...值n);

格式3:批量添加数据

insert into 表名 (字段1,字段2) values (值1,值2),(值1,值2),(值1,值2)...;

  1. 代码:
-- 给指定字段赋值
INSERT INTO `stu` (`name`,chinese) 
VALUES ('杨晨',90)
-- 给全部字段赋值
INSERT INTO `stu` 
VALUES (1,'猫爬',90,100,80)
-- 批量添加数据
INSERT INTO `stu` 
VALUES (3,'吉思美',100,100,100),(4,'啵啵',70,70,70)
  1. 语法: UPDATE 表名 SET 列名1=值1,列名2=值2,… [WHERE 条件];

  2. 代码

-- 修改数据
UPDATE stu SET id=0,english=100,math=100 
WHERE NAME='杨晨'
-- 修改所有人的数据
UPDATE stu SET math=0
  1. 语法:DELETE FROM 表名 [WHERE 条件];

  2. 代码:

-- 删除数据 
DELETE FROM stu WHERE id=0;
-- 删除所有数据
DELETE FROM stu # 区别:DML,数据操作语言,操作数据
TRUNCATE stu    # 区别:DDL,数据定义语言,操作表
  1. 语法
关键字语法
SELECT字段列表
FROM表名列表
WHERE条件列表
GROUP BY分组字段
HAVING分组后的过滤条件
ORDER BY排序
LIMIT分页
查询全部的表数据:SELECT * FROM 表名
查询指定字段的表数据:SELECT 列名1,列名2,… FROM 表名
去除重复查询:SELECT DISTINCT 列名1,列名2,… FROM 表名
计算列的值(四则运算):SELECT 列名1 运算符(+ - * /) 列名2 FROM 表名
起别名查询:SELECT 列名 AS 别名 FROM 表名
  1. 代码:
-- 查询所有
SELECT * FROM `user` #"*"代表一列数据
-- 查询列
SELECT id FROM `user` 
-- 去除重复查询
SELECT DISTINCT math FROM `user`
SELECT DISTINCT age,address FROM `user`#去重age和address
SELECT DISTINCT * FROM `user` # 所有数据重复才判定为相同
-- 四则运算
SELECT math+2 FROM `user`
-- 起别名查询
-- 求平均值
SELECT AVG(math) AS '平均值' FROM `user`

条件查询

-- 条件查询
-- 查询english分数小于或等于80分的学生
SELECT * FROM `user` 
WHERE english>=80;
-- 查询age等于20岁的学生
SELECT * FROM `user`
WHERE age=20
-- 查询age不等于20岁的学生
SELECT * FROM `user`
WHERE age!=20
SELECT * FROM `user`
WHERE age<>20
-- 查询age大于35且性别为男的学生(两个条件同时满足)
SELECT * FROM `user`
WHERE age>35 AND sex='男'
-- 查询age大于35或性别为男的学生(两个条件其中一个满足)
SELECT * from`user`
WHERE age>35 OR sex='男'
-- 查询id是1或3或5的学生
SELECT * FROM `user`
WHERE id=1 OR id=3 OR id=5
-- 使用in关键字再次查询id是1或3或5的学生
SELECT * FROM `user`
WHERE id IN (1,3,5)
-- 查询id不是1或3或5的学生
SELECT * FROM `user`
WHERE id NOT IN (1,3,5)
-- 查询english成绩大于等于77,且小于等于87的学生
SELECT * FROM `user`
WHERE english>=77 AND english <=87
-- between 最小值 and 最大值 含头含尾
SELECT * FROM `user`
WHERE english BETWEEN 77 AND 87
-- 查询姓马的学生
SELECT * FROM `user`
WHERE NAME LIKE '马%' # %代表一个或多个字符
-- 查询姓名中包含'德'字的学生
SELECT* from`user`
WHERE NAME LIKE '%德%'
-- 查询姓马,且姓名有三个字的学生
SELECT * FROM `user`
WHERE NAME LIKE '马__' # _代替一个字符
-- 滤空
SELECT * FROM `user`
WHERE english IS NOT NULL
SELECT * FROM `user`
WHERE english IS NULL

聚合函数查询

-- 查询学生总数
SELECT COUNT(id) FROM `user`
-- 查询年龄大于40的总数
SELECT COUNT(age) FROM `user`
WHERE age>40 
-- 查询数学成绩总分
SELECT SUM(math) FROM `user`
-- 查询数学成绩平均分
SELECT AVG(math) FROM `user`
-- 查询数学成绩最高分
SELECT MAX(math) FROM `user`
-- 查询数学成绩最低分
SELECT MIN(math) FROM `user`

排序查询

-- 排序查询
-- 排序方式:ASC-升序(默认),DESC-降序
-- 如果有多个排序条件,只有当前边的条件值一样时,才会判断第二条件。
-- 查询所有数据,使用年龄降序排序
SELECT * FROM `user`
ORDER BY age DESC
-- 查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩降序排序
SELECT * FROM `user`
ORDER BY age DESC,math DESC 

分组查询

-- 分组查询
SELECT 列名列表 FROM 表名 [WHERE 条件] GROUP BY 分组列名 
[HAVING 分组后的条件过滤] 
[ORDER BY 排序列名 排序方式];
-- 用一次查询,分别展示出不同性别的数学成绩平均分
SELECT sex,AVG(math) FROM `user`
GROUP BY sex
-- 用一次查询,分别展示出不同性别的数学成绩平均分,不及格的人不统计
SELECT sex,AVG(math) FROM `user`
WHERE math>=60
GROUP BY sex
-- 用一次查询,分别展示出不同性别的数学成绩平均分,不及格的人不统计,超过90分,忽略该组成绩
SELECT sex,AVG(math) 平均分 FROM `user`
WHERE math>=60
GROUP BY sex
HAVING 平均分<90
-- 用一次查询,分别展示出不同性别的数学成绩平均分,不及格的人不统计,超过90分,忽略该组成绩,组成绩降序排序
SELECT sex,AVG(math) 平均分 FROM `user`
WHERE math>=60
GROUP BY sex
HAVING 平均分<90
ORDER BY 平均分 DESC
-- 分组统计 男女各多少人
SELECT sex,COUNT(sex) FROM `user`
GROUP BY sex 

分页查询

-- 分页查询
-- 开始索引的规律:(当前页数-1) * 每页显示的条数
-- 第一页
SELECT * FROM `user`
LIMIT 0,5
-- 第二页
SELECT * FROM `user`
LIMIT 5,5
-- 第三页
SELECT * FROM `user`
LIMIT 10,5