一、插入数据 insert
向表中制定字段添加数据:insert into 表 (字段名1,字段名2......) values(值1,值2......);
向表中所有字段添加数据:insert into 表 values(值1,值2......);
复制代码
注意:
- values中的‘值’得数量要和字段名的数量一致;
- ‘值’的顺序要和字段名的顺序一致;
- 插入‘值’的类型要和字段的类型一致;
- 插入的‘值’不要超过你所设置的最大长度;
- 插入的‘值’如果是字符串或者是日期请记得添加单引号;
- 如果是使用的插入语句是向表中所有字段添加数据那么你的‘值’的数量和类型要和表里面的一致
二、修改数据 update
修改数据:update 表名 set 字段名1=值1,字段名2=值2;
带条件的修改数据:update 表名 set 字段名1=值1,字段名2=值2 where 条件;
复制代码
注意:
- 修改‘值’的类型需要和字段名一致;
- 修改‘值’的时候不能超过最大长度;
- 修改的‘值’如果是字符串或者是日期请记得添加单引号;
三、删除数据delete
带条件的删除语句:delete from 表名 [where 条件];复制代码
注意:delete from 表名;和truncate table 表名;的区别
- 从删除方式来说delete是一条一条的删除记录,不会去清空auto_increment记录数。而truncate则是直接将表删除重新建一个表,auto-increment将会被清空没有记录。
- 从事物方面来说delete删除的数据在一个事物内还能够找回,而truncate删除的数据是找不回来的。
四、查询数据 select
查询语句的基本语法:select [distinct] * 或者 字段名1,字段名2 from 表 [where 条件];
复制代码
distinct这个关键字在你使用的时候需要注意一下,当你查询的字段值只有一个的时候它会去掉这一个字段中 所有相同的数据如果你要是查询的是多个字段那么它会根据你的这两个字段来进行查询除非是这两个字段中的数据同时与其他的数据相同才会去除重复的。
为了简单的来说明这个基本查询我们来创建一张表用来举例:
#创建一张表
create table student(
#学号
id int(5) primary key auto_increment,
#学生名字
name varchar(10),
#学生年龄
age int(3),
#学生生日
s_date date
)复制代码
表创建完之后再插入一些数据
insert into student values (null,'张三',19,null);
insert into student values (null,'李四',20,null);
insert into student values (null,'王五',20,null);
insert into student values (null,'赵六',19,null);复制代码
简单查询:
1、查询所有学生
select * from student;复制代码
2、查询学生的学号和名字
select id,name from student;复制代码
3、使用别名的方式来查询学生的名字
select name as '学生' from student;复制代码
4、筛选学生年龄
select distinct(age) from student;复制代码
5、将所有学生的年龄加10显示
select name,age+10 as age from student;复制代码
条件查询:
在开始这些查询之前先说一下where后面的内容怎么写
比较运算符:
> 大于
< 小于
<= 小于等于
>= 大于等于
= 等于
<> 不等于
!= 这个也是不等于但是这个并不是sql的标准语法
between...and... 显示在某一个区间的值
in(...) 显示在in列表中的值比如说in(1,2,3)
like'%' 模糊查询,在like语句中'%'代表着零个或者多个字符,'_'代表着一个字符
is null 判断非空
逻辑运算符:
and 多个条件同时成立
or 多个条件任意一个成立
not 条件不成立复制代码
1、显示名字为'张三'学生的所有信息
select * from student where name = '张三';
2、查询年龄大于等于20岁的学生
select * from student where age>=20;
3、查询姓'张'的学生
select * from student where name like '张%';
4、查询id为'1'和'4'的学生
select * from student where id in(1,4);
5、查询id为'1'或者'3'的学生
select * from student where id=1 or id=3;
6、查询年龄为19同时id为1的学生
select * from student where age = 19 and id = 1;
排序查询
select ... order by 字段 asc或者desc...;
asc就是升序,desc就是降序
根据学号来对学生进行升序排序
select * from student order by id asc;
根据学号来对学生进行升降序排序
select * from student order by id desc;
聚合函数
sum() 求和
avg() 平均
max() 最大值
min() 最小值
count() 计数复制代码
查询所有学生年龄的总和
select sum(age) from student;
查询所有学生年龄最大值
select max(age) from student;
查询所有学生年龄最小值
select min(age) from student;
查询学生总数
select count(id) from student;
查询学生平均年龄
select avg(age) from student;
分组查询
group by...
如果你进行分组查询的话那么你只能使用having来进行查询,这里我就不细说了我会在之后的面试题中来进行具体的分析。
五、数据库表与表之间的关系
数据库表与表之间的关系基本上就是一下三种
1、一对多关系
- 例子:客户表与订单表之间的关系,部门表与员工表之间的关系,商品分类表和商品表之间的关系。
- 一对多建表原则:就拿上面的例子直接来说一个客户会有多个订单,那么客户表就是一,订单表就是多,创建表的时候就需要给‘多’的一方也就是订单表设置一个外键,目标是指向‘一’的一方的也就是客户表的主键。这样就实现了一对多。
2、多对多关系
- 例子:学生表和课程表之间的关系,商品表和订单表之间的关系,人物表和角色表之间的关系
- 多对多建表原则:多对多的话就不在是两张表了,而是需要添加一张中间表,是三张表进行操作,这张中间表需要有两个字段这两个字段需要作为外键分别指向各自的自一方的主键。简单的理解就是把一个多对多,变成两个一对多。
3、一对一关系
着中关系的表开发中确实比较罕见就不举例了。
六、多表查询
1、交叉连接查询(基本不会使用,这样是得到的两个表的乘积)
语法:select * from A表,B表;
2、内连接查询()
- 隐式内连接:select * from A表,B表 where 条件;
- 显示内连接:select * from A表 inner join B表 on 条件;
3、外链接查询
- 左外链接:select * from A表 left outer join B表 on 条件;
- 右外链接:select * from A表 right outer join B表 on 条件;
4.子查询
简单的理解就是将一条sql语句查询出来的表的结果作为另一个查询语句的表;
select * from table where table.id=(select id from table2 where table2.id=1);