数据库通用语言DQL-MySQL及语法练习 建议码住,多看几遍!!!!!!!

本文主要是介绍数据库通用语言DQL-MySQL及语法练习 建议码住,多看几遍!!!!!!!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DQL(数据查询语言)

语法:

SELECT字段列表
FROM表名字段
WHERE条件列表
GROUP BY分组字段列表
HAVING分组后的条件列表
ORDER BY排序字段列表
LIMIT分页参数
基础查询

查询多个字段:
SELECT 字段1, 字段2, 字段3, ... FROM 表名;
SELECT * FROM 表名;

设置别名:
SELECT 字段1 [ AS 别名1 ], 字段2 [ AS 别名2 ], 字段3 [ AS 别名3 ], ... FROM 表名;
SELECT 字段1 [ 别名1 ], 字段2 [ 别名2 ], 字段3 [ 别名3 ], ... FROM 表名;

去除重复记录:
SELECT DISTINCT 字段列表 FROM 表名;

转义:
SELECT * FROM 表名 WHERE name LIKE '/_张三' ESCAPE '/'
/ 之后的_不作为通配符

条件查询

语法:
SELECT 字段列表 FROM 表名 WHERE 条件列表;

条件:

比较运算符功能
>大于
>=大于等于
<小于
<=小于等于
=等于
<> 或 !=不等于
BETWEEN … AND …在某个范围内(含最小、最大值)
IN(…)在in之后的列表中的值,多选一
LIKE 占位符模糊匹配(_匹配单个字符,%匹配任意个字符)
IS NULL是NULL
逻辑运算符功能
AND 或 &&并且(多个条件同时成立)
OR 或 ||或者(多个条件任意一个成立)
NOT 或 !非,不是

例子:

-- 年龄等于30
select * from employee where age = 30;
-- 年龄小于30
select * from employee where age < 30;
-- 小于等于
select * from employee where age <= 30;
-- 没有身份证
select * from employee where idcard is null or idcard = '';
-- 有身份证
select * from employee where idcard;
select * from employee where idcard is not null;
-- 不等于
select * from employee where age != 30;
-- 年龄在20到30之间
select * from employee where age between 20 and 30;
select * from employee where age >= 20 and age <= 30;
-- 下面语句不报错,但查不到任何信息
select * from employee where age between 30 and 20;
-- 性别为女且年龄小于30
select * from employee where age < 30 and gender = '女';
-- 年龄等于25或30或35
select * from employee where age = 25 or age = 30 or age = 35;
select * from employee where age in (25, 30, 35);
-- 姓名为两个字
select * from employee where name like '__';
-- 身份证最后为X
select * from employee where idcard like '%X';
聚合查询(聚合函数)

常见聚合函数:

函数功能
count统计数量
max最大值
min最小值
avg平均值
sum求和

语法:
SELECT 聚合函数(字段列表) FROM 表名;
例:
SELECT count(id) from employee where workaddress = "广东省";

分组查询

语法:
SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后的过滤条件 ];

where 和 having 的区别:

  • 执行时机不同:where是分组之前进行过滤,不满足where条件不参与分组;having是分组后对结果进行过滤。
  • 判断条件不同:where不能对聚合函数进行判断,而having可以。

例子:

-- 根据性别分组,统计男性和女性数量(只显示分组数量,不显示哪个是男哪个是女)
select count(*) from employee group by gender;
-- 根据性别分组,统计男性和女性数量
select gender, count(*) from employee group by gender;
-- 根据性别分组,统计男性和女性的平均年龄
select gender, avg(age) from employee group by gender;
-- 年龄小于45,并根据工作地址分组
select workaddress, count(*) from employee where age < 45 group by workaddress;
-- 年龄小于45,并根据工作地址分组,获取员工数量大于等于3的工作地址
select workaddress, count(*) address_count from employee where age < 45 group by workaddress having address_count >= 3;
注意事项
  • 执行顺序:where > 聚合函数 > having
  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
排序查询

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

排序方式:

  • ASC: 升序(默认)
  • DESC: 降序

例子:

-- 根据年龄升序排序
SELECT * FROM employee ORDER BY age ASC;
SELECT * FROM employee ORDER BY age;
-- 两字段排序,根据年龄升序排序,入职时间降序排序
SELECT * FROM employee ORDER BY age ASC, entrydate DESC;
注意事项

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

分页查询

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

例子:

-- 查询第一页数据,展示10条
SELECT * FROM employee LIMIT 0, 10;
-- 查询第二页
SELECT * FROM employee LIMIT 10, 10;
注意事项
  • 起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数
  • 分页查询是数据库的方言,不同数据库有不同实现,MySQL是LIMIT
  • 如果查询的是第一页数据,起始索引可以省略,直接简写 LIMIT 10
DQL执行顺序

FROM -> WHERE -> GROUP BY -> SELECT -> ORDER BY -> LIMIT

DQL语法练习

