数据库实践操作大全

一、数据库
1.创建数据库
create database 库名;
2.使用数据库
use 库名;
3.展示数据库
show databases;
4.删除数据库
drop database 库名;

二、表的操作
1.创建表
create table 表名 (列名 类型,列名 类型 ……);
2.展示表;
show tables;
3.看表结构
desc 表名;
4.删除表
drop table 表名;

三、查询表
1.查看整个表
select * from exam_result;
2.插入表值
insert into 表名 values(值,值,值……);
特别说明
insert into 表名 values(“2019-10-23 10:10:10”);
3.向指定列插入
insert into 表名(列名,列名) values (‘唐丹’, 93.0);
4.多条插入
insert into 表名 values (1,‘张三’), (2,’李四’);
5.指定列查询
select 列名 from exam_result ;
6.别名查询
select name, math+chinese as total from exam_result;
7.去重查询
select distinct 列名 from 表名;
8.顺序查询
select 列名 from 表名 order by desc(asc);

四、条件查询
1.数学等于80分的学生
select name,math from exam_result where math =80;
2.数学大于80分的学生
select name,math from exam_result where math >80;
3.数学在80分到100分的学生
select name,math from exam_result where math between 80 and 100;
4.数学是27,48,90,78的学生
select name,math from exam_result where math in(27,48,90,78);

五、模糊查找
select name from exam_result where name like ‘唐%’;

select name from exam_result where name like ‘孙__’;

六、利用<=> 查找
select name from exam_result where math <=> NULL;

七、分页查询
select 列名 from exam_result limit N offset M ;从M条开始查,最多返回N条记录。

limit、order by 、where 搭配使用

八、修改某行表的数据
update 表名 set 列名= 值,列名=值 where 子句;

九、删除某行表的数据
delete from 表名 where 条件;

约束创建表
1 . NOT NULL
create table student (id int not null ,name varchar(20));
2.default
create table student (id int default 0, name varchar(20) default ‘未命名’);
3.primary key

4.unique
create table student(id int unique, name varchar(20));
5.froeign key
创建父表
create table class(classid int primary key,classname name varchar(20));
创建子表
create table student(sno int primary key , sname varchar, classid int ,foreign key (classid) references class(classid));

聚合查询
insert into 表名 select * from 表名;//先执行查询语句,然后将结果放到插入的表名中
1.count() //计算行数
select count() from 表名; //需要知道,count()会把null值也加进去,count(列名)不会加null值
2.max() //计算某列中最大的值
3.min()//计算某列中最小的值
4.avg()//计算某列的平均数
5.sum()//计算某列的总和
2345仅限数字

分组查询

  1. group by 可以按照指定的列名进行分组展现
    select gender ,avg(score)from student group by gender;
  2. 可以先筛选再分组查询
    select gender,avg (score) from student where name!=‘张三’ group by gender;
    3.可以先分组再查询
    select gender, avg(score) from student group by gender having avg(score) >80;
    4,也可以where +group by + having 结合使用

笛卡尔积
意思就是将多个表进行联合查询,进行展示查询
理论上,两个表形成的笛卡尔表的行数是两个表的乘积之和,两个表的列数之和是笛卡尔表的列数。

数据库设计
1)找出实体
2)理清实体之间的关系
关于多表查询
select 列名 from 表1 join 表二 join 表三 on 连接条件。
连接条件不用加where 了。

我们这里说为什么敲一个三张表的笛卡尔积,执行半天才执行完
原因是显示的太慢了

内连接:就是以上我们用的查询语句,是两张表包含的共同信息。
那么,顾名思义,我们就可以联想到外连接。外连接又分两种

  1. 左外连接
    就是join左侧的列表为主,右侧表中不存在,填充NULL;

  2. 右外连接
    就是join右侧的列表为主,左侧表中不存在,填充NULL;

多个join
表一 join 表二 left join 表三;// 以表一和表二 的笛卡尔积为准。
表一 right join 表二 left join 表三;// 表一和表二先做右外连接,得到的结果再和表三做左外连接。

除了内外连接,还有自连接,但这个很少会用到,属于特定场景下特定使用
功能就是把行转换成列
instance:
显示所有“计算机原理”成绩比“java"成绩高的成绩信息。
这个一开始就是在行上面的,我们无法比较这两个成绩的信息,所以我们就可以用到这个自连接。
计算机原理的ID为3,java的ID为1;

  • 初步筛选,有很多不需要的排列组合
    -在这里插入图片描述
  • 第二步 学生的ID要一致在这里插入图片描述
  • 第三步,只要s1.course_id =3 and s2.course_id=1 and s1.score>s2.score的记录就查出来了。
    在这里插入图片描述
    子查询
    查询 所有同学语文和英语成绩

    合并查询
    把两个表的查询结果。记录进行集合,合并到一起。
    在这里插入图片描述
    union // 有重复结果,会去重
    union all // 有重复结果,不会去重

数据库的索引(目录)
1.查看索引
show index from 表名;

2.创建索引

create index 索引名 on 表名(列名);
3.删除索引
drop index 索引名 on 表名;
一个表的主键会自动带上索引,unique以及外键的约束的列也会自动带上索引,创建索引和删除索引,也是危险操作,尤其是对一个包含很大数据量的表进行操作的时候。

猜你喜欢

转载自blog.csdn.net/m0_55634684/article/details/125732082