探索MySQL数据查询语言的无限魅力:精准检索,驾驭数据海洋的钥匙

news2024/11/15 22:41:39
  •  作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注
  •  座右铭:   云端筑梦,数据为翼,探索无限可能,引领云计算新纪元
  •  个人主页:团儿.-CSDN博客

目录

前言:

一.DQL 介绍

二.select 语句的应用

1.select单独使用的情况***

2.select 通用语法(单表) *****

3.学习环境的说明

如何熟悉数据库业务?

4.SELECT 配合 FROM 子句使用

(1) 查询表中所有的信息(生产中几乎是没有这种需求的)

(2) 查询表中 name和population的值

5.SELECT 配合  WHERE 子句使用

-- where等值条件查询  *****

-- where 配合比较判断查询(> < >= <=)  *****

-- where 配合 逻辑连接符(and  or)

-- where 配合 like 子句 模糊查询 *****

-- where 配合 in 语句

6.GROUP BY

小扩展(拼接,自定义分隔符)

7.SELECT 配合 ORDER BY 子句

8.SELECT 配合 LIMIT  子句

9. union 和 union all

面试题: union 和 union all 的区别 ?

三.多表连接查询(内连接)

分类:

1.多表连接基本语法

2.多表连接例子

(5).别名应用

表别名 :

列别名:

(6).语句嵌套


前言:

在信息爆炸的时代,数据已成为企业运营决策和个人生活分析不可或缺的基石。而数据库,作为数据存储与管理的核心工具,其重要性不言而喻。在众多数据库管理系统中,MySQL以其开源、稳定、高效的特点,赢得了广泛的用户群体,从个人开发者到大型企业,无一不将其视为数据存储与检索的首选方案。

在MySQL的广阔世界中,DQL(Data Query Language)占据了举足轻重的地位。作为SQL(Structured Query Language)的精髓之一,DQL专注于数据检索与查询,是用户与数据库之间沟通的桥梁。通过DQL,用户可以灵活地构造查询语句,从浩如烟海的数据中提取出有价值的信息,无论是简单的数据浏览,还是复杂的统计分析,DQL都能提供强有力的支持。

本文将深入探索MySQL数据库中的DQL,从基础语法讲起,逐步揭开其高级特性与实战技巧的神秘面纱。

我们将一起学习如何使用SELECT语句从表中检索数据,掌握WHERE子句在过滤结果中的应用,理解ORDER BY如何帮助我们对数据进行排序,以及如何通过聚合函数和GROUP BY子句实现数据的分组统计。
此外,本文还将探讨DQL在实际应用中的案例,展示如何结合业务需求,构建高效、准确的查询语句。


一.DQL 介绍

select           show

DQL是Data Query Language缩写,数据查询语言,用于检索数据库中的数据。DQL是作为查询语句,不会对数据库的数据进行修改。


二.select 语句的应用

1.select单独使用的情况***

mysql> select @@basedir; #mysql安装目录

mysql> select @@port; #mysql端口号

mysql> select @@innodb_flush_log_at_trx_commit; #日志刷新策略

mysql> show variables like 'innodb%'; #模糊查看innodb开头的配置

mysql> select database(); #查看当前库名

mysql> select now(); #查看当前系统时间

mysql> select @@server_id; #查看本实例id号,群集中不能重复


2.select 通用语法(单表) *****

select  显示的列名(多列逗号分开)   

from  表名(多个表逗号分开)   

where 过滤条件的列

group by  分组的列

having   分组后的过滤聚合函数

order by 排序的列

limit  显示前几行


3.学习环境的说明

world数据库

city             城市表

country          国家表  

countrylanguage  国家的语言

ID       :   城市序号(1-...)

name     : 城市名字

countrycode :   国家代码,例如:CHN,USA

district    :   区域: 中国 省  美国 洲

population  :   人口数


如何熟悉数据库业务?

快速和研发人员打好关系

找到领导要ER图

DESC ,show create table

select * from city limit 5;


4.SELECT 配合 FROM 子句使用

-- select  列,列,列  from  表

--- 例子:

(1) 查询表中所有的信息(生产中几乎是没有这种需求的)

use world ;

select id,name,countrycode,district,population from city;

或者:

select * from city;

