SQL语句分类
目录
DDL
DDL:操作数据库、表、列等。
创建数据库
创建数据库db
create database db;
这样子的创建方式,当数据库db已经存在时,会报错误。
create database if not exists db;
这种创建方式,当db数据库存在也会成功执行语句,不会再执行创建的语句了。
查询数据库
show databases;
查询存在的数据库。
删除数据库
删除数据库db
drop database db;
当数据库不存在时,会报错。
drop database db if exists db;
当数据库不存在,也会成功执行,不再执行删除的语句。
使用数据库
使用数据库db,进入数据库db
use db;
查询当前正在使用的数据库
select database();
查询表
查询当前数据库下所有的表名称
先进入要查询的数据库,show tables;
查询表的结构
先进入要查询的数据库,desc 表名称;
创建表
create table 表名 (
字段名 数据类型,
字段名 数据类型
);
易忘:最后没有逗号。字符串类型char(定长)、varchar(最大长度)。{就算char不管后来存的是多大数据,只要不超过括号内的大小,它都按括号内的定长算内存。所以varcahr()比char节省空间,但是,char比vchar更快,需要看情况选择,比如基本能确定长度是固定的情况就用char}。
删除表
删除表
drop table 表名;
当删除的表不存时,会出现报错。
删除表时先判断表是否存在
drop table if exists 表名;
在删除之前会先判断表是否存在,不存在时也会正常执行。
修改表
修改表名
alter table 表名 rename to 新的表名;
添加一列
alter table 表名 add 列名 数据类型;
修改数据类型
alter table 表名 modify 列名 新的数据类型;
修改列名和数据类型
alter table 表名 change 列名 新列名 新数据类型;
删除列
alter table 表名 drop 列名;
DML
DML:对表中的数据进行增删改。
添加
给指定列添加数据
insert into 表名(列名1, 列名2, ...) values(值1, 值2, ...);
给所有的列添加数据
insert into 表名(所有列名) values(一行所有值), (一行所有值), ...;
修改数据
update 表名 set 列名1 = 值1, 列名2 = 值2, ...[where 条件];
where没有则会把所有记录修改。
删除数据
delete from 表名 [where 列 = 值];
没有where的话会把表里数据全部删除掉。
DQL
对表中的数据进行查询。
基本结构
select
字段列表
form
表名列表
where
条件列表
group by
分组字段
having
分组后条件
group by
排序字段
limit
分页限定
普通简单查询
查询列信息
select 列名, 列名, ... from 表名;
查询所有列时,列名可直接用*。
去除重复记录
select distinct 列名 from 表名;
对列起别名 as
select 列名 as 别名, 列名 as 别名, ... from 表名;
可以省略as,列名和别名之间空格。
条件查询
select 列名, 列名, ... from 表名 where 条件;
各种条件
数值在两数之间
>= and <=
>= && <=
between 数 and 数(推荐)
不等于
!=
<>
或
||
or(推荐)
集合中出现任意一个即可
in(数, 数, 数)
关于null
null不能用=、!=,需要用 is、is not
模糊查询
_单个任意字符,%多个任意字符
实例1:在student表中查询姓“斟”的学生的所有信息。
select * from student where name like '斟%';
实例2:在student表中查询第二个字是“茶”的学生的所有信息。
select * from student where name like '_茶%';
实例3:在student表中查询名字含有“冰”的学生的所有信息。
select * from student where name like '%冰%';
排序查询
基本结构
select 字段列表
from 表名
order by 排序字段名1 [排序方式1], 排序字段名2 [排序方式2] ...;
默认升序asc。
实例1:在student表中查询学生的所有信息,按照年龄升序排列。
select * from student order by age asc;
实例2:在student表中查询学生的所有信息,按照年龄升序排列。
select * from student order by age desc;
实例3:在student表中查询学生的所有信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩排列。
select * from student order by math desc, english asc;
分组查询
聚合函数
将一列数据作为整体,进行纵向计算。
count(列名) 统计数量
实例:统计student表中一共多少学生。
select * from student;
max(列名) 最大值
实例:查询student表中数学成绩最高分。
select max(math) from student;
min(列名) 最小值
实例:查询student表中数学成绩最低分。
select min(math) from student;
sum(列名) 求和
实例:求student表中数学成绩的总分。
select sum(math) from student;
avg(列名) 平均值
实例:求student表中数学成绩平均分。
select avg(math) from student;
分页查询
基本结构
select 字段列表 from 表名
limit 起始索引, 查询条目数;
实例1:从0开始查询,查询3条数据。
select * from student limit 0, 3;
实例2:每页显示3条数据,查询第一页的数据。
select * from student limit 0, 3
实例3:每页显示3条数据,查询第二页的数据。
select * from student limit 3, 3;