DDL、DML、DQL、DCL具体实例与关系

avatar
作者
猴君
阅读量:0

 

 一、DDL、DCL、DML、DQL

        通过二维表的形式,更加清晰直观的学习、对比其关系。

DDL

DCL

DML

DQL

英文释义

Data Defination Language

数据库定义语言

Data Control Language

数据库控制语言

Data Manipulation Language 数据操作语言

Data Query Language

数据查询语言

作用

定义数据库对象的结构和属性,及存储过程

控制数据库的访问权限和安全性

对数据库中的数据进行操作

对数据进行查询操作

功能

创建数据库对象--create

修改数据库对象--insert

删除数据库对象(表、视图、索引)

--drop

授予权限

grain

撤销权限

revoke

插入数据

insert into

更新数据

update

删除数据

delete from

查询数据

select

分页查询、排序查询、分组查询、条件查询

select 列名 from 表名 where 限定条件;

应用场景

  1. 数据库设计阶段
  2. 系统升级或重构
  1. 数据库安全管理
  2. 多用户环境
  1. 日常数据处理
  2. 数据检索和分析

从数据库中选择数据

选择数据、过滤数据、排序数据、组合数据、计算数据

操作对象

据库对象的结构,如表、视图、索引等

对用户权限的管理

数据库中的实际数据

数据库中的实际数据

执行结果

永久性地改变数据库的结构

权限授予或撤销会立即生效,并影响用户对数据库的操作权限

临时性的,除非提交事务,否则数据更改可以回滚。

可进行随时调整,以表格形式返回,可通过工具进一步处理或显示

二、DDL语法与实践 

数据库操作

查询所有的数据库名称:

show database;

show database;

创建数据库

create database 数据库名称;

create database if not exists 数据库名称;

删除数据库

drop database 数据库名;

drop database if not exists 数据库名;

使用数据库

select database();——查看当前使用的数据库

use 数据库名;——使用数据库

表操作

查询表

show tables ;

desc 表名;

创建表

create table 表名(

字段名 数据类型,

....

);

修改表

alter table 表名 rename to 新表名;

alter table 表名 add 列名 数据类型;

alter table 表名 modify 列名 新数据类型;

alter table 表名 change 列名 新数据类型;

alter table 表名 drop 列名;

三、DML语法与实践

添加数据

1.给指定列添加数据

insert into 表名(列名1,列名2,...)values(值1,值2,...);

2.给全部列添加数据

insert into 表名 values(值1,值2,...);

3.给指定列添加数据

insert into 表名(列名1,列名2,...)values(值1,值2,...),(值1,值2,...),(值1,值2,...)... ;

insert into 表名 values(值1,值2,...),(值1,值2,...)...;

修改数据

update 表名 set 列名1=值1,列名2=值2,列名3=值3,...

注意:修改语句中如果不加条件,则将所有数据都修改。

删除数据

delete from 表名 [where 条件];

注意:删除语句中如果不加条件,则将所有数据都删除

 代码操作

可以按照模板,去创建表

--查询所有数据 select * from stu; --给指定列添加数据 INSERT INTO 表名(列名1,列名2,)VALUES(值1,值2,); INSERT into stu(id, name) VALUES(1,'张三'); --给所有的添加数据 INSERT into stu(id, name,sex,birthday,score,email,tel,status) VALUES(2,'李四','男','1999-11-11',88.88,'lisi@itcanst.cn','13888889990',1);  --列名的列表可以省略 INSERT into stu values(2,'李阳','男','1999-11-11',88.88,'lisi@itcanst.cn','13888889990',1);  --修改数据 update 表名 set、 列名1=值1,列名2=值2,..[where 条件] --将张三改为女 update stu set sex = '女' where name = '张三';  --将张三的生日改为1999-12-12 分数改为99.99 update stu set birthday = '1999-12-12', score = 99.99 where name = '张三';  --注意,若没有where,表示所有数据全部修改  --删除 DELETE from 表名 where delete from stu where name = '张三'; 

四、DQL语法与实践

查询语法

select 字段列表 from 表名列表

where 条件列表

group by 分组字段

having 分组后条件

order by 排序字段

limit 分页限定

1.查询多个字段

select 字段列表 from 表名;

select * from 表名; 查询所有表名

2.去除重复记录

select distinct 字段列表 from 表名;

3.起别名

AS:(AS也可以省略用空格代替)

条件查询

select 字段列表 from 表名 where 条件列表;

排序查询

select 字段列表 from 表名 order by 排序字段名1 [排序方式1],排序字段名2 [排序方式2]...;

排序方式:

ASC升序(默认)

DESC:降序

分组查询

聚合函数

select 聚合函数名(列名) from 表;

注意:null不参与聚合函数运算。

 语法

select 字段列表 from 表名 [where 分组前条件限定] group by 分组字段名 [having]

区分where与having的区别

where

having

执行

在分组前对数据进行过滤

在分组后对数据进行过滤

条件

后不可使用聚合函数

后可使用聚合函数

意义

要分组的条件要求

对分组后的条件要求

 

分页查询

select 字段列表 from 表名 limit 起始索引, 查询条目;

起始索引从零开始

起始索引 = (当前页码-1)* 每页显示的条数

tip是:

分页查询limit是MySQL方言

Oracle分页查询使用rownumber

SQL server分页查询使用top

五、代码实操

