mysql dql dml_mysql中DML DDL DCL DQL

DML 英文全称(Data Manipulation Language)数据操作语言数据库记录(数据)增、删、改,对表记录进行更新(增、删、改)

DQL 英文全称(Data Query Language)数据查询语言数据库记录(数据)查、用来查询数据,对表记录的查询

DCL 英文全称(Data Control Language)数据控制语言数据库用户用来定义访问的权限和安全级别,对用户的创建,及授权

DDL

简单来说,就是对数据库内部的对象进行创建、删除、修改的操作语言。它和DML 语言的最大区别是DML 只是对表内部数据的操作,而不涉及到表的定义、结构的修改,更不会涉及到其他对象。DDL 语句更多的被数据库管理员(DBA)所使用,DDL主要负责数据库的创/改/查/删以及表格的创/改/查/删,一般的开发人员很少使用。

1.创建数据库:1create database [数据库名] character set [字符编码];

2.查看数据库:1show databases;

3.查看数据库创建明细:1show create database [数据库名字];

4.修改数据库编码:1alter database [数据库名] character set [字符编码];

5.删除数据库:1drop database [数据库名];

6.使用数据库:1use [数据库名];

7.创建表格:1create table employee(id int,name varchar(20),sex char(2),birthday date,job varchar(50),salary double(7,2));

8.查看表的结构:1desc [表名];

9.在表中插入列:1alter table employee add address varchar(100);

10.修改列字符的属性:1ALTER TABLE employee MODIFY job VARCHAR(20);

注:即将原来varchar(50)改为20;

11.删除某列:1ALTER TABLE employee DROP address;

12.更改表名:1RENAME TABLE employee to user;

13.查看表的创建细节:1SHOW CREATE TABLE user;

14.修改字段名:1ALTER TABLE user CHANGE name username VARCHAR(10);

15.删除表:1DROP TABLE user;

DML

数据操纵语言(Data Manipulation Language, DML)是SQL语言中,负责对数据库对象运行数据访问工作的指令集,以INSERT、UPDATE、DELETE三种指令为核心,分别代表插入、更新与删除,是开发以数据为中心的应用程序必定会使用到的指令。DML是对数据库表中的数据增删改的操作.

1.插入数据:1insert into emp(id,name,sex,birthday,salary) values (1,'dupudupu','男','2011-09-08',1000);

也可以这样写,省略前面括号里面的内容1insert into emp values (2,'Paul','男','2018-09-22',800);

2.批量插入:1

2

3

4

5insert into emp values

(3,'Lili','女','2017-06-25',3000),

(4,'Hali','男','2014-09-08',1000),

(5,'Soso','女','1997-07-30',10000),

(6,'Mama','女','1789-03-25',8888);

3.修改数据:当我在Mysql Workbench中使用下面的语句时,出现了错误1update emp set name='Dupu' where id = 1;

首先语句是没有错的,经查询错误原因:是在safe mode下,要强制安全点,update只能跟where1Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.解决方案 : 执行命令—->SET SQL_SAFE_UPDATES = 0;

4.删除数据1delete from emp where id=6;

DCL

DCL(Data Control Language)是数据库控制语言。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL。

1.创建用户1

2

3CREATE USER [email protected] IDENTIFIED BY '密码';

CREATE USER [email protected] IDENTIFIED BY ‘123’;

CREATE USER [email protected]%’ IDENTIFIED BY ‘123’;

2.用户授权1

2

3GRANT 权限1, … , 权限n ON 数据库.* TO [email protected]

GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON mydb1.* TO [email protected];

GRANT ALL ON mydb1.* TO [email protected]%’;

3.撤销授权1

2REVOKE权限1, … , 权限n ON 数据库.* FORM 用户名

REVOKE CREATE,ALTER,DROP ON mydb1.* FROM [email protected];

4.查看权限1

2SHOW GRANTS FOR 用户名

5.删除用户1

2DROP USER 用户名

6.修改用户密码1

2

3

4

5Use mysql;

UPDATE USER SET PASSWORD=PASSWORD(‘密码’) WHERE User=’用户名’;

FLUSH PRIVILEGES;

UPDATE USER SET PASSWORD=PASSWORD('1234') WHERE User='user2';

