dml
1.添加数据
*语法 :
*insert into 表名(列名1,列名2,……..列名n)values(值1,值2,…值n)
*注意:
1.列名和值要一一对应
2.如果表名后,不写列名,就要给所有列添加值
Insert into 表名 values(值1,值2,…值n);
3.除了数字类型其他的类型都需要引号(单双都ok)
2.删除语句:
语法:
- delete form 表名 [while 条件]
- 这样子就会导致id为1的一行全被删除
注意:
如果不写条件,就删除表中全部记录
删除全部记录
1.delete from 表名;---有多少条记录就会执行多少次删除操作
2.TRUNCATE TABLE 表名;---只会执行一次,先删除表然后再创建一张一样的表
3.修改数据:
- 语法:
- update 表名 set 列名1 = 值1,列名2 = 值2,…[where 条件];
注意:
1.如果不加任何条件,就会将表中全部数据都会修改
dql
select * from 表名(查询所有)
1.语法:
Select
字段查询
From
表名列表
Where
条件列表
Group by
分组字段
Having
分组之后的条件
Order by
排序
Limit
分页限定
2.基础查询
查询所有的就是select * from 表名
1.多个字段的查询
查询姓名和年龄
Select name,age from 表名
标准格式
计算两个值
Select name ,math(列名), English(列名),math+English from 表名
有null参与的计算为null
解决方法:
Select name ,math,English,math+ifnull(English,0)form 表名
解决两个值计算后的名字(起别名)as可省略用空格代替
Select name ,math,English,math+ifnull(English,0)as 总分 form 表名
2.去除重复的结果集
Select distinct address(列名)form 表名
用完这个后(去除重复),图中一样是因为有可能多个空格什么的
条件查询
1.where 子句后跟条件
2.运算符
- > , < , <= , >= , = , <>(不等号)
- BETWEEN…AND(包含20和30)
Select * form 表名 where age between 20 and 30;
- IN(集合)(找22和19和18)
Select * form 表名 where age IN (22,19,28);
- IS NULL(查询谁为null)
Select * form 表名 where english is null;
Select * form 表名 where english is not null;(不为null)
- And 或 &&
- Select * form 表名 age >=30 && age<=30;(不推荐&&建议and)
- Or 或 ||(找22和19和25)
- Select * form 表名 where age=22 or age=19 or age= 25;
- Not 或 !(非)
- Like(下划线表示就是一个,%就是表示随便多少个)
- 第一个为‘马’
- Select * from 表名 where name like ‘马%’;
- 中间为马
- 第一个为‘马’
Select * from 表名 where name like ‘_马%’;
- 三个字的
- Select * from 表名 where name like ‘___’(三个下划线);
- 有马就ok
- Select * from 表名 where name like ‘%马%’;
排序查询
语法: order by 列名
按数学成绩排名
Select * form 表名 order by math(列名) 排序方式(asc desc)
asc升序(默认)
desc降序
假如有一样的,就看英语成绩(第一条件一样时才看第二条件)
Select * from 表名 order by math 排序方式 ,English 排序方式;
聚合函数(排除了非空,不计算非空)可以用ifnull解决
将一列数据作为一个整体,作为计算
1.count:计算个数
一般选择非空的列:主键
Select count(name)from 表名;
2.max:计算最大值
3.min:计算最小值
4.sum:计算和
5.age:计算平均值
分组查询:group by
查询男女的平均分
Select sex(列) , (聚合函数)avg(列名),count(id)from 表名 group by 列名
限定分组条件
Select sex(列) , (聚合函数)avg(列名),count(id)from 表名 where math > 70 group by 列名
人数还要大于2个才可以查询
Select sex(列) , (聚合函数)avg(列名),count(id)from 表名 where math > 70 group by 列名 having count(id) > 2;
注意:
where和having的区别
1.where在分组之前进行限定,如果不满足条件,就不参加分组。having就是在分组之后限定不满足就不会查询出来
2.where后不可以跟聚合函数,having 可以进行聚合函数的判断
分页查询(limit为方言只能mysql用)
语法:limit 开始的索引,每页查询的条数;
公式:开始的索引 = (当前的页码 - 1)* 每页显示的条数
约束
非空约束:(某一列的值不能为null)
在创建表添加非空约束
CREATE TABLE stu(
id INT,
NAME VARCHAR(20) NOT NULL -- nama为非空
);
创建完表后:
Alter table 表名 modify name varchar(20)not null;
这样子也可以约束
快捷操作:右击表,改变表
删除非空约束
Alter table 表名 modify varchar(20);(就是修改表的字段就ok)
唯一约束:(某一列的值不能重复)
在创建表时
CREATE TABLE stu(
id INT,
NAME VARCHAR(20) UNIQUE -- nama为非空
);
唯一约束可以有null值,但是只能有一条记录为null
在创建表后
Alter table 表名 modify 列名 varchar(20)UNIQUE;
删除唯一约束:
Alter table 表名 drop index 列名
主键约束
注意:
1.含义:非空且唯一
2.一张表只能用一个字段为主键
3.主键就是表中记录的唯一标识
在创建表中添加主键约束
Create table stu(
Id int primary key, --给id添加主键约束
Name varchar(20)
);
创建表后添加主键:
Alter table stu modify id int primary key
删除主键:
Alter table stu drop primary key;
自动增长:
概念:如果某一列是数值类型的,使用auto_increment 可以来完成值的自动增长
比如在id中1 2 3 4…
在创建表中,添加主键约束并添加自动增长
Create table stu(
Id int primary key auto_increment, --给id添加主键约束和自动增长
Name varchar(20)
);
自动增长只与上一个有关
删除和添加
外键约束:
1.创建表时,添加外键
*语法:
Create table 表名(
…
外键列 ----外键对应主表主键
Constraint 外键名称 foreign key(外键列名称) references 主表名称(主表列名称)
)
department为主表 employee为次表(外键值可以为null也就是说id可以为null)
删除外键
Alter table employee(表名) drop foreign key emp_dept_fk(外键名);
创建表后添加外键:
Alter table employee(表名)add Constraint 外键名称 foreign key(外键列名称) references 主表名称(主表列名称)
级联操作:
改主表时候,顺便也可以改次表关联的东西
级联更新:
Constraint 外键名称 foreign key(外键列名称) references 主表名称(主表列名称)on update cascade;
级联删除:
Constraint 外键名称 foreign key(外键列名称) references 主表名称(主表列名称)on delete cascade;
数据库设计
一对多(多对一)
在多的一方建立外键指向一的一方的主键
多对多:
多对多的关系需要借助中间表来实现中间表至少包含两个字段,这两个字段作为
第三张表的外键,分别指向两张表的主键
一对一:
一对一关系实现可以在任意一方添加唯一外键指向另一方的主键