(2) 查询表中 name和population的值

select name,population from city;

5.SELECT 配合  WHERE 子句使用

-- select  列,列,列  from  表  where 过滤条件

-- where等值条件查询  *****

例子:

 查询中国所有的城市名和人口数

select name,population from city where countrycode='CHN';


-- where 配合比较判断查询(> < >= <=)  *****

例子:

 世界上小于100人的城市名和人口数

select name,population from city where population<100;


-- where 配合 逻辑连接符(and  or)

例子:

(1) 查询中国人口数量大于800w的城市名和人口

select name,population from city where countrycode='CHN' and population>8000000;

(2) 查询中国或美国的城市名和人口数

select name,population from city where countrycode='CHN' or countrycode='USA';

(3) 查询人口数量在500w到600w之间的城市名和人口数

select name,population from city where population>=5000000 and population<=6000000;

或者:

select name,population from city where population between 5000000 and 6000000;


-- where 配合 like 子句 模糊查询 *****

例子:

 查询一下contrycode中带有CH开头,城市信息

select name,countrycode from city where countrycode like 'CH%';

注意:不要出现类似于 %CH%,前后都有百分号的语句,因为不走索引,性能极差

如果业务中有大量需求,我们用"Elasticsearch"来替代


-- where 配合 in 语句

例子:

 查询中国或美国的城市信息.

select name,population from city where countrycode in ('CHN','USA');

或

select name,population from city where countrycode='CHN' or countrycode='USA';

6.GROUP BY

将某列中有共同条件的数据行,分成一组,然后在进行聚合函数(sum,avg,count,max,min)操作.

例子:

(1) 统计每个国家,城市的个数

select countrycode,count(name) from city group by countrycode;

(2) 统计每个 国家 省 的个数(distinct 去除重复)

select countrycode,count(distinct district) from city group by countrycode;

(3) 统计中国 每个省城市的名字列表GROUP_CONCAT() #列转行

select district,group_concat(name) from city where countrycode='CHN' group by district;

注:若不加GROUP_CONCAT(),则会报错,听为实一对多的形式,不可显示

小扩展(拼接,自定义分隔符)

anhui : hefei,huaian ....

SELECT CONCAT(district,":" ,GROUP_CONCAT(NAME))     FROM  city

WHERE countrycode='CHN'

GROUP BY district ;


7.SELECT 配合 ORDER BY 子句

例子:

统计所有国家的总人口数量,

将总人口数大于5000w的过滤出来,

并且按照从大到小顺序排列

select countrycode,sum(population) from city group by countrycode having sum(population)>50000000  

order by sum(population) desc;

注:默认为升序,asc ; 降序为desc


8.SELECT 配合 LIMIT  子句

例子:

统计所有国家的总人口数量,

将总人口数大于5000w的过滤出来,

并且按照从大到小顺序排列,只显示前三名

select countrycode,sum(population) from city group by countrycode having sum(population)>50000000  

order by sum(population) desc limit 3;

LIMIT M,N     :跳过M行,显示一共N行

LIMIT Y OFFSET X: 跳过X行,显示一共Y行


9. union 和 union all

作用: 多个结果集合并查询的功能

需求: 查询中或者美国的城市信息

SELECT * FROM city WHERE countrycode='CHN' OR countrycode='USA';

改写为:

SELECT * FROM city WHERE countrycode='CHN'

UNION ALL

SELECT * FROM city WHERE countrycode='USA';

面试题: union 和 union all 的区别 ?

union all   不做去重复

union 会做去重操作


三.多表连接查询(内连接)

分类:

inner join 内连接,企业普遍使用,inner可以省略

left  join  左外连接

right join  右外连接

full  join  完整外连接

cross join  求笛卡尔积


1.多表连接基本语法

student :学生表

===============

sno:    学号

sname:学生姓名

sage: 学生年龄

ssex: 学生性别

teacher :教师表

================

tno:     教师编号

tname:教师名字

course :课程表

===============

cno:  课程编号

cname:课程名字

tno:  教师编号

sc  :成绩表

==============

sno:  学号

cno:  课程编号

score:成绩

素材:

create database school default charset utf8mb4 collate utf8mb4_bin;

use school



