目录
SQL通用语法
-
SQL语句可以单行或者多行书写,以分号结尾。
-
MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
-
注释 单行注释:--或#;多行注释/* */
SQL分类
DDL:操作数据库,表
DML:对表中的数据进行增删改
DQL:对表中的数据进行查询
DCL:对数据库进行权限控制
DDL
操作数据库
show databases;-- 查询数据库
create database 数据库名;-- 创建数据库
create database if not exists 数据库名;-- 创建数据库(如果不存在)
drop database 数据库名;-- 删除数据库
drop database if exists 数据库名; -- 如果存在才删除
use 数据库名称;-- 使用数据库
select database();-- 查看当前使用的数据库
操作表
查询表
show tables; -- 查询当前数据库下所有表名称
describe/desc 表名称;-- 查询表结构
创建表
create table 表名(
字段名 数据类型,
字段名 数据类型,
..........
字段名 数据类型
);
注意:最后一个不加,
数值类型常用:
例:grade double(0-100成绩 保留两位小数)--->grade double(5,2),
日期时间类型常用:
字符串类型:
char 定长数据类型 存储效率高 浪费空间
varchar 变长数据类型 存储效率低 节约空间
二进制:
删除表
drop table 表名;-- 删除表
drop table if exists 表名;-- 如果存在在删除
修改表
alter table 表名 rename to 新表名;-- 修改表名
alter table 表名 add 列名 类型;-- 添加一列
alter table 表名 modify 列名 新类型;-- 修改数据类型
alter table 表名 change 列名 新列名 新数据类型;-- 修改列名和数据类型
alter table 表名 drop 列名;-- 删除列
DML
添加数据
-- 给指定列添加数据
insert into 表名(列1,列2,...) values(值1,值2);
-- 给全部列添加数据,列名列表可以省略
insert into 表名 values(值1,值2,...);
-- 批量添加数据
insert into 表名(列1,列2,...) values(值1,值2,...),(值1,值2,...)...;
insert into 表名 value(值1,值2,...),(值1,值2,...)...;
修改表数据
-- 修改数据
update 表名 set 列名1=值1,列名1=值1,....[where 条件];
删除数据
-- 删除数据
delete from 表名 where 条件;
-- 不加条件会对所有数据删除
DQL
查询语法
select
字段列表
from
表名列表
where
条件查询
group by
分组字段
having
分组后条件
order by
排序字段
limit
分页限定
基础查询
-- 查询指定列
select 列名1,列名2 from 表名;
-- 查询所有(不建议使用*)
select * form 表名;
-- 去除重复记录
select distinct 列名1 from 表名;
-- 取别名
select 列名 as 别名,列名 as 别名,.. from 表名;
条件查询where
select 列名 from 表名 where 条件;
模糊查询LIKE
统配符:1. _ :代表单个任意字符 2. %:代表任意个数字符
排序查询order by
select 字段列表 from 表名 order by 排序字段1 [排序方式],排序字段1 [排序方式]....;
排序方式:
ASC:升序排列(默认)
DESC:降序排列
注意:如果有多个条件,当前面的条件值一样是,才会根据第二条进行排序
分组查询group by
聚合函数
函数名 | 功能 |
---|---|
count(列名) | 统计数量(一般选用不为null的列) |
max(列名) | 最大值 |
min(列名) | 最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
select 聚合函数名(列名) from 表;
注意:null值不参与所欲聚合函数运算
-- 避免非空的情况1.主键查询 2.下面的方式
select count(*) from stu;
分组查询
select 字段列表 from 表名 [where 分组前条件限定] group by 分组字段名
[having 分组后条件过滤];
注意:分组后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
where和having的区别:
-
执行时机不同,where是分组前限定,而having是分组后进行过滤
-
判断的条件不同,where不能对聚合函数进行判断,having可以
执行顺序: where>聚合函数>having
例:
-- 查询男女同学各自的数学平均分
select sex,avg(math) from stu group by sex;
-- 查询男女同学各自的数学平均分,以及各自人数
select sex,avg(math),count(*) from stu group by sex;
-- 查询男女同学各自的数学平均分,以及各自人数;要求:分数大于70才分组
select sex,avg(math),count(*) from stu where math > 70 group by sex;
-- 查询男女同学各自的数学平均分,以及各自人数;要求:分数大于70才分组,分组后人数大于2
select sex,avg(math),count(*) from stu where math > 70 group by sex having count(*) > 2;
分页查询limit
分页语法:
select 字段列表 from 表名 limit 起始索引,查询条目数;
计算公式:起始索引=(当前页码-1)*每页显示的条目
例:
-- 从0开始查询,查询3条数据
select * from stu limit 0 , 3;
-- 每页显示3条数据,查询第一页的数据
select * from stu limit 0 , 3;
-- 每页显示3条数据,查询第二页的数据
select * from stu limit 3 , 3;
-- 每页显示3条数据,查询第三页的数据
select * from stu limit 6 , 3;
tips:
-
分页查询limit是MySQL的数据库方言
-
Oracle分页查询使用rownumber
-
SQL Server 分页查询使用top