DDL数据定义语言
定义和管理数据对象,如数据库,数据表等。
- 操作数据库
create datebase 库名; -- 建库
drop datebase 库名; -- 删库
show datebases; -- 查看库
use 库名; -- 使用库
- 操作数据表
查看表
show tables; -- 查看库中所有表
show create table 表名; -- 查看表结构
drop table 表名; -- 删除表
新建表:新建一个student学生表
create table student(
sid int primary key auto_increment,
sname varchar(10) comment '学生姓名',
ssex char(1) comment '学生性别',
birthday datetime comment '学生生日',
classid int comment '学生班号'
)
修改表结构:alter table
-- 将表student名改为stu
alter table student rename as stu;
-- 添加省份字段
alter table stu add shengfen varchar(10) comment '省份';
-- 删除省份字段
alter table stu drop shengfen;
-- 修改sname字段
alter table stu modify sname varchar(20);
-- 修改ssex字段,可修改字段名
alter table student change ssex sex char(2);
DML数据操作语言
对数据库对象中所包含的数据进行增、删、改等操作。
- 数据新增:insert
语法:INSERT INTO表名
[(字段1
,字段2
,…字段n
)] VALUES/VALUE (‘值1’,…‘值n’)[,(‘值1’,…‘值n’)…];
-- 全字段插入可以不写字段名
insert into student values(8,'王五','1999-1-1','男',1);
-- 添加一个学生
insert into student (sid,sname,birthday,ssex,classid)
values (1,'张三','1988-2-2','男',1);
-- 一次性插入多条数据
insert into student(sname)values("赵雷"),("浅米"),("天天");
- 数据删除:delete
-- 删除表中sid为2的学生
delete from student where sid=2 ;
-- 删除表中所有数据(只删除数据,不影响索引)
delete from 表名;
-- 清空表(删除数据和索引)
truncate 表名;
- 数据修改:update
-- 将张三的性别改为女
update student set ssex='女' where sname='张三';
DQL数据查询语言
用于查询数据库数据。是SQL语句中最核心、最重要的语句,也是使用频率最高的语句。其中,可以根据表的结构和关系分为单表查询和多表联查。
- 单表查询
单表查询较为基础,也非常重要,它为多表联查打下基础,所以必须要熟练掌握。
- 全查:查看表中所有数据
-- 全查
select * from student;
- 条件查询:使用where子句,针对某个条件进行筛选
-- 条件查询
-- 2班的女生
select * from student where ssex = '女' and classid = 2;
-- 编号4-7的学生
select * from student where sid>=4 and sid<=7;
- 模糊查询:like,根据关键字进行筛选。 与“%”一起使用,表示匹配0或任意多个字符; 与“_”一起使用,表示匹配单个字符
--模糊查询 like
-- 王~(后有任意多个字符)
select *from student where sname like '王%';
-- 某王(前面只有一个字符)
select *from student where sname like '_王';
-- 包含王
select *from student where sname like '%王%';
- 范围查询:in, 查询的字段的值,至少与in 后的括号中的一个值相同;
-- 查询编号在此范围内的学生
select *from student where sid in(2,4,6,7,6,100);
- 常用的聚合函数
-- 学生考试次数,最高分,最低分,平均分,总分
select count(*) 次数,max(score) 最高分,min(score) 最低分,avg(score) 平均分,sum(score) 总分 from sc;
- 分组 group by :和聚合函数搭配使用
group by,对所有的数据进行分组统计;分组的依据字段可以有多个,并
依次分组。
having:与GROUP BY结合使用,进行分组
后的数据筛选
-- 根据性别分组,并统计每种性别的人数
select ssex , count(*) from student group by ssex;
-- 平均分大于85分的课程和平均分
select cid ,avg(score) from sc group by cid having avg(score)>85;
- 排序:order by
升序(默认排序):asc;降序:desc;
-- 默认升序排列
select * from student order by sid;
-- 根据学生编号降序排列
select * from student order by sid desc;
DQL高级数据查询
表联查等;
表联查是基于主外键关系进行表与表之间的查询。
- 内联查询
-- 查询学生student及班级class的信息(共有信息))
-- SELECT * FROM 表1,表2 WHERE 表1.字段1 = 表2.字段2...
-- 适用于数据量小,表量大
select * from student , class where student.classid=class.classid;
-- inner join
-- 表1 inner join 表2 on 关系
-- 适用于单表数据量大
select * from student inner join class on class.classid=student.classid;
- 外联查询
语法:select * from 表1 left / right 表2 on 条件
左外联:left join 从表1中返回所有的记录,即便在表2中没有匹配的行。
右外联:right join 从表2中返回所有的记录,即便在表1中没有匹配的行。
-- left join on 左外联
-- 所有学生及其对应的班级信息
select * from student left join class on student.classid=class.classid;
-- right join on 右外联
select * from class right join student on student.classid=class.classid;