06MySql基础

1. 操作数据库DDL

1.1 创建数据库

  1. --1.创建数据库
  2. --创建一个名为day01的数据库,使用默认字符集和校对规则
  3. CREATE DATABASE day01;
  4. --创建一个名字为day01_2的数据库,并且使用字符集为gbk
  5. CREATE DATATBASE day01_2 CHARACTER SET gbk;
  6. --可以直接使用可视化工具直接创建数据库

1.2 删除数据库

  1. --2.删除数据库
  2. DROP DATABASE day01_2;

1.3 查询整个MySql服务器中的所有数据库

  1. --3.查询整个MySql服务器中的所有数据库
  2. SHOW DATABASE;

1.4 查看某个数据库的结构

  1. --4.查看某个数据库的结构
  2. SHOW CREATE DATABASE day01;

1.5 修改某个数据库的字符集

  1. --5.修改某个数据库的字符集
  2. ALTER DATABASE day01 CHARACTER SET UTF8;

1.6 指定使用哪个数据库

  1. --6.指定使用哪个数据库
  2. --因为建表,操作表,都需要指定哪个数据库中的表
  3. USE day01;

2. 操作表的DDL

2.1 创建表

  1. --1.创建表
  2. --创建一张学生表(含有id字段,姓名字段不能重复,性别字段不能为空,id为主键自动增长)
  3. create table student(
  4. id int primary key auto_increment,--主键自增长
  5. name varchar(30) unique,--唯一约束
  6. gender char(1) not null,--不能为空
  7. age int default 0 --默认值
  8. )

2.2 查看某个数据库中的所有表

  1. --2.查看某个数据库中的所有表
  2. show tables

2.3 查看表结构

  1. --3.查看表结构
  2. desc student;

2.4 修改表结构的SQL语句

  1. --4.修改表结构的SQL语句
  2. --1.添加一个字段
  3. --给学生表增加一个grade字段,类型为varchar(20),不能为空
  4. alter table student add grade varchar(20) not null;
  5. --2.修改某个字段的类型和约束
  6. --给学生表的gender字段改成int类型,不能为空,默认值为1
  7. alter table student modify gender int not null default 1;
  8. --3.修改某个字段的名字
  9. --给学生表的grade字段修改为class字段
  10. alter table student change grade class varchar(20);
  11. --4.删除某个字段
  12. alter table student drop class;
  13. --5.修改表名字
  14. --把学生表修改为老师表
  15. rename table student to teacher;
  16. --6删除表
  17. drop table teacher;

3.DML操作

3.1 准备工作(创建表)

  1. create table product(
  2. pid int primary key auto_increment,
  3. pname varchar(30),
  4. price double,
  5. num int
  6. )

3.2 往商品表中插入数据

  1. --第一种:指定插入那些数据
  2. insert into product(pname,price,num) values("小米",3888.8,100);
  3. --第二种:不指定数据,那就得全部插入
  4. insert into product values (null,"大米",4533,200);

3.3 更新数据

  1. --更新数据
  2. --update 表名 set 字段名=新值,字段名=新值 where 条件
  3. --如果没有修改条件的话,那么整个表都会被修改
  4. --将所有的商品价格改为5000
  5. update product set price = 5000;
  6. --将是小米的价格改为6000
  7. update product set price = 5000 where panme = '小米';

3.4删除数据

  1. --删除数据
  2. --1.delete根据条件删除 delete from 表名 where 条件
  3. delete from product where price > 6000;
  4. --不加条件就是全部删除(不推荐,因为delete是一行行删除的)
  5. delete from product
  6. --2.truncate删除,将整个表整体干掉,然后自动创建结构一模一样的新表,没有条件可选 truncate table 表名
  7. truncate table product

4.数据查询

4.1 查询所有行和所有列的数据

  1. --select 要查询哪些列 from 表名 where 条件
  2. --1.查询product所有数据
  3. select * from product;
  4. --2.根据列名查询数据
  5. select pname,price,num from product;

4.2 去重查询

  1. --去重查询:在查询结果中去除重复的数据,使用关键字distinct
  2. --select distinct 去重复的数据 from 表名
  3. select distinct pname from product;

4.3别名查询

  1. --别名查询:给查询的字段或者表进行别名设置 as 可以省略
  2. --select 列名 as 别名,列名 别名 from 表名
  3. select pname 商品名 from product;

4.4 运算查询

  1. --运算查询:可以将表不存在的列名,用结果返回出来
  2. --select 列名(操作) from product
  3. select price + 0.99 价格 from product

4.5 条件查询

  1. --条件查询:根据相应的条件,返回相应的数据
  2. -- select 列名 from 表名 where 条件1,条件2...;
  3. --注意:mysql中不等于是=> <>
  4. --在多少到多少之间(范围区间)的值是=> between number and number
  5. --在枚举范围的内的是=> in(值1,值2,值3)

4.6 模糊查询

  1. --模糊查询:关键字like和%配合使用
  2. --select * from 表名 where 列名 like '%xx' 在这%是占位符,只占一位,
  3. 例子 列名中有 刘德华,王德华 like '%德华' 不在乎第一个是什么,但后2位一定是德华,并且一共3位字符
  4. --select * from 表名 where 列名 like 'xx%' 在这%是占位符,只占一位,
  5. 列子 列名中有 刘德华,刘德鑫 like '刘德% ' 不在乎最后一个是什么,但前2位一定是刘德,并且是3位字符
  6. --select * from 表名 where 列名 like '%xx%'
  7. 完全的模糊搜索,只要在列名内容中有xx内容就可以,但一定不能分开
  8. 如: %刘德% 不能找到 刘鑫德 ,可以找到 刘德华 王刘德

4.7 排序查询

  1. --排序查询 order by 列名 升序(默认)asc 降序 desc
  2. select * from product order by price desc;
  3. --多列排序 先按照第一个字段进行排序,如果第一个字段相同,那么就按照第二个字段进行排序
  4. --例子:先按成绩降序排序,如果分数一样就按age降序
  5. select * from student order by score desc,age desc;

4.8聚合函数

  1. --聚合函数通常和分组查询一起使用
  2. --1.max函数,查询最大值
  3. --2.min函数,查询最小值
  4. --3.avg函数,查询平均值
  5. --4.count函数,查询数据条数
  6. --5.sum函数,求和

4.9 分组查询

  1. --分组查询:分组的目的是为了做统计,所以结合聚合函数一起使用
  2. --语法:group by 用于分组的字段
  3. --性别分组,性别的总人数
  4. select sex 性别 ,count(sid) 总人数 from student group by sex;
  5. --性别分组,性别的平均分
  6. select sex , avg(score) from student group by sex;
  7. --...依次类推

4.10 分组查询的筛选

  1. --分组查询的筛选不能使用where,where条件必须在group by的前面
  2. 筛选的语法为 group by 列名 having 条件
  3. -- 练习根据性别分组,只统计年龄大于等于18的,并且要求组里的人数大于4
  4. SELECT sex '性别',COUNT(sid) '总人数' FROM student WHERE age >= 18 GROUP BY sex HAVING COUNT(sid) > 4