目录
表操作
在进行对表的增删改查操作前,要通过
use database 数据库名;
来选中数据库
1.查看表
show tables;
可以查看所有的表;
desc 表名;
可以查看选中的表;
2.创建表
create table 表名 (列名 类型,列名 类型......);
create table student (name varchar(20),age int,score decimal(12,1));
接下来介绍一下常见数据类型:
tinyint:1个字节
smallint:2个字节
mediumint:3个字节
int(integer):4个字节
bigint:8个字节
float:4个字节,单精度
double:8个字节,双精度
decimal(m,d):定点数类型。m位数字,d位小数,底层实际上采用字符串的形式存储数字
varchar(x):可变长度的字符串,长度为x
datetime:8个字节,存储年月日+时分秒,格式:YYYY-MM-DD HH:MM:SS(从公元1000年~公元9999年)
3.修改表结构
alter table 表名 动作 列名 (类型)
alter table student add class_id int after gender;
#在student表中添加class_id列
alter table student modify class_id bigint;
#将class_id的数据类型更改为bigint
alter table student rename column class_id to classId;
#将列改名从class_id到classId
alter table student drop classId;
#删除列classId
4.删除表
drop table 表名;
drop table student;
增
语法格式:
insert into 表名(列1,列2,列3,...) values(值1,值2,值3,...);
表名后面的小括号当中的列名如果省略掉,表示自动将所有列都列出来了,并且列的顺序和建表时的顺序一致。
一般为了可读性强,建议把列名写上。
insert into 表名 values(值1,值2,值3,...);
一次可以插入多条记录:
insert into 表名 values(),()...;
查
1.全列查询
select * from 表名;
*为通配符,此处代表所有列
2.指定列查询
select 列名,列名 from 表名;
3.查询带有表达式
例如一个学生有语文和数学成绩
select name,chinese + math from student;
表示同时查学生的名字以及语文数学成绩的总和,表达式不会影响数据库内的数据
select name,chinese + 10 from student;
虽然查看到的学生语文成绩增加了10,但是数据库服务器硬盘中的语文成绩不会改变
4.查询带有别名
select name,chinese + math as total from student;

5.针对查询结果去重
select distinct 列名 from 表名;
若此处有多个列名,要求多个列都是相同的值才会去重
6.条件查询
比较运算符
>, >=, <, <=
⼤于,⼤于等于,⼩于,⼩于等于
=
等于,对于NULL的⽐较不安全,⽐如NULL = NULL结果还是NULL(FALSE)
<=>
等于,对于NULL的⽐较是安全的,⽐如NULL <=> NULL结果是TRUE(1)
!=, <>
不等于
value BETWEEN a0 AND a1
范围匹配,[a0, a1],如果a0 <= value <= a1,返回TRUE或1,NOT BETWEEN则取反
value IN (option, ...)
如果value 在optoin列表中,则返回TRUE(1),NOT IN则取反
IS NULL
是NULL
IS NOT NULL
不是NULL
LIKE
模糊匹配,% 表⽰任意多个(包括0个)字符;_ 表⽰任意⼀个字符,NOT LIKE则取反
逻辑运算符
AND
多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR
任意⼀个条件为 TRUE(1), 结果为 TRUE(1)
NOT
条件为 TRUE(1),结果为 FALSE(0)
无条件查询时

我们可以控制条件得到自己想要的数据

别名不能在条件中使用

会报找不到total的错误
并且where后面不能定义别名
模糊查询
like搭配通配符
select * from exam where name like '小%';
这里是查询名字为小开头的所有学生
select * from exam where name like '%小%';
则为名字包含小的所有学生
% 表⽰任意多个(包括0个)字符;_ 表⽰任意⼀个字符,例如小天才不能用小_查找到,只能用小__;
7.排序查询
#升序排序
select 列名,列名 from 表名 order by 列名,列名;
#降序排序
select 列名,列名 from 表名 order by 列名 desc,列名 desc;
在排序中,null默认为最小值。
按照order by 后面的列名排序,默认为升序(也可添加asc),列名后加desc就为降序排序。
order by 可以使用别名作为排序规则
8.分页查询
select 列名 from 表名 limit m offset n;
select 列名 from 表名 limit n, m;
获取从n开始的前m条数据;
若limit后只有m,就是查前m条数据;
改
update 表名 set 列名 = 值, ... where ... ...;
这里的 = 是赋值(sql中的 = 有相等和赋值两个含义)
删
delete from 表名 (where 条件...order by 列名 limit n)
drop是删除表,delete是删除表里面的数据;
其他
对比
insert into 表名()
select ... from 表名
update 表名
delete from 表名
1.插入查询
insert into 表名(列名) select 列名 form 表名;
将后面的列插入到前面
2.聚合函数
聚合函数是为了聚合查询,聚合查询就是在进行“行和行之间的运算”;
count([dietinct] expr)返回行数,某个列查询会忽略空值,若count(*),则会包括空值;
sum([dietinct] expr)返回总和;
avg([dietinct] expr)返回平均值;
max([dietinct] expr)返回最大值;
min([dietinct] expr)返回最小值;
例:count(*)不能写作count (*),count后面的空格会导致count被识别为列名,(*)被识别为别名,引发歧义。
#例如,查询所有学生的总成绩的总和
select sum(chinese + math + english) from student;
3.分组查询
分组查询的关键词是group by
select ... from emp group by ...;
select后面只能查询分组内容和聚合函数
4.having子句
使用group by 对结果进行分组处理后,对分组的内容进行过滤时,不能使用where,而要使用having
select ... from 表名 group by ... having ...

9013

被折叠的 条评论
为什么被折叠?