create table student (

sno int not null primary key auto_increment comment "学号",

sname varchar(20) not null comment "学生姓名",

sage int not null comment "学生年龄",

ssex char(4) not null comment "学生性别");



create table teacher (

tno int not null,

tname varchar(20)

);



create table course (

cno int not null,

cname varchar(20) not null,

tno int not null

);



create table sc (

sno int not null,

cno int not null,

score int not null

);




INSERT INTO student(sno,sname,sage,ssex)

VALUES (1,'zhang3',18,'m');



INSERT INTO student(sno,sname,sage,ssex)

VALUES

(2,'zhang4',18,'m'),

(3,'li4',18,'m'),

(4,'wang5',19,'f');



INSERT INTO student

VALUES

(5,'zh4',18,'m'),

(6,'zhao4',18,'m'),

(7,'ma6',19,'f');



INSERT INTO student(sname,sage,ssex)

VALUES

('maliu',20,'m'),

('zhuqi',20,'f'),

('sunjiu',25,'m');



INSERT INTO teacher(tno,tname) VALUES

(101,'laowu'),

(102,'laoxia'),

(103,'laoli');



DESC course;

INSERT INTO course(cno,cname,tno)

VALUES

(1001,'linux',101),

(1002,'python',102),

(1003,'mysql',103);



DESC sc;

INSERT INTO sc(sno,cno,score)

VALUES

(1,1001,80),

(1,1002,59),

(2,1002,90),

(2,1003,100),

(3,1001,99),

(3,1003,40),

(4,1001,79),

(4,1002,61),

(4,1003,99),

(5,1003,40),

(6,1001,89),

(6,1003,77),

(7,1001,67),

(7,1003,82),

(8,1001,70),

(9,1003,80),

(10,1003,96);

SELECT * FROM student;

 

SELECT * FROM teacher;

 

SELECT * FROM course;

 

SELECT * FROM sc;


2.多表连接例子

(1). 统计zhang3,学习了几门课

select student.sname,count(sc.score) from student inner join sc

on student.sno=sc.sno

where student.sname='zhang3';


(2).查询laoli老师教的学生名和个数.

select teacher.tname,group_concat(student.sname),count(student.sname)

from teacher join course  on teacher.tno=course.tno

join sc on course.cno=sc.cno

join student on sc.sno=student.sno

where teacher.tname='laoli';


(3).每位老师所教课程的平均分,并按平均分降序排列

select teacher.tname,avg(sc.score)

from teacher join course  on teacher.tno=course.tno

join sc on course.cno=sc.cno

group by teacher.tname

order by avg(sc.score) desc;


(4).查询所有老师所教学生不及格的信息(扩展)

第一种方法:

select teacher.tname,student.sname,sc.score from  

teacher join course on teacher.tno=course.tno  

join sc on course.cno=sc.cno  

join student on sc.sno=student.sno  

where sc.score<60;

第二种方法:

SELECT teacher.tname,GROUP_CONCAT(CONCAT(student.sname,":",sc.score))

FROM teacher

JOIN course

ON teacher.tno=course.tno

JOIN sc

ON course.cno=sc.cno

JOIN student

ON sc.sno=student.sno

WHERE sc.score<60

GROUP BY teacher.tname;


(5).别名应用

表别名 :
SELECT t.tname,GROUP_CONCAT(CONCAT(st.sname,":",sc.score))

FROM teacher as t

JOIN course as c

ON t.tno=c.tno

JOIN sc

ON c.cno=sc.cno

JOIN student as st

ON sc.sno=st.sno

WHERE sc.score<60

GROUP BY t.tname;

表别名是全局调用的.

列别名:
SELECT t.tname as 讲师名 ,GROUP_CONCAT(CONCAT(st.sname,":",sc.score))  as 不及格的

FROM teacher as t

JOIN course as c

ON t.tno=c.tno

JOIN sc

ON c.cno=sc.cno

JOIN student as st

ON sc.sno=st.sno

WHERE sc.score<60

GROUP BY t.tno

列别名可以被  having 和 order by 调用


(6).语句嵌套

create database hehe default charset utf8mb4 collate utf8mb4_bin;

use hehe

create table t1 (id int,name varchar(20));

insert into t1 values (1,'zhangsan'),(2,'lisi'),(3,'zhangsan'),(4,'wangwu'),(5,"zhangsan"),(6,'lisi');

