dml dql 约束 数据库设计

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 条件]
  • dml dql 约束 数据库设计_第1张图片
  • 这样子就会导致id1的一行全被删除

注意:

如果不写条件,就删除表中全部记录

删除全部记录

1.delete from 表名;---有多少条记录就会执行多少次删除操作

2.TRUNCATE TABLE 表名;---只会执行一次,先删除表然后再创建一张一样的表

3.修改数据:

  • 语法:
    • update 表名 set 列名1 = 1,列名2 = 2…[where 条件]
  • dml dql 约束 数据库设计_第2张图片

注意:

1.如果不加任何条件,就会将表中全部数据都会修改

 dql

  select * from 表名(查询所有)

1.语法:

Select

字段查询

From

表名列表

Where

条件列表

Group by

分组字段

Having

分组之后的条件

Order by

排序

Limit

分页限定

2.基础查询

查询所有的就是select * from 表名

1.多个字段的查询

查询姓名和年龄

Select nameage from 表名

dml dql 约束 数据库设计_第3张图片

标准格式

dml dql 约束 数据库设计_第4张图片

计算两个值

Select name math(列名), English(列名),math+English from 表名

dml dql 约束 数据库设计_第5张图片

null参与的计算为null

解决方法:

Select name mathEnglishmath+ifnullEnglish0form 表名

解决两个值计算后的名字(起别名)as可省略用空格代替

Select name mathEnglishmath+ifnullEnglish0as 总分 form 表名

dml dql 约束 数据库设计_第6张图片

2.去除重复的结果集

Select distinct address(列名)form 表名

dml dql 约束 数据库设计_第7张图片

用完这个后(去除重复),图中一样是因为有可能多个空格什么的

dml dql 约束 数据库设计_第8张图片

条件查询

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升序(默认)

dml dql 约束 数据库设计_第9张图片

desc降序

dml dql 约束 数据库设计_第10张图片

假如有一样的,就看英语成绩(第一条件一样时才看第二条件)

Select * from 表名 order by math 排序方式 ,English 排序方式;

聚合函数(排除了非空,不计算非空)可以用ifnull解决

将一列数据作为一个整体,作为计算

1.count:计算个数

一般选择非空的列:主键

Select countnamefrom 表名;

2.max:计算最大值

3.min:计算最小值

4.sum:计算和

5.age:计算平均值

分组查询:group by

查询男女的平均分

Select sex(列) (聚合函数)avg(列名),countidfrom 表名 group by 列名

限定分组条件

Select sex(列) (聚合函数)avg(列名),countidfrom 表名 where math > 70 group by 列名

人数还要大于2个才可以查询

Select sex(列) (聚合函数)avg(列名),countidfrom 表名 where math > 70 group by 列名 having countid > 2;

dml dql 约束 数据库设计_第11张图片

注意:

where和having的区别

1.where在分组之前进行限定,如果不满足条件,就不参加分组。having就是在分组之后限定不满足就不会查询出来

2.where后不可以跟聚合函数,having 可以进行聚合函数的判断

分页查询(limit为方言只能mysql用)

语法:limit 开始的索引,每页查询的条数;

公式:开始的索引 = (当前的页码 - 1* 每页显示的条数

dml dql 约束 数据库设计_第12张图片

dml dql 约束 数据库设计_第13张图片

约束

非空约束:(某一列的值不能为null)

在创建表添加非空约束

CREATE TABLE stu(

id INT,

NAME VARCHAR(20) NOT NULL -- nama为非空

);

创建完表后:

Alter table 表名 modify name varchar(20)not null;

这样子也可以约束

快捷操作:右击表,改变表

dml dql 约束 数据库设计_第14张图片

删除非空约束

Alter table 表名 modify varchar(20);(就是修改表的字段就ok)

唯一约束:(某一列的值不能重复)

在创建表时

CREATE TABLE stu(

id INT,

NAME VARCHAR(20) UNIQUE -- nama为非空

);

唯一约束可以有null值,但是只能有一条记录为null

在创建表后

Alter table 表名 modify 列名 varchar20UNIQUE

删除唯一约束:

Alter table 表名 drop index 列名

dml dql 约束 数据库设计_第15张图片

主键约束

注意:

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)

);

自动增长只与上一个有关

删除和添加

dml dql 约束 数据库设计_第16张图片

外键约束:

1.创建表时,添加外键

*语法:

Create table 表名(

外键列  ----外键对应主表主键

Constraint 外键名称 foreign key(外键列名称) references 主表名称(主表列名称)

department为主表  employee为次表(外键值可以为null也就是说id可以为null

dml dql 约束 数据库设计_第17张图片

删除外键

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;

数据库设计

一对多(多对一)

dml dql 约束 数据库设计_第18张图片

在多的一方建立外键指向一的一方的主键

多对多:

dml dql 约束 数据库设计_第19张图片

多对多的关系需要借助中间表来实现中间表至少包含两个字段,这两个字段作为

第三张表的外键,分别指向两张表的主键

一对一:

dml dql 约束 数据库设计_第20张图片

一对一关系实现可以在任意一方添加唯一外键指向另一方的主键

你可能感兴趣的:(数据库)