数据库的基本操作
数据定义语句(DDL):定义和管理数据对象,如数据库,数据表等。
创建库
Create database 库名;
查看库
Show databases;
删除库
Drop database 库名;
使用库
Use 库名;
查看库中的表
Show tables;
创建表
Create table 表名(
字段名 数据类型 属性,
字段名 数据类型 属性
)
DML数据操作语言
增加数据(insert)
Insert into 表名(字段名。。字段名)values(值1,值2)()()
Insert into select 查询表和插入表都要存在
Insert into 插入表 select 字段名…字段名 form 查询表
Create table 表名 select 查询表存在 插入表不存在
Create table 表名 select 字段名…字段名 form 查询表
修改数据(update)(修改必须要加条件)
Update 表名 set 字段名=值,…..,字段名=值,where 子句【条件】
不加where整张表修改
删除数据(delete)
Delete form 表名 where 子句【条件】
Delete form 表名 删除整表
Delete from 表名 where 子句 【条件】
Delete 不能清楚 主键自增的序号
清空表:
Truncate 表名 将整张表的数据还有索引值【主键的自增】全部清空,保留表结构
DQL数据查询语言
Select *|字段名,….字段名 from 表名
Select 表别名.字段名1 as 字段别名1,表别名.字段名2 as 字段别名2,from 表名 as 表别名
注意:
“.”当前表存在的字段;
As 可以忽略不写,as的功能:给字段去一个新别名;给表一个新别名
Select distinct *|字段名,….字段名 from 表名 去除重复的数据
Select *|字段名,….字段名 from 表名 where 子句【条件】
Like 模糊查询
模糊符号%任意多的任意字符
模糊符号 _一个任意字符
前模糊%key 后模糊key% 前后都模糊%key%
Select *|字段名,….字段名 from 表名 where sname %xx%
In 在某个特定范围内
Select *|字段名,….字段名 from 表名 where id in (1,2,3,5,75)
查询null
Select *|字段名,….字段名 from 表名 where id is null
Select *|字段名,….字段名 from 表名 where id is not null
聚合函数:
count()统计个数 不统计null
聚合数值
Sum() 总和
max() 最大值
min() 最小值
avg() 平均值
select count(1) 次数, sum(score) 总成绩,
max(score) 最高分, min(score) 最低分, avg(score) 平均分 from 表名
分组(group by):
select *|字段名,….字段名 from student group by 字段名;
Having
-- 每个学生总成绩( 总成绩 大于200分,只统计 成绩高于60分)
-- where 后的筛选是针对表中的每一条数据进行
-- having 筛选 分组之后的数据进行筛选 having 不能单独出现必须要有group by
select sid, sum(score) from sc
where score > 60 group by sid having sum(score) > 200
Limit 分页 limit 数值【获取多少个】limit 【位置】,数值【步长】
Select *|字段名,….字段名 from 表名 limit
select * from student limit 3 offset 1 -- mysql8
分页公式(页码-1)*步长,步长
高级DQL:
-- 内联查询
select * from student,class,sc where class.classid = student.classid and student.Sid = sc.Sid
-- 内联查询(inner join on)
inner join on
select * from student
inner join class
on student.classid = class.classid
inner join sc
on student.Sid=sc.Sid
-- 外联查询 谁是主表,谁是从表
-- 左外联
left join on
-- 所有的学生信息和对应的班级信息
select * from student left join class
on student.classid=class.classid
-- 右外联
right join on
select * from class right join student
on class.classid = student.classid
-- 查询两个集合并集
union
-- 1.数据类型不同可以进行合并 2.两个集合的列数要一致 3.表头是第一个集合的信息 4.union会去除重复
select Sname,Ssex from student
union
select Tname,Tsex from teacher
-- 子查询 在查询中又有一个查询
-- 所有子查询都需要小括号括起来
-- 查询id最大的学生
select * from student order by student.Sid desc limit 1
-- where 子查询
select * from student where Sid=(select max(Sid) from student)
-- from 子查询
select * from class
select count(Sid) from student group by classid
select * from class
left join (select classid,count(Sid) 人数 from student group by classid) t
on class.classid=t.classid
where 人数 > 3
-- exists 子查询 字句有数据 父句执行 字句没有数据 父句不执行
-- 如果学生表中有男同学则查询出所有的老师
select * from teacher where exists (select * from student where Ssex = '男')
-- any some 子查询
Select …from…where a>any/some(…);
相当于
Select …from…where a>r1 or a>r2….a>rn
all子查询:
Select …from…where a>all(…);
相当于
Select …from…where a>r1 and a>r2… and a>rn