四大类:
1、DDL (数据定义) 建库,建表 列等.create,drop,alter等
2、DML(数据操控) 增删改 insert,delete, update等
3、DQL(数据查询)对表中的查询操作 select,where等
4、DCL(授权) GRANT REVOKE等
CRUD :增删改查
一、DDL
C、Create 创建
CREATE DATABASE 数据库名称; //创建数据库 默认字符集UTF-8
CREATE DETABASE IF NOT EXISTS 数据库名 ; //如果数据库不存在才创建,存在不会报错
CREATE DATABASE DB3 CHARACTER SET 字符集(GBK..UTF-8...); // 创建数据库的同时指定字符集
CREATE DATABASE IF NOT EXISTS DB3 CHARACTER SET GBK ;//判断创建数据库并且指定字符集
R、Retrieve :查询
SHOW DATABASES;//查询数据库
show crtate database mysql(数据库名);//查询数据库的信息;
U、 (Update:):修改
ALTER DATABASE DB3(数据库名) CHARACTER SET UTF8(字符集); //设置字符集
D、(Delete):删除
DROP DATABASE DB3(数据库名称);//删除数据库k
DROP DATABASE IF EXISTS DB3;//如果存在就删除不存在不报错
使用数据库:
use db1(数据库名);//使用数据库
select database();查询当前正在使用的数据库;
表的创建
C、Create 创建
SQL常见数据类型:
CREATE TABLE student(列名(字段)1 数据类型,列名2(字段) 数据类型,列名3 数据类型,....);//创建表
CREATE TABLE 新表名字 LIKE 被赋值的表名; //复制表
R、Retrieve :查询
SHOW TABLES;;//查询表
DESC TABLENAME(表名);//查询表的结构
U、 (Update:):修改
ALTER TABLE 表名 RENAME TO 新的表名;//修改表名
ALTER TABLE 表名 CHRARCTER SET UTF8;//修改字符集
ALTER TABLE 表名 ADD 列名 数据类型;//添加字段
ALTER TABLE 表名 CHANGE 需要修改的字段名 新的字段名 新的数据类型;//修改字段名和类型
ALTER TABLE 表名 MODIFY 字段名 新类型;//修改字段的类型
ALTER TABLE 表明 DROP 字段名//删除字段
D、(Delete):删除
DROP TABLE TABLENAME;
二、DML(数据操作)
:
添加数据
除了数字类型 其他类型需要引号;
insert into 表名(列名1,列明2,.......列N) values(值1,值2,.......值N)//给表的字段添加数据,这种写法需要前后对应
insert into 表名values(值1,值2,.......值N);//给表的字段添加数据,简化的书写
删除数据
DELETE FROM stu(表名) WHERE id=1; //删除 id=1的数据,如果不加条件则删除所有记录
TRUNCATE TABLE stu();//删除数据表再创建同名的数据表(效率比较高)
修改数据
如果不加条件则会将表中所有记录全部修改;
UPDATE 表名 SET 列名1 = 值1,列明2=值2,.... WHERE id=1;//更改字段的值,不加where条件判断的话会更改所有
三、3、DQL(数据查询)
查询
1、查询语法:
select 字段列表
from 表明列表
where 条件列表
group by分组字段
having 分组之后的条件
order by 排序
limit 分页限定
基础查询
//创建一个表
CREATE TABLE student3 (
id int, -- 编号
name varchar(20), -- 姓名
age int, -- 年龄
sex varchar(5), -- 性别
address varchar(100), -- 地址
math int, -- 数学
english int -- 英语
);
INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES (1,'马云',55,'男','
杭州',66,78),(2,'马化腾',45,'女','深圳',98,87),(3,'马景涛',55,'男','香港',56,77),(4,'柳岩
',20,'女','湖南',76,65),(5,'柳青',20,'男','湖南',86,NULL),(6,'刘德华',57,'男','香港',99,99),(7,'马德',22,'女','香港',99,99),(8,'德玛西亚',18,'男','南京',56,65);
a. 多个字段的查询
SELECT * FROM 表名; // *代表查询所有
SELECT 列名1,列名2,列名3 ...FROM 表明 //select 和FROM 输入需要查询的字段名;
b. 去除重复
//查询的列表称为结果集
//查询的参数后面可以自己取别名
SELECT DISTINCT address FROM student3;//查询
c. 计算列
IFNULL(需要判断的字段,为null后替换的值);
SELECT math,english,math + english FROM student3; //计算 math + english的合(如果有null参加的运算结果为null)
SELECT math,english,math + IFNULL(english,0)FROM student3;//IFNULL()函数,第一个参数是字段名,第2个是赋值)
d. 起别名
SELECT math,english,math + IFNULL(english,0) AS 总分 FROM student3; //给运算后的结果字段起别名,
条件查询
WHERE 子句后面跟表达式
SELECT * FROM student3 WHERE age > 20; ///查询表里age>20的;
SELECT * FROM student3 WHERE age < >20; ///查询表里不等于20的;
SELECT * FROM student3 WHERE age>20 && age<30;//查询表里大于20小于30的;
SELECT * FROM student3 WHERE age>20 AND age<30;//查询表里大于20小于30的;
SELECT * FROM student3 WHERE age BETWEEN 20 AND 30;//查询表里大于20小于30的;
SELECT * FROM student3 WHERE age=22 OR age = 18 OR age =25; //or 查询指定数据
SELECT * FROM student3 WHERE age IN (22,18,25); // IN()//函数指定查询;
SELECT * FROM student3 WHERE english IS NULL;//查询字段值为null的数据要使用is
SELECT * FROM student3 WHERE english IS NOT NULL;//查询不为null的数据
SELECT * FROM student3 WHERE NAME LIKE '马%';//模糊查询 like '';%任意个字符
SELECT * FROM student3 WHERE NAME LIKE '_化%';//模糊查询 like''; _单个任意字符
排序查询
order by 子句;
order by 排序字段1 排序方式,排序字段2,排序方式2....
SELECT * FROM student3 ORDER BY math ASC; //默认ASC 升序
SELECT * FROM student3 ORDER BY math DESC;//降序
SELECT * FROM student3 ORDER BY math,english ASC;//如果有多个排序条件,当前面条件直一样时,才会判断第二个条件
聚合函数
将一列数据作为一个整体,进行纵向的计算;
聚合函数的计算会排除null值
conut 计算
>>SELECT COUNT(name) FROM student3;
>SELECT COUNT(IFNULL(english,0)) FROM student3;//因为null值是排除的,可以先进行判断赋值在进行计算
>一般选择非空的列(主键)进行计算; 推荐,
>SELECT COUNT(*) FROM student3;//选择所有数据进行计算,不推荐
max 计算最大值
SELECT MAX(math) FROM student3;//math字段的最大值
min 计算最小值
SELECT MIN(math) FROM student3;//math字段的最大小
sum 求和
SELECT SUM(math) FROM student3;math字段的的合
avg 计算平均值
SELECT AVG(math) FROM student3;//计算平均值;
分组查询
语法
1、gourp by 分组字段;
2、分组之后查询的字段 分组字段聚合函数(分组后的聚合函数是处理分组后的数据);
SELECT sex FROM student3 GROUP BY sex;//把字段sex分组;
SELECT sex,AVG(math) FROM student3 GROUP BY sex;//算出 男女的平均分
SELECT sex,COUNT(id) FROM student3 GROUP BY sex;//计算男女人数,
SELECT sex,COUNT(*),SUM(math) FROM student3 GROUP BY sex;//获得男女各自组的人数 和男女各自组的总成绩
//计算男女各自人数 男女各自平均分 低于70的不参加计算;
SELECT sex,AVG(math) 平均分,COUNT(id) FROM student3 WHERE math > 70 GROUP BY sex;
//对分组大于个3个数据的组进行函数计算
SELECT sex,AVG(math),COUNT(id) FROM student3 GROUP BY sex HAVING COUNT(id) > 3;
//简写方式 使用别名判断
SELECT sex,AVG(math),COUNT(id) 人数 FROM student3 GROUP BY sex HAVING 人数 > 3;
where 和having区别:
where 在分组之前进行限定 ,不满足条件则不参与分组;
where 不能进行聚合函数的判断;
HAVING 在分组之后进行限定,如果不满足结果,则不会被查询出来;
HAVING 可以进行聚合函数的判断;
//过滤低于N个数据的分组;
分页查询
1 limit 开始的索引,每页查询的条数;
SELECT * FROM student3 LIMIT 0,3;//第一页
SELECT * FROM student3 LIMIT 3,3;//第二页
SELECT * FROM student3 LIMIT 6,3;//第三页 3-2 * 3
公式 - 开始的索引-:(当前的页码 - 1) * 每页的条数
limit 操作是 mysql 的分页语句