1.操作数据库:CRUD
1.C(Create):创建
*创建数据库:create database 数据库名称;
*创建指定字符集的数据库:create database 数据库名称 character set 字符集名称(gbk,utf8);
2.R(Retrieve)查询
*查询所有数据库名称:show databases;
*查询某个数据库的字符集:show create database 数据库名称;
3.U(Update)修改
*修改数据字符集:alter database 数据库名称 character set 字符集名称;
4.D(Delete)删除
*删除数据库:drop database (if exists) 数据库名称;
5.使用数据库
*查询当前正在使用的数据库名称:select database();
*使用数据库:use 数据库名称;
2.操作表
1.C(Create):创建
*create table 表名(
列名1 数据类型,
列名2 数据类型,
...
列名n 数据类型
);
*复制表:create table 表名 like 被复制表名;
*常用数据类型:
1.int
2.double(5,2)共5位,小数点后有2位
3.date:日期,yyyy-MM-dd
4.datetime:日期,yyyy-MM-dd HH:mm:ss
5.timestamp:时间错类型 yyyy-MM-dd HH:mm:ss如果将来不给这个字段复制,或复制为null
则默认使用系统当前时间,来自动赋值。
6.varchar:字符串
varchar(20):表示最大20个字符
例:
create table student(
id int,
name varchar(32),
age int,
score double(4,1),
birthday date,
insert_time timestamp
);
2.R(Retrieve)查询
*查询某个数据库中所有表的名称:show tables;
*查询表结构:desc 表名称;
3.U(Update)修改
*修改表名
alter table 表名 rename to 新的表名;
*修改表的的字符集
alter table 表名 character set 字符集名称;
*添加一列
alter table 表名 add 列名 数据类型;
*修改列名称 类型
alter table 表名 change 列名 新列明 新数据类型;
alter table 表名 modify 列名 新数据类型;
*删除列
alter table 表名 drop 列名;
4.D(Delete)删除
* drop table 表名;
* drop table if exists 表名;
5.DML:增删改表中数据
1.添加数据:
insert into 表名(列名1,列名2,...列名n) values(值1,值2...值n);
insert into 表名 values(值1,值2...值n);
2.删除数据:
*删除某一字段:alter table 表名 drop column 字段名;
*删除记录:delete from 表名 where 条件(id=2等);(不加条件将删除所有记录)
*删除表:truncate table 表名 (删除表,然后再创建一个一模一样的空表)
3.修改数据:
*update 表名 set 列名1=值1,列名2=值2,列名3=值3 where 条件;
6.DQL:查询表中记录
select * from 表名;(查询所有记录)
1.语法:
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
heving
分组自后的条件
order
排序
limit
分页限定
2.查询基础:
1.多个字段的查询
例:查询 姓名和年龄:select name,age from 表名;
2.去除重复
例:去除address:select distinct address from 表名;
3.计算列
例:计算math和english分数字和:select name,math,english,math+english from 表名;
如果有null参与的运算,计算结果都为null
解决办法:
select name,math,english,ifnull(math,0)+ifnull(english,0) from 表名;
4.起别名
select name,math 数学,english 英语,ifnull(math,0)+ifnull(english,0) as 总分 from 表名;
3.条件查询:
1.where子句后跟条件
2.运算符
> < <= >= = <>
between...and
in(集合)
is null
or 或 ||
not 或 !
例:查询年龄大于20:select * from 表名 where age>20;
查询年龄不等于20:select * from 表名 where age<>20;
查询年龄大于20小于30:
select * from 表名 where age>20 && age<30;
select * from 表名 where age>20 and age<30;
select * from 表名 where age between 20 and 30;
查询年龄15,17,18岁的信息:
select * from 表名 where age=15 or age=17 or age=18;
select * from 表名 where age in(15,17,18);
查询英语成绩为null:
select * from 表名 where english=null;这是不正确的
select * from 表名 where english is null;正确
查询英语成绩不为null:
select * from 表名 where english is not null;
模糊查询:
查询姓马的有哪些? like
select * from 表名 where name like '张%';
查询第二个字是‘小’的人:
select * from 表名 where name like '_凤%';
查询姓名是3个字的人:
select * from 表名 where name like '___';
查询姓名中包含‘三’的人:
select * from 表名 where name like '%三%';
4.排序查询:
order by 排序字段1 排序方式1,排序字段2 排序方式2...
排序方式:
ASC:升序,(默认)
DESC:降序
例:按数学成绩升序查询:
select * from 表名 order by math ASC;
如果数学成绩一样,按照英语成绩排序:
select * from 表名 order by math ASC,english DESC;
注:如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。
1.语法:group up 分组字段
注:分组之后查询的字段:分组字段、聚合函数
where和having的区别:
where在分组之前进行限定,如果不满足条件,则不参与分组,having在 分组之 后进行限定,如果不满足结果,则不会被查询
2.例:按性别分组,分别查询男女同学的平均分,人数
select sex,avg(math),count(id) from 表名 group by sex;
按性别分组,分别查询男女同学的平均分,人数,要求:分数低于70的人不参与分组。
select sex,avg(math),count(id) from 表名 where math>70 group by sex;
按性别分组,分别查询男女同学的平均分,人数,要求:分数低于70的人不参与分组,分组之后人数要大于2
SELECT sex,AVG(math),COUNT(id) FROM person WHERE math>70 GROUP BY sex HAVING COUNT(id)>=2;
SELECT sex,AVG(math),COUNT(id) 人数 FROM person WHERE math>70 GROUP BY sex HAVING 人数 >=2;
7.分页查询:
1.语法:limit开始的索引
2.例:
SELECT * FROM person LIMIT 0,3;#第一页
SELECT * FROM person LIMIT 3,3;#第二页
3.公式:开始的索引=(当前的页码-1)*每页显示的页数
分页操作是一种"方言"