操作数据库

连接数据库

mysql -h主机名 -u用户名 -p密码 或 mysql -u用户名 -p密码

微信截图_20211105233018.png

退出数据库

exit quit

查看已经创建的数据库

SHOW DATABASES;

注意

  • mysql不严格区分大小写
  • 分号作为结束符,必须写

image.png

查看数据库版本

select version();

image.png

创建数据库

CREATE DATABASE 数据库名;
CREATE DATABASE 数据库名 charset=utf8;

注意

  • charset:指定编码为utf8

查看创建数据库

SHOW CREATE DATABASE 数据库名;

image.png

使用数据库

USE 数据库名;

查看当前使用的数据库

SELECT DATABASE();

image.png

删除数据库

DROP DATABASE 数据库名;

image.png

注意

  • SQL语句不区分大小写
  • 每行必须以英文状态下分号作为结束
  • 当数据库名称有特殊字符时,使用`包括。如:Logic_edu`

操作数据表

查看当前数据库中所有表

SHOW TABLES;

创建表

CREATE TABLE 数据表名(字段 类型 约束[, 字段 类型 约束])

查看表的创建语句

SHOW CREATE TABLE 数据表名;

查看表描述信息

DESC 数据表名;

注意:

  • NULL:表示该列是否可以存储NULL值
  • Key:表示该列是否已经编制索引
  • Default:表示该列是否有默认值
  • Extira:表示获取到的与给定列相关的附加信息

修改表名

ALTER TABLE 旧表名 RENAME [TO] 新表名;

修改数据表

添加表字段

ALTER TABLE 数据表名 ADD 字段 类型;

修改表字段

ALTER TABLE 数据表名 MODIFY 字段 类型; —添加一个默认值 ALTER TABLE 数据表名 CHANGE 原字段名 新字段名 类型及约束;
— 将字段重命名

删除表字段

ALTER TABLE 数据表名 DROP 字段;

修改字段的排列位置

ALTER TABLE 表名 MODIFY 字段名1 数据类型 FIRST|AFTER 字段名2;

“字段名1”指的是修改位置的字段,“数据类型”指的是字段1的数据类型,“FIRST”为可选参数,指的是将“字段名1”修改为表的第一个字段,“AFTER字段名2”是将字段1插入到字段2的后面。

删除数据表

DROP TABLE 表名;

约束

主键约束

单字段主键约束: 字段名 数据类型 PRIMARY KEY 多字段主键约束: PRIMARY KEY (字段名1,字段名2,… ,字段名n)

非空约束

字段名 数据类型 NOT NULL;


唯一约束

字段名 数据类型 UNIQUE;


默认约束

字段名 数据类型 DEFAULT 默认值;


自增约束

字段名 数据类型 AUTO_INCREMENT;

外键约束

[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…]REFERENCES <主表名> 主键列1 [,主键列2,…]**

演示

修改数据表 ALTER TABLE students RENAME TO students1;
查询表的结构 DESC students1;
添加字段名 ALTER TABLE students1 ADD zhousui INT(10);
修改字段名 ALTER TABLE students1 CHANGE zhousui zage INT(10);
删除字段 ALTER TABLE students1 DROP zage;
修改字段的排列位置 ALTER TABLE students1 MODIFY age INT(11) FIRST;
ALTER TABLE students1 MODIFY age INT(11) AFTER gender;
删除数据表 DROP TABLE mytable1;
单字段主键约束 CREATE TABLE example01 ( id INT PRIMARY KEY, name VARCHAR (20), grade FLOAT );
多字段主键约束 CREATE TABLE example02 ( stu_id INT, course_id INT, grade FLOAT, PRIMARY KEY (stu_id,course_id) );
非空约束 CREATE TABLE example04 ( id INT PRIMARY KEY, name VARCHAR(20) NOT NULL, grade FLOAT );
唯一约束 CREATE TABLE example05 ( id INT PRIMARY KEY, stu_id INT UNIQUE, name VARCHAR(20) NOT NULL );
默认约束 CREATE TABLE example06 ( id INT PRIMARY KEY AUTO_INCREMENT, stu_id INT UNIQUE, grade FLOAT DEFAULT 0 );
自增约束 CREATE TABLE example07 ( id INT PRIMARY KEY AUTO_INCREMENT, stu_id INT UNIQUE, grade FLOAT );

操作数据

添加数据

插入数据(不指定字段名)

INSERT INTO 数据表名 VALUES(值1,值2,值3…);

插入数据(指定字段名)

INSERT INTO 表名 (字段1, 字段2,…) VALUES (值1,值2,….);

注:每个字段和值的顺序要一一对应

插入数据(同时插入多条数据)

INSERT INTO 表名 (字段1, 字段2,…) VALUES (值1,值2,…),(值1,值2,…);

修改数据

UPDATE 表名 SET 字段1=新值,字段2=新值 [WHERE 条件];

删除数据

DELETE FROM 表名 [WHERE 条件];

单表查询

简单查询

SELECT语句

SELECT [DISTINCT] * |字段名1,字段名2,… FROM 表名 [WHERE 条件表达式1] [GROUP BY 字段名 [HAVING 条件表达式2]] [GROUP BY 字段名 [ASC | DESC]] [LIMIT [OFFSET] 记录数]

image.png
image.png

查询指定字段

SELECT 字段1,字段2,… FROM 数据表名;

查询所有字段

SELECT * FROM 数据表名;

按条件查询

带关系运算符的查询

SELECT 字段名1,字段名2,… FROM 表名 WHERE 条件表达式

比较运算符

image.png

逻辑运算符

image.png

带 IN 关键字的查询

SELECT * | 字段名1,字段名2,… FROM 表名 WHERE 字段名 [NOT] IN (元素1,元素2,…);

带 BETWEEN AND 关键字的查询

SELECT * | {字段名1,字段名2,…} FROM 表名 WHERE 字段名 [NOT] BETWEEN 值1 AND 值2;

空值查询

SELECT * | 字段名1,字段名2,… FROM 表名 WHERE 字段名 IS [NOT] NULL;

带DISTINCT关键字的查询(过滤去重)

SELECT DISTINCT 字段名 FROM 表名;

带LIKE关键字的查询(模糊查询)

SELECT * | {字段名1,字段名2,…} FROM 表名 WHERE 字段名 [NOT] LIKE ‘匹配字符串’;

注意:匹配字符串可以包含百分号(%)和下划线(_)的通配符字符串

  • “s%” 表示以s开始的字符串
  • “%s” 表示以s结尾的字符串
  • “%s%”表示包含s的字符串
  • 下划线只匹配单个字符 如果想匹配多个字符可以使用多个下划线
  • 如果想匹配字符串里面的 % 或 _ 可以在前面使用 \ 来转义

带AND关键字的多条件查询

SELECT * | {字段名1,字段名2,…} FROM 表名 WHERE 条件表达式1 AND 条件表达式2 [AND 条件表达式3,…]

带OR关键字的多条件查询

