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

 

 一、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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值