操作数据库
-- 链接数据库
mysql -uroot -p
-- 退出数据库
quit/exit
-- 显示数据库版本
select version();
-- 查看当前使用的数据库
select database();
-- 查看所有数据库
show databases;
-- 创建数据库
create database kuname charset=utf8;
-- 查看创建数据库的语句
show create database kuname;
-- 使用数据库
use kuname
-- 查看数据库的表
show tables;
-- 删除数据库
drop database kuname;
创建数据表
-- 数据表的操作
-- 查看当前数据库中所有表
show tables;
创建表
-- int unsigned 无符号整形
-- auto_increment 表示自动增长跟主键在一起
-- not null 表示不能为空
-- primary key 表示主键
-- default 默认值
-- create table 数据表名字(字段 类型 约束[,字段 类型 约束]);
create table test(name varchar(30) not null,age int unsigned);
-- 查看表结构
desc test;
create table classes(id int unsigned primary key auto_increment,name varchar(39) not null);
create table students(id int unsigned primary key auto_increment,name varchar(30) not null,age int unsigned,high decimal(3,2),gender enum("男","女","保密","中性") default "保密",cls_id int unsigned);
修改表结构
-- 查看表的创建语句
show create table students;
-- 修改表-添加字段mascot(吉祥物)
-- alter table 表名 add 列名 类型;给classes表添加mascot字段
alter table classes add mascot varchar(50);
-- 修改表-修改字段:不重命名版
-- alter table 表名 modify 列名 类型及约束;
alter table classes modify mascot varchar(100);
-- 修改表-修改字段:重命名版
-- alter table 表名 change 原名 新名 类型及约束;
alter table classes change mascot jxw int unsigned;
-- 修改表-删除字段
-- alter table 表名 drop 列名;
alter table classes drop jxw;
-- 删除表
-- drop table 表名;
-- drop database 数据库;
drop table test;
插入数据
-- 查询表内容
select * from students;
-- 全列插入
-- insert into 表名(字段1,字段2)values(值1,值2);
-- 主键字段 可以用 0 null default 来占位
-- 向classes表中插入 一个班级
> insert into classes(id,name) values(1,"koo");
-- 全部插入
-- insert into 表名 values(值1,值2,值3...)
insert into students values(1,"koo",18,1.70,"男",1);
-- 部分插入
-- insert into 表名(列1,...)values(值1,...)
-- 多行插入
-- insert into 表名(列1)values(值),(值);
insert into students(name) values("yoo"),("mia");
修改表数据
-- 修改
-- 全部修改
update students set age=16;
-- 按条件修改
> update students set age=28 where id=1;
-- 按条件修改多个值
update students set age=29,high=1.80 where id=1;
基本查询用法
select * from students;
select * from students where id=1;
select name,age from students;
select name,age from students where id=1;
select name as "姓名",age as "年龄" from students; -- 起别名
-- 删除语句
物理删除
delete from students where id=4;
逻辑删除
逻辑删除
用一个字段来表示 这条信息是否已经不能再使用了
给students表添加一个 is_delete 字段 bit 类型
alter table students add is_delete bit default 0;
update students set is_delete=1 where id=3;
select students.name from students;
select s.name,s.age from students as s;
//消除重复行
select distinct gender from students;
比较运算符和逻辑运算符
select * from students where age>=18;-- > < >= != or <>
-- 逻辑运算符
-- and / between..and
-- 18和28之间的所有学生信息
select * from students where age>=18 and age<=28;
select * from students where age between 18 and 28;
select * from students where age>18 and gender="女";
select * from students where age>18 and gender=2; -- 枚举的数据类型可以用数字来表示,数字从1开始
select * from students where age>18 or height>=180.00;
select * from students where not (age>18 and gender=2);
-- 模糊查询
-- 模糊查询(where name like 要查询的数据)
-- like
-- %替换任意个
-- _替换1个
-- 查询姓名中 以“小"开始的名字的学生信息
select * from students where name like "小%":
select * from students where name like "__":
-- 范围查询.
-- 范围查询
-- in(1,3,8)表示在一个非连续的范围内
-- 查询 年龄为18或34的姓名的学生信息
select * from students where age in (18,34); -- (18,34)不是区间,是确切的值
-- not in 不非连续的范围之内
-- 年龄不是 18或34岁的学生信息
select * from students where age not in (18,34);
-- between...and...表示在一个连续的范围内
-- 查询 年龄在18到34之间的学生信息
select * from students where age between 18 and 34;
select * from students where age not between 18 and 34;
-- 判断is null
select * from students where height is null;
select * from students where height is not null;
-- 排序查询
排序
order by 字段
asc asc从小到大排列,即升序
desc desc从大到小排序,即降序
查询年龄在18到34岁之间的男性,按照年龄从小到大到排序
select * from students where gender=1 and age between 18 and 24 order by age asc;
select * from students where gënder=2 and age between 18 and 34 order by height desc, age asc;
-- 分组查询
select gender from students group by gender;-- 可以消除重复
select gender, count(*) from students group by gender;
select gender,group_concat(name) from students group by gender;
-- 平均年龄
select gender,avg(age) from students group by gender;
having(注意having和group by 连用 having后通常也要跟 聚合函数)
注意:聚合函数如果做为条件出现,只能和having配合。不能和where配合使用。
查询平均年龄超过30岁的性别,以及姓名
select gender,avg(age) from students group by gender having avg(age)>30;
-- 分页查询
分页
limit start,count
limit 放在最后面(注意)
limit(要显示第几页-1)*每页分多少个,每页分多少个;
select * from students limit 2;
===
select * from students limit 0,2;
select * from students order by age asc limit 10, 2;
-- 连接查询
连接查询(表与表之间的链接,为了更好的查出有效数据)
inner join...on select...from 表A inner join 表B;
查询 有能够对应班级的学生以及班级信息
select * from students inner join classes;
select * from students inner join classes on students.cls_id=classes.id;
-- 子查询
select * from students where height>(select avg(height) from sudents);