创建表、添加表数据、基础查询

-- 删除stu表 DROP TABLE IF 	EXISTS stu;-- 创建stu表 CREATE TABLE stu ( id INT, NAME VARCHAR ( 20 ), age INT, sex VARCHAR ( 5 ), address VARCHAR ( 100 ), math DOUBLE ( 5, 2 ), english DOUBLE ( 5, 2 ), hire_date date  );-- 添加数据 INSERT INTO stu ( id, NAME, age, sex, address, math, english, hire_date ) VALUES 	( 1, '马云', 55, '男', '杭州', 66, 78, '1995-09-01' ), 	( 2, '马画藤', 45, '女', '深圳', 66, 78, '1998-09-01' ), 	( 3, '马斯克', 55, '男', '香港', 66, 78, '1999-09-02' ), 	( 4, '柳白', 20, '女', '湖南', 66, 78, '1997-09-05' ), 	( 5, '柳青', 20, '男', '湖南', 66, 78, '1998-09-01' ), 	( 6, '刘德华', 57, '男', '香港', 66, 78, '1998-09-01' ), 	( 7, '张学友', 22, '女', '香港', 66, 78, '1998-09-01' ), 	( 8, '德玛西亚', 18, '男', '南京', 66, 78, '1994-09-02' ); SELECT 	*  FROM 	stu;-- 基础查询============================== SELECT NAME  -- 姓名 	, 	age -- 年龄 FROM 	stu; 	 	 -- 查询地址 SELECT address from stu; -- 去重 SELECT DISTINCT address from stu;  -- 查询姓名、数学成绩、英语成绩 select name,math as 数学成绩,english as 英语成绩 from stu; 

条件查询

SELECT * from stu; -- 条件查询===================== -- 1.查询年龄大于20岁的学员信息 select name,id,age,sex,hire_date,math from stu where age > 20;  -- 2.查询年龄 大于等于20岁 的学员信息 select * from stu where age >= 20;  -- 3.查询年龄 大于等于20岁 并且 小于等于 30岁 的学员信息 select * from stu where age >= 20 && age <=30; select * from stu where age >= 20 and age <=30; select * from stu where age between 20 and 30;  -- 4.查询入学日期在‘1988-09-01’到‘1999-09-01’之间的学员信息 select * from stu where hire_date between '1988-09-01' and '1999-09-01';  -- 5.查询年龄等于18岁的学员信息 select * from stu where age = 18; -- 6.查询年龄不等于18岁的学员信息 select * from stu where age != 18; select * from stu where age <>18;  -- 7.查询年龄=28 或 =20 或=22 的成员 select * from stu where age =18 or age = 20 or age = 22; select * from stu where age in (18,20,22);  -- 8.查询英语成绩为null的学员成绩 -- 注意:null值的比较不可以用null  is null;用is  is not -- select * from stu where english = null; select * from stu where english is null; select * from stu where english is not null;  -- LIKE 占位符的使用--模糊查询--- -- 1.姓马的学员 select * from stu where name like '马%'; -- 2.查询第二个字是画的 select * from stu where name like '_画%'; -- 3.包含德的学员信息 select * from stu where name like '%德%'; 

分组查询

-- 分组查询========================  -- 聚合操作--select 聚合函数名(列名) from 表;——纵向计算 -- count--统计数量    1. 主键  2.*  -- 1. 统计班级一共有多少个学生 select count(name) from stu; -- count 统计的列名不能为null select count(math) from stu;  -- 2. 查询数学成绩的最高分 select max(math) from stu;  -- 3. 查询数学成绩的最低分 select min(math) from stu;  -- 4. 查询数学成绩的总分 select sum(math) from stu;  -- 5. 查询数学成绩的平均分 select avg(math) from stu;  -- 6. 查询英语成绩的最低分 select min(english) from stu; -- 如果其中有null,聚合函数中null不参与运算  /*-- 分组查询======================= -- select 字段列表 from 表名 [where 分组之前的条件限定] group by 分组字段 [ having 分组后条件过滤]... */ select * from stu; -- 1.查询男同学和女同学各自的数学平均分 select sex,avg(math) from stu group by sex;  -- 2.查询男同学和女同学各自的数学平均分 以及各自的人数 select sex,avg(math),count(*) from stu group by sex;  -- 3.查询男同学和女同学各自的数学平均分 以及各自的人数, 要求:分数低于70分的不参加分组 select sex,avg(math),count(*) from stu where math>=70 group by sex;  -- 4.查询男同学和女同学各自的数学平均分 以及各自的人数要求:分数低于70分的不参加分组, 分组后人数大于2 select sex,avg(math),count(*) from stu where math>=70 group by sex having count(*)>2;  select sex,avg(math),count(*) from stu where math>=70 group by sex having count(name)>2; 

分页查询

/* 分页查询: 		select 字段列表 from 表名 limit 起始索引,查询条目数*起始索引:从0开始 */ SELECT * FROM sru; -- 1. 从0显示3条数据,查询3条数据 select * from stu limit 0, 3;  -- 2. 每页显示3条数据,查询第1页数据 select * from stu limit 0, 3; -- 3. 每页显示3条数据,查询第2页数据 select * from stu limit 3, 3; -- 4. 每页显示3条数据,查询第3页数据 select * from stu limit 6, 3;  -- 起始索引 = (当前页码-1)*3

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!