要求:查找重复两次及以上的人员,按id号从大到小排列。

select t1.name,id from t1

join (select name from t1 group by name having count(name)>1) as  t2

on t1.name=t2.name order by id desc;


期待您的关注~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2117548.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

可视掏耳勺真的有作用吗?测评热门可视掏耳勺

随着现代人对个护健康的日益关注&#xff0c;可视掏耳勺这掏耳神器逐渐风靡市场&#xff0c;但同时也伴随着部分质疑的声音&#xff0c;甚至被贴上“智商税”的标签。因为有不少消费者使用时出现画质低清、材质不舒服等现象&#xff0c;那么&#xff0c;可视掏耳勺真的好用吗&a…

上海亚商投顾:沪指再创阶段新低 全市场下跌个股超4400只

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指9月6日冲高回落&#xff0c;午后续创调整新低&#xff0c;创业板指跌1.7%。券商、保险等金融股逆势走强&a…

快速入门游戏领域,开发游戏需要哪些技术?

在这个充满创意和技术的时代&#xff0c;游戏行业成为众多创新人才追求梦想的热土。对于准备踏入这个充满挑战与机遇的领域的新人来说&#xff0c;了解游戏开发流程是至关重要的。 游戏市场蓬勃发展&#xff0c;游戏行业未来行情可观&#xff0c;在这个充满创意和技术的时代&a…

Swiper轮播图框架【前端 24】

Swiper轮播图框架 在如今的网页设计中&#xff0c;轮播图已成为一种不可或缺的元素&#xff0c;它能够以动态的方式展示图片、视频或文本信息&#xff0c;有效吸引用户的注意力并提升页面的互动性。在众多轮播图实现框架中&#xff0c;Swiper以其高度的可定制性、流畅的滑动效果…

浏览器百科:网页存储篇-如何在Chrome中打开IndexedDB窗格(十一)

1.引言 在现代Web开发中&#xff0c;网页存储技术扮演着至关重要的角色。IndexedDB作为一种低级API&#xff0c;允许客户端存储大量结构化数据&#xff0c;并提供高性能的搜索能力。在上一篇文章中&#xff0c;我们深入探讨了IndexedDB的基础知识及其应用场景。为了更有效地调…

回收玻璃减薄中的氢氟酸

回收玻璃减薄中的氢氟酸是一个重要的环保和资源再利用环节。在玻璃减薄过程中&#xff0c;氢氟酸作为主要的化学蚀刻剂&#xff0c;与玻璃基板表面的二氧化硅等成分发生反应&#xff0c;实现玻璃的减薄。然而&#xff0c;随着反应的进行&#xff0c;氢氟酸的浓度会逐渐降低&…

爆改YOLOv8|利用BiFPN双向特征金字塔改进yolov8

1&#xff0c;本文介绍 BiFPN&#xff08;Bidirectional Feature Pyramid Network&#xff09;是一种增强特征金字塔网络&#xff08;FPN&#xff09;的方法&#xff0c;旨在改善多尺度特征融合。BiFPN的主要创新点包括&#xff1a; 双向特征融合&#xff1a;与传统FPN仅在自下…

AI智能工牌:告别手动录入,1小时上门服务报告,3分钟生成

在当今快速发展的商业环境中&#xff0c;提高工作效率和客户满意度成为了企业追求的核心目标之一。传统的手动录入方式不仅耗时耗力&#xff0c;而且容易出错&#xff0c;特别是在上门服务行业&#xff0c;如何快速准确地完成服务报告成为了一个亟待解决的问题。AI智能工牌的出…

从零到精通:亚马逊和Target自养号测评的下单支付与fang关联技巧

在跨境电商的广阔领域里&#xff0c;自养号测评策略已崛起为众多卖家实现低成本、高效市场推广的一把利器。然而&#xff0c;要驾驭好这一策略&#xff0c;确保其成功实施&#xff0c;关键在于精准把握并满足一系列核心条件。接下来&#xff0c;我们将深入剖析这些条件&#xf…

IEEE投稿模板翻译

