iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL数据库的查询操作
  • 269
分享到

MySQL数据库的查询操作

数据库sqlmysql 2023-09-06 11:09:48 269人浏览 安东尼
摘要

目录 一、数据查询语句的基本格式 二、单表查询 查询表中的若干列 查询指定列 查询经过计算的值 选择表中的若干元组 去重 条件查询 order by 子句 聚集函数 group by 子句 三、连接查询 等值与非等值连接查询 外连接 多表连

目录

一、数据查询语句的基本格式

二、单表查询

查询表中的若干列

查询指定列

查询经过计算的值

选择表中的若干元组

去重

条件查询

order by 子句

聚集函数

group by 子句

三、连接查询

等值与非等值连接查询

外连接

多表连接

四、嵌套查询

带有in谓词的子查询

带有比较运算符的子查询

带有any(some)或all谓词的子查询

带有exists谓词的子查询

五、集合查询

六、基于派生表的查询


一、数据查询语句的基本格式

select 要查的内容from 查找的对象where 查找的条件group by 按什么分组having 使用到函数的条件order by 按照什么条件排序

二、单表查询

查询表中的若干列

查询指定列

 select 列名1,列名2[,列名3,...] from 表名;

        如果要查询表中的所有列并且不用列的显示顺序,那么可以用符号“*”来代替所有列名,如果想要改变显示顺序,那么就要将所有的表名按照你想要的顺序写出来。

        如果想要显示自己指定的列名可以在要查询的列名的后面加一个空格,然后输入自己想要的列名即可。

查询经过计算的值

        如果想要查询出经过一定的处理的列值,那么只需要将列名换成表达式即可,表达式可以是算术表达式、函数和字符串常量等

例:查询全体学生的姓名、出生年份和所在院系,要求给出生年份起别名:birthday,用小写字母表示系名

 select Sname,2022-Sage birthday,lower(Sdept) from Student;

选择表中的若干元组

去重

        有时候我们查到的结果可能是重复的,如果我们想要消除这些行可以使用distinct来消除它们。

例:查询选修了课程的学生学号,并去除重复的行。

 select distinct Sno from Sc;

条件查询

        条件查询可以通过where子句实现,下面是where子句的常用查询条件。

查询条件谓词
比较=,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较运算符
确定范围between and,not between and
确定集合in,not in
字符匹配like,not like
空值is null,is not null
多重条件(逻辑运算)and,or,not

(1)比较大小

例:查询计算机科学系全体学生的名单

 select Sname from Student where Sdept = 'CS';

(2)确定范围

例:查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄

 select Sname,Sdept,Sage from Student where Sage between 20 and 23;

(3)确定集合

例:查询计算机科学系(CS)、数学系(MA)、信息系(IS)学生的姓名和性别。

 select Sname,Ssex from Student where Sdept in ('CS','MA','IS');

(4)字符匹配

        在字符匹配中,%代表任意长度(可以为0)的字符串,下划线代表任意单个字符。如果要查询的字符串中含有%或者下划线则可以用 escape 定义换码字符。当匹配串中不含通配符时,可以用等于运算符代替like谓词,用不等于运算符代替not like谓词。

例:查询以"DB_"开头,且倒数第三个字符为i的课程的详细情况。

 select * from Course where Cname like 'DB\_%i__' escape '\';

(5)涉及空值的查询

        空值查询中的is和is not不能用等于或者不等于代替,等于或不等于的前提是有值,空值没有值。

例:查询所有有成绩的学生学号和课程号。

 select Sno,Cno from Sc where Grade is not null

(6)多重条件查询

        逻辑运算符and和or可以用来连接多个查询条件。and的优先级高于or,但用户也可以用括号改变优先级。

例:查询计算机科学系年龄在20岁以下的学生姓名。

 select Sname from Student where Sdept = 'CS' and Sage > 20;

order by 子句

        order by子句用来给查询结果排序,ASC为升序排列,DESC为降序排列,默认值为升序。空值的显示次序有具体系统实现来决定。