SELECT * | {字段名1,字段名2,…} FROM 表名 WHERE 条件表达式1 OR 条件表达式2 [AND 条件表达式3,…

聚合函数

COUNT()函数 (统计函数)

SELECT COUNT(*) FROM 表名;

SUM()函数(求和函数)

SELECT SUM(字段名) FROM 表名;

MAX()函数(最大值函数)

SELECT MAX(字段名) FROM 表名;

MIN()函数(最小值函数)

SELECT MIN(字段名) FROM 表名;

AVG()函数(平均值函数)

SELECT AVG(字段名) FROM 表名;

对查询结果排序

SELECT 字段名1,字段名2,… FROM 表名 ORDER BY 字段名1 [ASC | DESC], 字段名2 [ASC | DESC],…

注:ASC 表示升序 DESC 表示降序

分组查询

SELECT 字段名1,字段名2,… FROM 表名 GROUP BY 字段名1,字段名2,…[HAVING 条件表达式];

分组

image.png
在数据库中,通过 group by 将查询结果按照1个或多个字段进行分组,字段值相同的为一组。

select … from students group by 需要分组字段;

group_concat(…)
我们通过group_concat(…)查看每组的详细信息
image.png

分组后的筛选

image.png

限制查询

SELECT 字段名1,字段名2,… FROM 表名 LIMIT [OFFSET, ] 记录数

函数

image.png
image.png

为表和字段取别名

为表取别名

SELECT * FROM 表名 [AS] 别名;

为字段取别名

SELECT 字段名 [AS] 别名 [,字段名 [AS] 别名,…] FROM 表名;

表连接

当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回mysql。这时我们就需要使用表连接。

分类:

  • 内连接
  • 外连接
    • 左连接
    • 右连接

内连接

内连接仅选出两张表中互相匹配的记录

select * from 表1 inner join 表2 on 表1.列 = 表2.列;

image.png

左连接

查询的结果为两个表匹配到的数据,左表持有的数据,对于右表中不存的数据使用null填充

select * from 表1 left join 表2 on 表1.列 = 表2.列;

image.png

右连接

查询结果为两个表匹配到的数据,右表持有的数据,对于左表中不存在的数据使用null填充。

select * from 表1 right join 表2 on 表1.列 = 表2.列;

image.png

子查询

某些情况下,当进行查询的时候,需要的条件是另外一个 select 语句的结果,这个时候,就要用到子查询。

演示

创建数据库 CREATE DATABASE chapter04;

查看当前使用的数据库 SELECT DATABASE();

选择使用数据库 USE chapter04;

查看当前使用的数据库 SELECT DATABASE();

创建表 CREATE TABLE student( id INT(3) PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) NOT NULL, grade FLOAT, gender CHAR(2) );

查看表 SELECT * FROM student;

插入数据 INSERT INTO student(name, grade, gender) VALUES (‘A’,40,’男’), (‘B’,50,’男’), (‘C’,60,’男’), (‘D’,70,’女’), (‘E’,80,’女’), (‘F’,90,’男’), (‘G’,100,’男’), (‘H’,110,NULL);

查看表(指定字段) SELECT id, name, grade FROM student;

查看表(通配符) SELECT FROM student;

带关系运算符的查询 SELECT id, name FROM student WHERE id=4;

带IN关键字查询 SELECT id, name, grade FROM student WHERE id IN(1,2,3);

带 BETWEEN AND 关键字的查询 SELECT id, name, grade FROM student WHERE id BETWEEN 2 AND 5;

空值查询 SELECT * FROM student WHERE gender IS NULL;

带DISTINCT关键字的查询(过滤去重) SELECT DISTINCT gender FROM student;

带LIKE关键字的查询(模糊查询) SELECT name FROM student WHERE name LIKE ‘%d’;

带AND关键字的多条件查询 SELECT id,name,grade FROM student WHERE id in (1,2,3,4) AND grade < 70;

带AND关键字的多条件查询 SELECT id,name,grade FROM student WHERE id in (1,2) OR grade > 70;

COUNT()函数 (统计函数)
SELECT COUNT(*) FROM student;

SUM()函数(求和函数) SELECT SUM(grade) FROM student;

MAX()函数(最大值函数) SELECT MAX(grade) FROM student;

MIN()函数(最小值函数) SELECT MIN(grade) FROM student;

AVG()函数(平均值函数) SELECT AVG(grade) FROM student;

对查询结果排序 SELECT * FROM student ORDER BY gender DESC,grade ASC;

分组查询 SELECT * FROM student GROUP BY gender;

限制查询 SELECT * FROM student LIMIT 4;