您好,欢迎来到微智科技网。
搜索
您的当前位置:首页MySQL - 数据库 - DDL,DML,DCL,DQL

MySQL - 数据库 - DDL,DML,DCL,DQL

来源:微智科技网

SQL

SQL通用语法:

SQL分类:

DDL:

数据库操作

查询:

SHOW DATABASES;

创建:

CREATE DATABASE[IF NOT EXISTS] 数据库名 [DEFAULT CHARSET字符集] [COLLATE 排序规则];

删除:

DROP DATABASE [IF EXISTS] 数据库名;

使用:

USE 数据库名;
DDL - 表操作 - 查询:

查询当前数据库所有表

SHOW TABLES;

查询表结构:

DESC 表名

查询指定表的建表语句:

SHOW CREATE TABLE 表名;

DDL - 表操作 - 创建:

DDL - 表操作 - 数据类型

create table emp(
    -> id int comment '编号',
    -> workno varchar(10) comment '员工工号',
    -> name varchar(10) comment '姓名',
    -> gender char(1) comment '性别',
    -> age tinyint unsigned comment '年龄',
    -> idcard char(18) comment '身份证号',
    -> entrydate date comment '入职时间'
    -> ) comment '员工表';

DDL - 表操作 - 修改

添加字段:

ALTER TABLE 表名 ADD 字段名 类型(长度)[COMMENT 注释][约束];

修改数据类型:

ALTER TABLE MODIFY 字段名 新数据类型(长度)

修改字段名和字段类型

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度)[COMMENT 注释]

删除字段:

ALTER 表名 DROP 字段名;

修改表名:

ALTER TABLE 表名 RENAME TO 新表名;
DDL - 表操作 - 删除

删除表

DROP TABLE [IF EXISTS] 表名

删除指定表,并重新创建该表

TRUNCATE TABLE 表名;

相当于清空

DML:

DML - 添加数据

给指定字段添加数据

INSERT INTO 表名(字段1,字段2)VALUES(值1,值2);

给全部字段添加数据

INSERT INTO 表名 VALUES(值1,值2);

批量添加数据

INSERT INTO 表名(字段1,字段2) VALUES (值1,值2),(值1,值2),(值1,值2);
INSERT INTO 表名 VALUES(值1,值2),(值1,值2);

注:

  • 插入数据时,指定的字段顺序需要与值的顺序是一一对应的
  • 字符串和日期数据应该在包含在引号中
  • 插入的数据应该在范围内
DML - 修改数据
UPDATE 表名 SET 字段名1 = 值1,字段名2 = 值2,[WHERE ...]

注:修改语句的条件可以有,也可以没有,如果么有条件,则会修改整张表的所有数据。

DML - 删除数据
DELETE FROM 表名 [WHERE 条件];

DQL:

语法:

DQL - 基本查询:

查询多个字段

SELECT 字段1,字段2,字段3 ... FROM 表名;

SELECT * FROM 表名

设置别名

SELECT 字段1 [AS 别名1],字段2 [AS 别名2]... FROM 表名;

去除重复记录

SELECT DISTINCT 字段列表 FROM 表名;

DQL - 条件查询:

语法:

SELECT 字段列表 FROM 表名 WHERE 条件列表;


-- --------------------------------------------------- > 查询需求 <----------------------------------------------

-- 基本查询
-- 1. 查询指定字段 name workno age 返回
select name,workno,age from emp;

-- 2. 查询所有字段返回
select * from emp;

-- 3. 查询所有员工的工作地址,起别名
select workaddress as '工作地址' from emp;

-- 4. 查询公司员工的上班地址(不重复)
select distinct  workaddress '工作地址' from emp;

-- 条件查询
-- A. 查询年龄等于 88 的员工
select * from emp where age = 88;

-- B. 查询年龄小于 20 的员工信息
select * from emp where age <= 20;

-- D. 查询没有身份证号的员工信息
select * from emp where idcard is null;

-- E. 查询有身份证号的员工信息
select * from emp where idcard is not null;

-- F. 查询年龄不等于 88 的员工信息
select * from emp where age <> 88;

-- G. 查询年龄在15岁(包含) 到 20岁(包含)之间的员工信息
select * from emp where age >=15 && age<=20;
select * from emp where age >=15 AND age<=20;
select * from emp where age between 15 and 20; -- between 跟最小值

