数据库基本理解
数据库
基本操作
数据库操作
show databases ; create database 库名 ;
#查看一个数据库的编码格式 show create database py ;
#设置数据库的编码格式 alter database py default character set utf8mb4 ;
#删库 drop database py ;
表的操作
show databases ; use 数据库 ;
create table 表名 { 字段1 类型(), 字段2 类型(), …… }
#修改表名 将book表重命名为books alter table book rename books
#添加字段 alter table books add press varchar(20);
#查看表的字段信息 desc books;
#删除字段 删除books表中的press字段。 alter table books drop press
#删除表 删除books表 drop table books
记录的增删改查
(如果不添加条件判断默认的就是对所有的记录进行修改)
insert into table ( x , x , x , x) values ( v , v , v , v ) ; delete from table ; update table set 字段 = 字段值 ,字段2 = 字段值2 ; select * from table where 条件 ;
where字句
where子句就是进行判断过滤的条件限定;
单条件
select * from table where 条件 ;
判断条件 控制判断 字段 is null 模糊匹配 字段 like "%瀚%" (%表示任意个数任意字符)
多条件
and & or 可能会产生冲突,可以用()包裹一个整体
in 操作符:用来过滤出符合范围内的记录
select * from table where 字段 in ("值1","值2",…)
聚合函数
聚合函数 | |
---|---|
count(字段) | 计数,用来计算相应记录的个数 |
sum(字段) | 求和 |
max(字段) | 最大值 |
mix(字段) | 最小值 |
avg(字段) | 平均值(默认六位小数) |
排序 、分页
order by(字段)[ desc ] desc降序
select * from table order by (字段) desc ;
【注意】order by + where : where 要放在order by 前边
limit 可以限制查询的数量, 有两个参数 n,m
select * from table limit n , m ;
【参数】n:前边的记录条数 m:页面显示的记录条数
多表关联
数据库表有三种关联关系,分别为:一对多,一对一,多对多。
以学生表,老师表,班级表为例,学生与班级的关系就是多对一。 学生请了家教,一个学生对应一个老师,就是一对一。老师与班级之间是多对多的关系,一个班级有多个任课老师,每个任课老师带多个班级。 新建两张表
DROP TABLE IF EXISTS `classroom`; CREATE TABLE `classroom` ( `id` int NOT NULL AUTO_INCREMENT COMMENT 'id', `name` varchar(255) DEFAULT NULL COMMENT '教室名', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ---------------------------- -- Records of classroom -- ---------------------------- INSERT INTO `classroom` VALUES ('1', '鄱阳湖'); INSERT INTO `classroom` VALUES ('2', '淀山湖'); INSERT INTO `classroom` VALUES ('3', '老君山'); INSERT INTO `classroom` VALUES ('4', '桐柏山'); -- ---------------------------- -- Table structure for student -- ---------------------------- DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '学生id', `name` varchar(255) DEFAULT NULL COMMENT '学生姓名', `gender` varchar(255) DEFAULT NULL COMMENT '性别', `age` int DEFAULT NULL COMMENT '年龄', `score` int DEFAULT NULL COMMENT '成绩', `c_id` int DEFAULT NULL COMMENT '教室id', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ---------------------------- -- Records of student -- ---------------------------- INSERT INTO `student` VALUES ('1', '吴用', '男', '20', '4', '1'); INSERT INTO `student` VALUES ('2', '李逵', '男', '23', '22', '1'); INSERT INTO `student` VALUES ('3', '孙二娘', '女', '26', '103', '1'); INSERT INTO `student` VALUES ('4', '扈三娘', '女', '18', '59', '2');
在多的那一端添加一个字段,存储 一 那一端的id。 在上面的例子中,学生是多的一端,在student表添加一个字段,c_id 存储 教室 classroom表的id。
内连接
#===格式1=== SELECT xxxx # 建议自定义字段 as FROM tableA as A INNER JOIN tableB as B ON 关联字段 # 关联字段 on A.xx = B.xx WHERE 条件 #===格式2=== SELECT xxxx # 建议自定义字段 as FROM tableA ,tableB WHERE 关联字段 and 条件 # 关联字段 A.xx = B.xx
例子: #查询鄱阳湖的同学的信息。 SELECT s.id 学生编号, s. NAME 学生姓名, c. NAME AS 教室 FROM #我们可以为表添加别名。 student s INNER JOIN classroom c ON c_id = c.id WHERE c. NAME = '鄱阳湖'; #内连接 另外一种写法。 SELECT s.id, s. NAME, c.`name` AS classname FROM student s, classroom c WHERE s.c_id = c.id
外连接
外连接就是定义一种方式;规定了左边或者右边为基准,就算关联字段是null也会获取到
左外连接
#查询所有同学的信息,包括所属的班级名。 SELECT s.id, s. NAME, c.name AS classname FROM student s LEFT JOIN classroom c ON s.c_id = c.id #on后面跟两种表关联的条件
右外连接
#查询所有教室的信息,包含它的学生信息。 SELECT s.id, s. NAME, c.`name` AS classname FROM student s RIGHT JOIN classroom c ON s.c_id = c.id