打开数据库
sudo mysql -u root -proot
查看
show database
新建
show create database 数据库名 default character set utf8
删除
drop database 数据库名
修改
alter database 数据库名 default character set 编码方式
表管理
查看默认的字符集
show create database 数据库名
选择数据库
use 数据名
新建表
create table student(
-> sid int,
-> sname varchar(20),
-> sage int
-> );
查看所有表
show tables;
查看表结构
desc student;
删除表
drop table student;
修改表
- 添加字段(column可以不写)
alter table student add column sgender varchar(2);
- 删除字段(column可以不写)
alter table student drop column sgender;
- 修改字段类型(column可以不写)
alter table student modify column remark varchar(100);
- 修改字段名称(column可以不写)
alter table student change column sgender(旧字段名) gender(新字段名) varchar(2);
- 修改表名称
alter table student rename to teacher;
数据库表中增加信息
- 插入所有字段(与数据库表中的信息一一对应)
insert into 数据表名 values(1,'张三','男',20);
- 插入部分字段
insert into 数据表名(id,name)values (2,李四);
修改数据
- 修改所有的数据(建议少用)
update 表名 set 字段名='修改后的值';
- 修改部分的数据(指定修改ID为1的指定字段)
update 表名 set 字段名='修改后的值' where id = 1;
- 修改多个字段(set只能用一次,字段名之间用‘,’隔开)
update 表名 set 字段名='修改后的值',age=30 where id = 1
删除数据
- 删除所有数据表中的数据
delete from 数据表名
- 删除指定数据(指定删除ID为2的数据)
delete from 表名 where ID = 2;
- 其他删除
truncate table 表名
- 删除的区别
delete from与truncate table的区别
- delete from可以带条件删除,truncate table不可以带条件删除
- delete from只能删除表的数据不能删除表的约束,truncate table既可以删除表的数据也可以删除表的约束
- 使用delete from删除的数据可以回滚(事物),既临时的删除而使用truncate table的删除就是永久的删除
查询数据
- 查询所有列
select * from 数据表名 ;
- 查询指定列
select id, name from 数据表名;
(以ID和name查询)- 查询时指定别名[as](显示别名)
select id as '编号', name as '姓名' from 数据表名;
- 查询时指定别名[as](显示别名)
- 查询时添加常量列
- 需求 在查询student表时添加一个班级列,内容为‘Java就业班’
select id, name,...,'java就业班' as '班级' from 数据表名;
- 需求 在查询student表时添加一个班级列,内容为‘Java就业班’
- 查询时合并列
- 查询所有科目的总成绩(科目名+科目名+...)
select id, name, (java+jsp+...) as '总成绩' from 数据表名;
- 注意事项 合并列 只能合并数值类型字段
- 查询所有科目的总成绩(科目名+科目名+...)
- 查询时去除重复记录
- 需求 查询学生性别(结果 男 女)
select distinct gender from student;
- 另一种语法
select distinct (gender) from student;
- 需求 查询学生性别(结果 男 女)
- 条件查询(where)
- 第一类 逻辑条件 and(与) or(或)
- 查询ID为2 姓名为李四的同学
select * from student where id=2 and name = '李四';
- 查询ID为2 或 姓名为张三的同学
select * from student where id=2 or name = '张三';
- 查询ID为2 姓名为李四的同学
- 第二类 比较条件 > < >= <= = <>(不等于) between and
- 需求 查询Java成绩大于70的所有人
select * from student where java>70;
- 需求 查询Java成绩大于70的所有人
- 第三类 判空条件(null 空字符串):is null / is no null / =='' / <>''
-
需求 查询地址为空的学生
null vs 空字符串
null 没有值
空字符串 有值 判断null
select * from student where address is null;
判断空值
select * from student where address = '';
select * from student where address is null or address = '';
-
- 第四类 模糊条件 like(通常使用以下替换标记 % 表示可以替换任意一个字符 _ 表示一个字符)
- 需求 姓张的学生
select * from student where name like '张%';
- 需求 姓张的学生且姓名只有两个字的人
select * from student where name like '张_';
- 需求 姓张的学生
- 第一类 逻辑条件 and(与) or(或)
- 聚合查询
- 常用的聚合函数
sum(字段)总数 avg()平均数 max()最大值 min()最小值 count(*/id)统计记录的数量 例如学生总数
count统计的数据不包含null的数据 故:使用count统计数据的时候,要使用不包含null的数据
- 常用的聚合函数
- 分页查询(limit 起始行(从0开始),查询多少行)
select * from student limit 0,2;
查询两行- 没有记录就不显示
- 分页查询当前页的sql:
select * from student limit (当前页-1)*每页显示多少,每页显示多少;
- 查询排序(order by)默认正序
- 语法:order by 字段 asc/desc
- asc:顺序 / 正序。 数值:递增,字母:自然顺序(a-z)
- desc:倒序 / 反序。 数值:递减,字母:自然反序(z-a)
- 分组查询(group by 字段)
例如:将学生性别分组,并统计每组的人数
select gender,count(*) from student group by gender;
- 分组查询后筛选(having)
需求:查询性别人数大于2的值
select gender,count(*) from student group by gender having count(*)>2