例:查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。

 select * from Student order by Sdept ASC,Sage DESC

聚集函数

        为了进一步方便用户,增强检索功能,下面是常用的一些聚合函数。

函数名作用
count(*)统计元组个数
count([distinct|all] <列名>)统计一列中值的个数
sum([distinct|all] <列名>)计算一列值的总和,列值必须是数值型
avg([distinct|all] <列名>)计算一列值的平均值,列值必须是数值型
max([distinct|all] <列名>)求一列值中的最大值
min([distinct|all] <列名>)求一列值中的最小值

注:1.distinct代表计算时去除重复值,all代表计算时不去除重复值,默认为all。

        2.当聚集函数遇到空值时,除count(*)外,都跳过空值而只处理非空值。

        3.聚集函数只能用于select子句和group by中的having子句。

例:查询选修了课程的学生人数

 select count(distinct Sno) from Sc;

group by 子句

        group by子句将查询结果按某一列或多列的值分组,值相等的为一组。如果未对查询结果分组,聚集函数将作用于整个查询结果,分组后聚集函数将作用于每一组,即每一组都有一个函数值。

例:查询选修了三门以上课程的学生学号。

 select Sno from Sc group by Sno having count(*) > 3;

三、连接查询

        通常情况下,只查询一个表并不能满足我们的需求,这时就引入了连接查询。如果一个查询同时涉及两个以上的表,则称之为连接查询。

等值与非等值连接查询

        连接查询的where子句中用来连接两个表的条件称为连接条件或连接谓词,其一般格式为

 [<表名1>.]<列名1><比较运算符>[<表名2>.]<列名2> [<表名1>.]<列名1> between [<表名2>.]<列名2> and [<表名2>.]<列名3>

        当比较运算符为“=”时,称为等值连接,其余则为非等值连接。连接条件中的列名称为连接字段,各连接字段的名称不必相同,但必须是可比的。在等值连接中,去掉目标列中的重复列称为自然连接

例:查询选修2号课程且成绩在90分以上的所有学生的学号和姓名。

 select Student.Sno,Sname from Student,Sc where Student.Sno = Sc.Sno and Sc.Cno = '2' and Sc.Grade > 90;自身连接

        一个表自己与自己连接叫做自身连接。

例:查询每一门课的间接先修课(即先修课的先修课)。

 select first.Cno,second.Cpno from Course first,Course second where first.Cpno = second.Cno;

外连接

        普通连接操作只输出满足连接条件的元组,外连接操作以指定表为主体,将主体表中不满足连接条件的元组一并输出。外连接分为左外连接和右外连接,如果列出左表中的所有元组,则称为左外连接;列出右表的所有元组,则成为右外连接。

例:查询每个学生及其选修课程的情况,未选课的学生的选课情况以空值输出。

 select Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade from Student left outer join Sc on (Student.Sno = Sc.Sno); 或 select Student.*,Sc.* from Student left outer join Sc using(Sno);

多表连接

        两个表以上的连接称为多表连接

例:查询每个学生的学号、姓名、选修的课程名及成绩。

 select Student.Sno,Sname,Cname,Grade from Student,Sc,Course where Student.Sno = Sc.Sno and Sc.Cno = Course.Cno;

四、嵌套查询

        在sql语言中,一个select-from-where语句称为一个查询块。将一个查询块嵌套在另外一个查询块中的where子句或having短语的条件中的查询称为嵌套查询。被嵌套的查询块称为内层查询或子查询,另一个则为外层查询或父查询。需要注意的是,group by子句只能对最终的查询结果进行排序,也就是只能用在最外层的查询中,不能用在任何子查询中。

        如果子查询的条件不依赖于父查询,则称为不相关子查询。如果子查询的条件依赖于父查询,则称为相关子查询。

带有in谓词的子查询

例:查询选修了课程名为“信息系统”的学生的学号和姓名。

 select Sno,Sname from Student where Sno in     (select Sno     from Sc     where Cno in         (select Cno         from Course         where Cname = '信息系统'         )     );

