前提:
我们要创建一张三国街,书生学堂的期末考试成绩表,学堂学员及其对应的乘积如下:
学员 | 数学成绩 | 英语成绩 | 学籍 |
孙权 | 70 | 90 | 吴 |
孙策 | 77 | 89 | 吴 |
曹操 | 90 | 91 | 魏 |
书生 | 7 | 0 |
数据的插入
全列插入:
insert into [表名称] values (每列对应的值) ;
eg:insert into stu values (1,'孙权',70,90,'吴'),(2,'孙权',77,89,'吴'),(3,'曹孟德',90,91,'魏');
指定列插入:
insert into [表名称] (列名称) values (每列对应的值);
eg:insert into stu (name,shuxue,yingyu) values ('书生',7,0);
此时我们的成绩就全部插入完毕了,但是我们发现曹操的名字写错了,我们需要改正;直接插入不可以,不只是错的成绩仍能显示,因为学号是主键,不允许重复!我们现在有不会删除数据,那么我们怎么办呢!引用新的操作:替换!
因为主键或者唯一键的束缚而插入失败,可使用下面的语句:
replace into [表名称] (列名称) values (每列对应的值)
如果主键或唯一键不冲突,直接插入数据
如果发生冲突,更改数据 ,未指定的列将变为空
数据的查询
select:
全列查询:select * from [表名称];
指定列查询: select [要查询的字段] from [表名称];
注:要查询的字段可以为表达式,还可以为查询字段起别名 [要查询的字段] [别名]
结果去重: select distinct [要查询的字段] from [表名称];
where语句:
运算符 描述 >,>=,<,<= 大于,大于等于,小于,小于等于 =,<=> 等于,使用= ,NULL不安全,NULL=NULL的结果为NULL
使用<=>,NULL安全,NULL<=>NULL的结果是true
!=,<> 不等于 between a0 and a1 范围匹配,返回[a0,a1]范围内的值 in(option) 如果是option中的任意一个,就返回 is null 是null is not null 不是null like 模糊匹配
%表示匹配任意多个字符(包括0个)
-表示任意一个字符
逻辑运算符 描述 and 所有条件都为true,才为true or 任意一个条件为true,就为true not 在为true的情况下,结果为false 注:
别名不能用在where条件语句中
结果排序:
ASC(升序) DESC(降序)
使用order by 语句时,不指定默认为ASC
筛选的结果分页显示
起始默认位置为0
limit n;从0开始打印n条数据
limit s,n; 从s开始打印n条数据
limit n offset s;从s开始打印n条数据
分组查询
group by
更改数据
update [表名称] set [列名称]=[更改的值] [用where,或其余语句进行选择]
注:如果没有where等语句进行选择更改,则更新整张表的数据
上面我们知道学号为2的同学不是孙权,而是他哥哥孙策,现在我们需要进行更改
删除数据
delete from [表名称] [where...]
delete from [表名称] :会删除整张表的数据
将数据删除后,自增长不会受到任何影响,如上图所示,插入新数据后,不指定则id为5
截断表
truncate [表名称] 或者 truncate table [表名称]
会删除整张表的数据,自增长也会进行重置
多表查询
eg:显示部门为10的部门名、员工名和工资
子查询和自连接
自连接是指同一张表连接查询
子查询是指嵌入其他sql语句中的select语句,也叫嵌套查询
eg:查询SMITH的领导姓名和领导编号
子查询:
自连接:
通过上面的两个例子,我们发现我们组合语句进行查询,也就是所谓复合查询!我们下面也这样进行组合。
多行子查询:
in关键字
查询与部门号为10的职业相同的人员的姓名,职业和编号
all关键字
查询比部门号为30的职员工资高的职员的编号、姓名和工资
any关键字
查询比部门号为30的任意职员工资高的职员的编号、姓名和工资
多列子查询
查询和SMITH的部门和岗位完全相同的所有雇员的姓名,不含SMITH本人
from语句中使用子查询
合并查询
union :该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行
union all:该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行!
注:如果本篇博客有任何错误和建议,欢迎伙伴们留言,你快说句话啊!