>将这一行替换为您的稿件id号(双击此处编辑)< IEEE 期刊和会议论文的撰写准备&#xff08;2022&#xff09; 第一作者 A. 作者&#xff0c;IEEE成员&#xff0c;第二作者 B. 作者&#xff0c;第三作者 C. 作者 Jr.&#xff0c;IEEE成员 摘要—本文档为IEEE会刊、期刊和…

《Neon程序员指南》文档中关于矩阵转置的两处笔误

今天在看《Neon程序员指南》&#xff08;Neon Programmer Guide for Armv8-A Coding for Neon&#xff09;发现两处笔误&#xff0c;随手记在这里。 图6-11中&#xff0c;左边的指令应该是trn1 v1.4s, v0.,4s, v3.4s。 图6-15中trn1的图中有两个箭头画错了。

漏洞挖掘 | 记一次edu通过奖学金名单泄露学号的横向渗透

0x1 前言 哈喽&#xff0c;师傅们&#xff01; 这篇文章主要是给师傅们分享下一个简单的手法&#xff0c;通过打edu的时候&#xff0c;我们可以在一些学生管理登录后台&#xff0c;需要我们使用账号是学号登录的系统&#xff0c;然后我们可以尝试通过去网上找公开的奖学金名单…

JAVA在线教育新利器高效答题系统小程序源码

在线教育新利器——高效答题系统 &#x1f680;【开篇引入&#xff1a;教育新风尚】&#x1f680; 在这个快节奏的时代&#xff0c;学习不再局限于教室的四角&#xff0c;在线教育如雨后春笋般蓬勃发展。而今天&#xff0c;我要给大家揭秘一款在线教育的新宠儿——高效答题系…

传统CV算法——threshold阈值算法介绍

阈值化函数我的理解为&#xff0c;在计算机图像视觉中&#xff0c;我们常见的RGB图像表现的信息过多&#xff0c;可能会存在于一些掺杂的噪声&#xff08;因为针对视觉目标不是我们需要的&#xff09;&#xff0c;因此使用阈值算法&#xff0c;直接效果就是可以降噪&#xff0c…

微信公众号获取 openid: 从零到一快速实现一个微信公众号授权项目

一. 前言 上一篇文章说到&#xff0c;微信官方团队发了一则公告&#xff0c;美其名曰&#xff1a;“为了优化开发体验&#xff0c;避免多个同一功能接口对开发者造成困扰&#xff0c;微信团队将对下发统一消息接口进行如下调整。” 正是由于这个调整&#xff0c;而将部分开发者…

力扣: 快乐数

文章目录 需求分析代码结尾 需求 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。 …

社群空间站9.9付费入群系统二开源码 易支付版全套搭建教程

1.创建站点 2.搭建环境 php7.2 3.上传源码包 数据库批量修改sq9.dongge1.icu s10.dongge1.icu 改为你的域名 4.上传数据库 修改数据库文件/data/config/ 5.访问域名 6.账户密码 admin 123456 7.易支付修改地址是在/data/tpl/app/default/yy_shequn2/lib/epay.config.php…

【动捕_VRPN_ROS2】安装vrpn_client_ros2库将动捕数据转换ROS2话题

安装vrpn_client_ros2库将动捕数据转换ROS2话题 环境&#xff1a; Ubuntu &#xff1a;20.04 LTS ROS &#xff1a;ROS2 Foxy 安装VRPN库 执行以下命令安装VRPN库。 git clone https://github.com/vrpn/vrpn.git mkdir -p vrpn/build cd vrpn/build cmake .. make sudo …

【技术】叉车防撞报警系统的原理及应用场景

叉车作为一种大型货物的运输机械&#xff0c;自出现之后大大提高了人们在日常工作的运输效率&#xff0c;但是同样存在着一部分弊端&#xff0c;例如存在着较多的视觉盲区&#xff0c;随着人们对于叉车的日常使用&#xff0c;叉车的安全事故愈发严重&#xff0c;很容易发生碰撞…

C#高级:递归2-根据ID反向递归求其所有的祖先节点信息

目录 一、实现demo 二、封装方法 【ID>祖先ID】 【ID>祖先实体】 三、递归讲解 一、实现demo class MainClass {static List<Person> PersonList new List<Person>(){new Person(){ Id1,ParentIDnull,Name"小明曾祖父",},new Person(){ Id2…