带有比较运算符的子查询

        父查询与子查询之间用比较运算符进行连接,这时内层查询返回的是单个值。

例:找出每个学生超过他自己选修课程平均成绩的课程号。

 select Sno,Cno from Sc x where Grade >= (     select avg(Grade)     from Sc y     where x.Sno = y.Sno);

带有any(some)或all谓词的子查询

        子查询返回多个值时要用any或all谓词修饰符,并且必须同时使用比较运算符。谓词any的意思是结果中的某个值,all的意思是结果中的所有值。

例:查询非计算机科学系中比计算机科学系所有学生年龄都小的学生姓名及年龄。

 select Sname,Sage from Student where Sage < all     (select Sage     from Student     where Sdept = 'CS') and Sdept <> 'CS';

带有exists谓词的子查询

        此类子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。由exists引出的子查询,其目标表达式通常用*,因为带exists的子查询只返回真值或假值,给出列名无实际意义。

例:查询选修了全部课程的学生姓名。

 select Sname from Student where not exists      (     select *     from Course     where not exists         (         select *         from Sc         where Sno = Student.Sno and Cno = Course.Cno         )     );

五、集合查询

        查询的结果是一个个元组的集合,所以多个查询结果之间可以进行集合操作。集合操作主要包括交(intersect)、并(uNIOn)和差(except)。需要注意的是,参加集合操作的各查询结果的列数和对应项的数据类型必须相同。

例:查询计算机科学系的学生及年龄不大于19岁的学生。

 select * from Student where Sdept = 'CS' union select * from Student where Sage <= 19;

注意:并操作会自动去除相同的元组,如果不想去除重复的元组可以用union all操作符。

六、基于派生表的查询

        除去返回逻辑真假值的情况,子查询返回的结果可以认为是一个表,那么子查询的结果就可以作为一个临时派生表出现在from子句中,成为主查询的查询对象。

例:找出每个学生超过他自己选修课程平均成绩的课程号。

 select Sno,Cno from Sc,(select Sno,Avg(Grade) from Sc group by Sno)     as Avg_sc(avg_sno,avg_grade)    -- 给派生表指定表名和属性列名 where Sc.Sno = Avg_sc.avg_sno and Sc.Grade >= Avg_sc.avg_grade;

注意:1.如果子查询中没有聚集函数,那么可以不给派生表指定属性列名。

           2.通过from子句生成派生表时,as关键字可以省略,但必须为派生关系起一个别名。

来源地址:https://blog.csdn.net/m0_52660785/article/details/127554307

您可能感兴趣的文档:

--结束END--

本文标题: MySQL数据库的查询操作