-- H. 查询性别为 女 且年龄小于 25岁的员工信息
select  * from emp where gender = '女' and age <25;

-- I. 查询年龄等于18 或 20 或 40 的员工信息
select * from emp where age = 18 || age = 20 || age = 40 ;
select * from emp where  age in(18,20,40);

-- J. 查询姓名为两个字的员工信息 _ %
select * from emp where name like '__';

-- K. 查询身份证号最后一位是X的员工信息
select * from emp where idcard  like '%X';

聚合函数:

分组查询:

排序查询:

分页查询:

DQL -聚合函数:

常见聚合函数

语法:

SELECT 聚合函数(字段列表) FROM 表名;

注:null值不参与所有聚合函数的运算

-- ------------------------------------> 聚合函数--
-- A. 统计该企业员工数量
select count(*) from emp;
select count(idcard) from emp;

-- B. 统计该企业员工的平均年龄
select avg(age) from emp;

-- C. 统计该企业员工的最大年龄
select max(age) from emp;

-- D. 统计该企业员工的最小年龄
select min(age) from emp;

-- E. 统计西安地区员工的年龄之和
select sum(age) from emp where workaddress = '西安';
DQL -分组函数:
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];

where 和 having区别

  • 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
  • 判断条件不同:where不能对聚合函数进行判断,而having可以
-- 分组查询
-- A. 根据性别分组 , 统计男性员工 和 女性员工的数量
select gender,count(*) from emp group by gender ;
-- B. 根据性别分组 , 统计男性员工 和 女性员工的平均年龄
select gender,avg(age) from emp group by gender;
-- C. 查询年龄小于45的员工 , 并根据工作地址分组 , 获取员工数量大于等于3的工作地址
select workaddress,count(*) address_count from emp where age <45 group by  workaddress having address_count >= 3;
-- D. 统计各个工作地址上班的男性及女性员工的数量
select workaddress,gender,count(*) '数量' from emp group by gender,  workaddress;
  • 执行顺序:where > 聚合函数 > having
  • 分组之后,查询字段一般为聚合函数和分组字段,查询其他字段无任何意义。
DQL -排序查询:

语法:

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2;

排序方式:

  • ASC :升序
  • DESC:降序
-- 排序查询
-- A.根据年龄对公司的员工进行升序排序
select * from emp order by age asc;
select * from emp order by age desc ;
-- B. 根据入职时间, 对员工进行降序排序
select * from emp order by entrydate desc;
-- C. 根据年龄对公司的员工进行升序排序 , 年龄相同 , 再按照入职时间进行降序排序
select * from  emp  order by  age asc, entrydate desc;

注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。

DQL -分页查询:

语法:

SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;

-- 分页查询
-- A. 查询第1页员工数据, 每页展示10条记录
select * from emp limit 10;
-- B. 查询第2页员工数据, 每页展示10条记录 --------> (页码-1)*页展示记录数
select * from emp limit 10,10;
练习:
-- 2.6.8 案例
-- 1). 查询年龄为20,21,22,23岁的员工信息。
select * from emp where gender = '女' and age in(20,21,22,23);


-- 2). 查询性别为 男 ,并且年龄在 20-40 岁(含)以内的姓名为三个字的员工。
select * from emp where gender = '男' and (age between 20 and 40) and name like '___';


-- 3). 统计员工表中, 年龄小于60岁的 , 男性员工和女性员工的人数。
select gender,count(*) from emp where age < 60 group by gender;


-- 4). 查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。
select name '姓名',age '年龄' from emp where age <= 35 order by age asc,entrydate desc ;


-- 5). 查询性别为男,且年龄在20-40 岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。
select * from emp where gender = '男' and (age between 20 and 40)  order by age asc,entrydate desc limit 5;
DQL -执行顺序:

DCL:

DCL - 管理用户:

1) 查询用户
select * from mysql.user; 1
2). 创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码'; 1
3). 修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码' ; 1
4). 删除用户
DROP USER '用户名'@'主机名' ;

注意事项:

• 在MySQL中需要通过用户名@主机名的方式,来唯一标识一个用户。

DCL- 权限控制

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务