create table employee(id int comment'编号',workno varchar(10) comment'工号',name varchar(10) comment'姓名',gender char(1) comment'性别',age tinyint unsigned comment'年龄',idcard char(18) comment'身份证号',workaddress varchar(50) comment'工作地址',entrydate date comment'入职时间'
)comment'员工表';insert into employee(id, workno, name, gender, age, idcard, workaddress, entrydate)
values (1,'1','柳岩','女',20,'123456789012345678','北京','2000-01-01'),(2,'2','张无忌','男',18,'123456789012345670','北京','2005-09-01'),(3,'3','韦一笑','男',38,'123456789712345670','上海','2005-08-01'),(4,'4','赵敏','女',18,'123456757123845670','北京','2009-12-01'),(5,'5','小昭','女',16,'123456769012345678','上海','2007-07-01'),(6,'6','杨道','男',28,'12345678931234567X','北京','2006-01-01'),(7,'7','范瑶','男',40,'123456789212345670','北京','2005-05-01'),(8,'8','黛绮丝','女',38,'123456157123645670','天津','2015-05-01'),(9,'9','范凉凉','女',45,'123156789012345678','北京','2010-04-01'),(10,'10','陈友谅','男',53,'123456789012345670','上海','2011-01-01'),(11,'11','张士诚','男',55,'123567897123465670','江苏','2015-05-01'),(12,'12','常遇春','男',32,'123446757152345670','北京','2004-02-01'),(13,'13','张三丰','男',88,'123656789012345678','江苏','2020-11-01'),(14,'14','灭绝','女',65,'123456719012345670','西安','2019-05-01'),(15,'15','胡青牛','男',70,'12345674971234567X','西安','2018-04-01'),(16,'16','周芷若','女',18,null,'北京','2012-06-01');-- 查询指定字段
select name,workno,age from employee;
-- 查询所有字段并返回
select id, workno, name, gender, age, idcard, workaddress, entrydate from employee;
-- 上面的写法太麻烦了,我们这里使用通配符来搞定,但是可读性太差了
select * from employee;
-- 查询所用员工的工作地址,起别名
select employee.workaddress as '工作地址' from employee;
select employee.workaddress '工作地址' from employee;
-- 查询员工上班地址,并且去重
select distinct employee.workaddress '工作地址' from employee;-- 条件查询 一共有11个案例
-- 年龄等于88
select * from employee where age=88;
-- 年龄小于20
select *from employee where age<20;
--  年龄小于等于20
select * from employee where age <= 20;
-- 没有身份证号的员工
select * from employee where idcard is null;
-- 有身份证号的员工
select * from employee where idcard is not null;
-- 年龄不等于88的员工
select  * from  employee where age != 88;
select  * from  employee where age <> 88;
-- 年龄在15-20岁
select * from employee where age>= 15 && age <=20;
select * from employee where age>= 15 and age <=20;
select * from employee where age between 15 and 20;
-- 女生小于25
select * from employee where gender = '女' and age < 25;
-- 年龄等于18或者20或者40
select * from employee where age =18 or 20 or 40;
select * from employee where age in (18,20,40);
-- 查询姓名是两个字的员工
select * from employee where name like '__';
-- 身份证号最后一位是X的员工
select * from employee where idcard like '%X';-- 聚合函数
-- 统计员工数量
select count(*) from employee;
select count(idcard) from employee;-- 这里的null不参与聚合函数计算!!!
select count(id) from employee;
-- 统计平均年龄
select avg(age) from employee;
-- 最大年龄
select max(age) from employee;
-- 最小年龄
select min(age) from employee;
-- 西安地区员工的年龄之和
select sum(age)  from employee where workaddress = '西安';-- 分组查询
-- 根据性别分组 并统计数量
select gender , count(*) from employee group by gender;
-- 根据性别分组 并计算平均年龄
select employee.gender , avg(age) from employee group by gender;
-- 年龄小于45,根据工作地点分组,获取员工数量大于3的工作地址
select workaddress, count(*) from employee where age < 45 group by workaddress ;
select workaddress, count(*) from employee where age < 45 group by workaddress having count(*) >= 3;-- 排序查询
-- 根据年龄对公司的员工进行升序排序 降序
select * from employee order by age ASC;-- ASC可以省略
select * from employee order by age DESC;
-- 根据入职时间进行降序排序
select * from employee order by entrydate  DESC;
-- 根据年龄对公司员工进行升序排序 年龄相同 按照入职时间进行降序排序
select  * from employee order by age ASC ,entrydate DESC;-- 分页查询
-- 查询第一页员工数据,每页展示10条记录
select * from employee limit 0,10;
select * from employee limit 10;
-- 查询第二页员工数据,每页展示10条记录 ---->(页码-1)*页展示记录数
select * from employee limit 10,10;-- DQL语句练习
-- 年龄为20 21 22 23 的女性
select * from  employee where gender = '女' and age in(20,21,22,23);
--20-40岁 并且名字为3个字
select * from employee where gender = '男' and (age between 15 and 40) and name like '___';
-- 年龄小于60岁的 男性员工和女性员工的数量
select gender, count(*) from employee where age < 60 group by gender;
-- 查询满足条件员工的姓名和年龄,年龄小于等于35 对查询结果进行年龄升序排序  然后按照入职时间降序排序
select name , age from employee where age <=35 order by age , entrydate desc;
-- 查询性别为男 年龄在20-40的前五个员工 对查询结果进行年龄升序排序  然后按照入职时间降序排序
select * from employee where gender = '男' and age between 20 and 40 order by age , entrydate desc limit 5;

这篇关于数据库通用语言DQL-MySQL及语法练习 建议码住,多看几遍!!!!!!!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/505740

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE