06MySql基础
1. 操作数据库DDL
1.1 创建数据库
--1.创建数据库
--创建一个名为day01的数据库,使用默认字符集和校对规则
CREATE DATABASE day01;
--创建一个名字为day01_2的数据库,并且使用字符集为gbk
CREATE DATATBASE day01_2 CHARACTER SET gbk;
--可以直接使用可视化工具直接创建数据库
1.2 删除数据库
--2.删除数据库
DROP DATABASE day01_2;
1.3 查询整个MySql服务器中的所有数据库
--3.查询整个MySql服务器中的所有数据库
SHOW DATABASE;
1.4 查看某个数据库的结构
--4.查看某个数据库的结构
SHOW CREATE DATABASE day01;
1.5 修改某个数据库的字符集
--5.修改某个数据库的字符集
ALTER DATABASE day01 CHARACTER SET UTF8;
1.6 指定使用哪个数据库
--6.指定使用哪个数据库
--因为建表,操作表,都需要指定哪个数据库中的表
USE day01;
2. 操作表的DDL
2.1 创建表
--1.创建表
--创建一张学生表(含有id字段,姓名字段不能重复,性别字段不能为空,id为主键自动增长)
create table student(
id int primary key auto_increment,--主键自增长
name varchar(30) unique,--唯一约束
gender char(1) not null,--不能为空
age int default 0 --默认值
)
2.2 查看某个数据库中的所有表
--2.查看某个数据库中的所有表
show tables
2.3 查看表结构
--3.查看表结构
desc student;
2.4 修改表结构的SQL语句
--4.修改表结构的SQL语句
--1.添加一个字段
--给学生表增加一个grade字段,类型为varchar(20),不能为空
alter table student add grade varchar(20) not null;
--2.修改某个字段的类型和约束
--给学生表的gender字段改成int类型,不能为空,默认值为1
alter table student modify gender int not null default 1;
--3.修改某个字段的名字
--给学生表的grade字段修改为class字段
alter table student change grade class varchar(20);
--4.删除某个字段
alter table student drop class;
--5.修改表名字
--把学生表修改为老师表
rename table student to teacher;
--6删除表
drop table teacher;
3.DML操作
3.1 准备工作(创建表)
create table product(
pid int primary key auto_increment,
pname varchar(30),
price double,
num int
)
3.2 往商品表中插入数据
--第一种:指定插入那些数据
insert into product(pname,price,num) values("小米",3888.8,100);
--第二种:不指定数据,那就得全部插入
insert into product values (null,"大米",4533,200);
3.3 更新数据
--更新数据
--update 表名 set 字段名=新值,字段名=新值 where 条件
--如果没有修改条件的话,那么整个表都会被修改
--将所有的商品价格改为5000
update product set price = 5000;
--将是小米的价格改为6000
update product set price = 5000 where panme = '小米';
3.4删除数据
--删除数据
--1.delete根据条件删除 delete from 表名 where 条件
delete from product where price > 6000;
--不加条件就是全部删除(不推荐,因为delete是一行行删除的)
delete from product
--2.truncate删除,将整个表整体干掉,然后自动创建结构一模一样的新表,没有条件可选 truncate table 表名
truncate table product
4.数据查询
4.1 查询所有行和所有列的数据
--select 要查询哪些列 from 表名 where 条件
--1.查询product所有数据
select * from product;
--2.根据列名查询数据
select pname,price,num from product;
4.2 去重查询
--去重查询:在查询结果中去除重复的数据,使用关键字distinct
--select distinct 去重复的数据 from 表名
select distinct pname from product;
4.3别名查询
--别名查询:给查询的字段或者表进行别名设置 as 可以省略
--select 列名 as 别名,列名 别名 from 表名
select pname 商品名 from product;
4.4 运算查询
--运算查询:可以将表不存在的列名,用结果返回出来
--select 列名(操作) from product
select price + 0.99 价格 from product
4.5 条件查询
--条件查询:根据相应的条件,返回相应的数据
-- select 列名 from 表名 where 条件1,条件2...;
--注意:mysql中不等于是=> <>
--在多少到多少之间(范围区间)的值是=> between number and number
--在枚举范围的内的是=> in(值1,值2,值3)
4.6 模糊查询
--模糊查询:关键字like和%配合使用
--select * from 表名 where 列名 like '%xx' 在这%是占位符,只占一位,
例子 列名中有 刘德华,王德华 like '%德华' 不在乎第一个是什么,但后2位一定是德华,并且一共3位字符
--select * from 表名 where 列名 like 'xx%' 在这%是占位符,只占一位,
列子 列名中有 刘德华,刘德鑫 like '刘德% ' 不在乎最后一个是什么,但前2位一定是刘德,并且是3位字符
--select * from 表名 where 列名 like '%xx%'
完全的模糊搜索,只要在列名内容中有xx内容就可以,但一定不能分开
如: %刘德% 不能找到 刘鑫德 ,可以找到 刘德华 王刘德
4.7 排序查询
--排序查询 order by 列名 升序(默认)asc 降序 desc
select * from product order by price desc;
--多列排序 先按照第一个字段进行排序,如果第一个字段相同,那么就按照第二个字段进行排序
--例子:先按成绩降序排序,如果分数一样就按age降序
select * from student order by score desc,age desc;
4.8聚合函数
--聚合函数通常和分组查询一起使用
--1.max函数,查询最大值
--2.min函数,查询最小值
--3.avg函数,查询平均值
--4.count函数,查询数据条数
--5.sum函数,求和
4.9 分组查询
--分组查询:分组的目的是为了做统计,所以结合聚合函数一起使用
--语法:group by 用于分组的字段
--性别分组,性别的总人数
select sex 性别 ,count(sid) 总人数 from student group by sex;
--性别分组,性别的平均分
select sex , avg(score) from student group by sex;
--...依次类推
4.10 分组查询的筛选
--分组查询的筛选不能使用where,where条件必须在group by的前面
筛选的语法为 group by 列名 having 条件
-- 练习根据性别分组,只统计年龄大于等于18的,并且要求组里的人数大于4
SELECT sex '性别',COUNT(sid) '总人数' FROM student WHERE age >= 18 GROUP BY sex HAVING COUNT(sid) > 4