本文链接: https://www.lsjlt.com/news/396921.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL数据库的查询操作
    目录 一、数据查询语句的基本格式 二、单表查询 查询表中的若干列 查询指定列 查询经过计算的值 选择表中的若干元组 去重 条件查询 order by 子句 聚集函数 group by 子句 三、连接查询 等值与非等值连接查询 外连接 多表连...
    99+
    2023-09-06
    数据库 sql mysql
  • Node.js数据库操作之查询MySQL数据库(二)
    前言 我们在上一篇文章《Node.js数据库操作之连接MySQL数据库(一)》中已经学习了Nodejs连接MySQL数据库的几种方法,数据库连接上了之后就需要对数据库进行查询。本篇文章介绍一下查询MySQL...
    99+
    2022-06-04
    数据库 操作 Node
  • MySQL 数据库聚合查询和联合查询操作
    目录1. 插入被查询的结果2. 聚合查询2.1 介绍2.2 聚合函数2.3 group by 子句2.4 having3. 联合查询3.1 介绍3.2 内连接3.3 外连接...
    99+
    2022-11-12
  • 用python操作mysql数据库(之简单查询操作)
    1、mysql安装    此处省略一万字.......2、pip安装MySQLdb模块sudo pip install mysql-python3、简单代码#!/us...
    99+
    2022-10-18
  • MySQL数据库复合查询操作实战
    目录1.基本查询回顾2.多表查询 (重要)3.自连接4.子查询1)单行子查询 (子查询的结果是单行)(2)多行子查询(3)多列子查询5.合并查询总结:1.基本查询回顾 准备工作,创建一个雇员信息表:(来自oracle 9...
    99+
    2023-05-12
    mysql复合查询语句 mysql复合语句 sql复合查询语句
  • MySQL数据库学习之查询操作详解
    目录1.示例表内容2.简单查询3.给列起别名4.列运算5.条件查询1.示例表内容 dept表: +--------+------------+----------+ | DEPTNO | DNAME | LOC...
    99+
    2022-07-24
    MySQL数据库查询 MySQL查询
  • 数据库的单表查询操作
    数据库的单表查询操作?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。单表查询指的是在一张表中进行数据的查询,它的执行顺序是“fr...
    99+
    2022-10-18
  • MySQL数据库中表查询操作的示例分析
    小编给大家分享一下MySQL数据库中表查询操作的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、单表查询      1...
    99+
    2022-10-18
  • PostgreSQL数据库的基本查询操作
    目录查询列去除重复数据DISTINCTWHERE子句注释算术运算符比较运算符逻辑运算符查询列 SELECT语句,用于从表中选取数据。格式: SELECT <列名...
    99+
    2022-11-13
  • MySQL的查询操作
    1. 基础的查询操作 #简单查询 select * from emp; //查询emp中所有的记录 select empno, job,ename from emp; //查询em...
    99+
    2022-10-18
  • C#数据库查询和操作方法
    本篇内容主要讲解“C#数据库查询和操作方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#数据库查询和操作方法”吧!一:C#数据库查询之数据库连接代码:SqlConnectionobjSqlC...
    99+
    2023-06-18
  • MySQL-查询数据库(一)
    有志者,事竟成 文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。 ...
    99+
    2023-09-07
    mysql java 数据库
  • php怎么操作数据库查询相同的数据
    在开发Web应用程序时,通常需要从数据库检索数据。而在检索过程中,有时会发现需要查询相同数据的请求量大,这时候如何优化查询就变得非常重要。本文将介绍在PHP中如何操作数据库查询相同的数据。使用GROUP BY语句在MySQL中使用GROUP...
    99+
    2023-05-14
    php 数据库
  • php如何操作数据库查询相同的数据
    这篇文章主要介绍“php如何操作数据库查询相同的数据”,在日常操作中,相信很多人在php如何操作数据库查询相同的数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php如何操作数据库查询相同的数据”的疑惑有所...
    99+
    2023-07-05
  • 如何查询mysql的数据库
    本篇内容介绍了“如何查询mysql的数据库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-19
  • 零基础学MySQL(四)-- 数据库最常用的操作【查询基础篇 -- 单表查询】
    目录 📔一、最简单的 select 语句1️⃣基本语法2️⃣基本练习3️⃣补充说明(1) 使用表达式对查询的列进行运算(2) 在 select 语句中可使用 as 语句取别名 📕...
    99+
    2023-08-21
    数据库 mysql sql
  • thinkphp5 数据库链式操作聚合查询
    在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数、所有用户的最大积分、用户的平均成绩等等,ThinkPHP为这些统计操作提供了一系列的内置方法,包括: www.96net.com.cn 获取用户数: Db::ta...
    99+
    2019-04-23
    thinkphp5 数据库链式操作聚合查询 数据库入门 数据库基础教程 数据库 mysql
  • 怎么在MySQL数据库中进行查询并删除操作
    本篇内容介绍了“怎么在MySQL数据库中进行查询并删除操作”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2023-05-25
    mysql
  • MySQL数据库多表查询
    目录 MySQL数据库多表查询 多表查询 子查询 联合查询 交叉连接 内连接 外连接 ...
    99+
    2017-06-26
    MySQL数据库多表查询
  • Mysql数据库连接查询
        Mysql数据库连接查询连接是关系数据库模型的主要特点。连接查询是关系数据库中最主要的查询,主要包括内连接、外连接等。通过连接运算可以实现多个表查询。当查询数...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作