FLUSH PRIVILEGES;

DQL

数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端,查询返回的结果集是一张虚拟表。

1.简单查询1

2

3

4

5select * from 表名;

select 列1,列2,... from 表名;#查询指定字段

select id as 序号, name as 名字, gender as 性别 from students;#使用 as 给字段起别名

select s.id,s.name,s.gender from students as s;#可以通过 as 给表起别名

select distinct 列1,... from 表名; #消除重复行

2.条件查询1select * from 表名 where 条件;

where后面支持多种运算符,进行条件的处理比较运算符

逻辑运算符

模糊查询

范围查询

空判断

3.排序查询**1SELECT * FROM 表名 ORDER BY 排序字段 ASC|DESC;

4.聚合查询1

2

3SELECT SUM(price) FROM product WHERE category_id = 'c001';

SELECT AVG(price) FROM product WHERE category_id = 'c002';

SELECT MAX(price),MIN(price) FROM product;

count:统计指定列不为NULL的记录行数;sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;

max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;

min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;

avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

5.分组查询1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17-- 案例1,:查询每个工种的最高工资 【每个】

SELECT MAX(salary),job_id FROM employees GROUP BY job_id;

-- 案例2:查询每个位置上的部门个数 【每个】

SELECT COUNT(*),location_id FROM departments GROUP BY location_id;

-- 案例3:查询邮箱中包含a字符的,每个部门的平均工资 【每个】

SELECT AVG(salary),department_id FROM employees WHERE email LIKE '%a%' GROUP BY department_id;

-- 案例4:查询有奖金的每个领导手下员工的最高工资 【添加分组前的筛选】

SELECT MAX(salary), manager_id FROM employees WHERE commission_pct IS NOT NULL GROUP BY manager_id;

-- 案例5:查询哪个部门的员工数>2 【添加分组后的筛选】

-- ①查询每个部门的员工个数

SELECT COUNT(*),department_id FROM employees GROUP BY department_id

-- ②根据①的结果进行筛选,查询哪个部门的员工个数>2

SELECT COUNT(*),department_id FROM employees GROUP BY department_id HAVING COUNT(*)>2;

6.外键约束

1、级联(cascade)方式

2、置空(set null)方式

3、禁止(no action / restrict)方式

7.多表查询

交叉连接:不适用任何匹配条件。生成笛卡尔积1select * from emp,department;

内连接:只连接匹配的行1select emp.id,emp.name,emp.age,emp.sex,department.name from emp inner join department on emp.dep_id=department.id;

外链接之左连接:优先显示左表全部记录1select emp.id,emp.name,department.name as depart_name from emp left join department on emp.dep_id=department.id;

外链接之右链接:优先显示右表全部记录1select emp.id,emp.name,department.name as depart_name from emp right join department on emp.dep_id=department.id;

全外连接:显示左右两个表全部记录1

2

3

4select * from employee left join department on employee.dep_id = department.id

union

select * from employee right join department on employee.dep_id = department.id

;

案例来自博客园

8.子查询

1、带IN关键字的子查询1

2

3

4

5

6

7

8

9

10

11

12

13

14#查询平均年龄在25岁以上的部门名

select id,name from department

where id in

(select dep_id from employee group by dep_id having avg(age) > 25);

#查看技术部员工姓名

select name from employee

where dep_id in

(select id from department where name='技术');

#查看不足1人的部门名

select name from department

where id in

(select dep_id from employee group by dep_id having count(id) <=1);

2、带比较运算符的子查询1

2

3

4

5

6

7

8

9

10#比较运算符:=、!=、>、>=、

#查询大于所有人平均年龄的员工名与年龄

select name,age from emp where age > (select avg(age) from emp);

#查询大于部门内平均年龄的员工名、年龄

select t1.name,t1.age from emp t1

inner join

(select dep_id,avg(age) avg_age from emp group by dep_id) t2

on t1.dep_id = t2.dep_id

where t1.age > t2.avg_age;

3、带EXISTS关键字的子查询1

2

3

4

5EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录。

而是返回一个真假值。True或False

当返回True时,外层查询语句将进行查询;当返回值为False时,外层查询语句不进行查询

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值