数据库常见的查询

article/2025/10/4 18:34:39

目录

一、查询的完全限定写法

二、条件查询

三、模糊查询

四、范围查询

1)关键字:between and

2)关键字:in

3)关键字:is null或者、is not null和<>null和!=null

五、case when

1)方式1

2)方式2

六、排序查询

七、分组查询

1)用到分组函数

2)分组查询语法

3)分组查询特点

4)例子

八、连接查询

1)分类

2)内连接(inner join)

1.等值连接

2.非等值连接

3.自连接

3)外连接(left、right)

4)交叉连接,又称“笛卡尔连接”或"笛卡尔积"

5)全连接full join

九、子查询

1)外查询和内查询、关联子查询

2)子查询分类

1.按返回结果分类

2.按位置分类

3.按执行顺序分类

3)子查询的操作符

1.标量子查询、行子查询

2.列子查询

十、分页查询

1)limit关键字的语法

2)如何分页

十一、联合查询

(1)union、union all

1.含义

2.特点

3.要求

4.例子

(2)minus、intersect

十二、查询时加锁(select xxx for update)

作用

原理

应用案例


一、查询的完全限定写法

select 表名.列名 from 数据库.表名;  //完全引用表名或列名

二、条件查询

select * from 表名 where 条件 [group by] [having] [order by] [limit];

三、模糊查询

关键字:like

说明:

通配符%代表任意多个字符,_代表任意单个字符;

转义符\,防止后面的_被当成通配符

例子:

select * from 表名 where name like %teve%'';

select * from 表名 where name like _\_%'';

四、范围查询

1)关键字:between and

不使用between and

select * from 表名 where id>=4 and id;

使用between and

select * from 表名 where id between 4 and 6;

2)关键字:in

不使用in

select * from 表名 where age =20 or age=21 or age=23;

使用in

select * from 表名 where age in(20,21,23);

3)关键字:is null或者、is not null和<>null和!=null

select * from 表名 where age is not ‘null’;   

select * from 表名 where age <>‘null’;   //注意要加引号

五、case when

1)方式1

select sid,

case sage

when 18 then '18岁'

when then '19岁'

else '其他'

end as '年龄查询'

2)方式2

select sid,

case

when sage< 18 then '小'

when sage>18 then '大'

else null

end as '年龄查询'

六、排序查询

语法

select 查询列表 from 表 where 条件 order by 排序列表 asc/desc; //asc升序,由小到大;desc降序,由大到小

例子

select * from 表名 order by salary asc, employee_id desc; //先按工资升序,再按员工编号降序

七、分组查询

1)用到分组函数

sum、avg、min、max、count

2)分组查询语法

select 分组函数(要统计的列),列1,列2 where 分组前筛选条件 group by 分组列表 order by 子句 having 分组后筛选条件;

3)分组查询特点

分组查询中的筛选条件分为两类


数据源位置关键字
分组前筛选原始表  group by 子句的前面where
分组后筛选 分组后的结果集group by 子句的后面 having

4)例子

例子1:查询课程总量(不重复)

select count(distinct courseName) from 表名;


例子2:查询平均工资

select avg(salary) from 表名;


例子4:查询每个工种的最高工资

select max(salary),job_id,job_name from 表名 group by job_id;


例子5:查询每个位置上的部门个数

select count(*),location_id from department group by location_id;


例子6:查询哪个部门的员工个数>=2

(1)查询每个部门的员工个数

select count(*),department_id from 表名 group by department_id;

(2)根据一的结果进行筛选,查询哪个部门员工个数>=2

select count(*),department_id from 表名 group by department_id having count(*)>=2;


例子7:查询每个工种有奖金的员工的最高工资>12000的工种编号和最高工资

(1)查询每个工种有奖金的员工的最高工资

select max(salary),job_id from 表名 where commission_pct is not 'null' group by job_id;

(2)根据一的结果进行筛选,筛选出最高工资>12000

select max(salary),job_id from 表名 where commission_pct is not 'null' group by job_id having max(salary)>12000;


例子8:按多个字段进行分组

题目:查询每个部门每个工种的员工的平均工资

select avg(salary),department_id,job_id from group by department_id,job_id;

八、连接查询

1)分类

内连接(inner join)、外连接(左和右)、交叉连接(cross join)、全连接(full join)

2)内连接(inner join)

特点:取两张表查询结果的交集

分类:内连接又分为等值连接、非等值连接和自连接

补充:内连接的inner join中的inner可以省略。

1.等值连接

语法:

select tab1.col1,tab2.col2 from tab1,tab2 where tab1.id =tab2.id;

select tab1.col1,tab2.col2 from tab1  inner join  tab2  ON  tab1.id =tab2.id;


例子1:查询哪个部门的员工数大于等于3的部门名和员工个数,并按个数降序。

select count(*) as 个数,department_name from employee e

inner join department d ON e.department_id =d.department_id

group by department_id having count(*)>=3 order by count(*) desc;


例子2(三表连接):查询员工名、部门名、工种名,并按部门名降序

select name,department_name,job_tietle from employee as e

inner join department as d on e.department_id =d.department_id

inner join jobs as j ON e.job_id =j.job_id

order by department_name desc;

2.非等值连接

例子:

select e.name,j.grade_level from employee as e inner jonin job_grade as j ON e.salary between j.lowest_sal and highest_sal;

3.自连接

一张表自己连接自己

例子:查询员工名和其上级的名称。

select e.name,m.name from employee as e inner join employee as m on e.mannager_id =m.id;

3)外连接(left、right)

左外连接:left outer join(特点:查询结果以左边表(主表)为准。左边表查出来有几条数据,一共就有几条数据)

右外连接:right outer join(特点:查询结果以右边表(主表)为准。右边表查出来有几条数据,一共就有几条数据)

55d8efd2f0e34c0296830aa3464470ac.jpeg

 89fa5901ccf4496991aceb452827ae1b.jpeg

4)交叉连接,又称“笛卡尔连接”或"笛卡尔积"

假如A表中的数据为m行,B表中的数据有n行,那么A和B做笛卡尔积,结果为m*n行

例子:

表1
id1 name1
1张一
李二

表2
id2name2
1zs
2ls
3ww

查询SQL:select * FROM 表1 CROSS JOIN 表2;

查询结果
id1 name1id2name2
1张一1 zs
1张一2ls
1张一3 ww
2李二1zs
2李二2ls
2李二3ww

5)全连接full join

特点:取两张表查询结果的并集

注意:mysql不支持full join,执行会报错

例子:

表1
id1name1
1张一
2李二
5王五

表2
id2 name2
1zs
2ls
3ww

查询SQL:select * FROM 表1 FULL JOIN 表2;

查询结果
id1name1 id2name2
1张一1zs
2李二2ls
5王五nullnull 
null null 322

九、子查询

1)外查询和内查询、关联子查询

查询语句分为:外(父)查询(主查询)、内查询(子查询)

外查询仅使用内查询的最终结果,外查询和内查询没关联。

关联子查询:内查询会引用外查询的对象。比如select name,age from student where sid<=3 as sResult and age>(select age from sResult limit 1);

2)子查询分类

1.按返回结果分类

  • 标量子查询(单行子查询):1行1列
  • 列子查询(多行子查询):1列多行
  • 行子查询:1行多列
  • 表子查询:多行多列

2.按位置分类

  • select后from前:标量子查询
  • from后where前:表子查询
  • where后:标量子查询、列子查询、行子查询

3.按执行顺序分类

可分为相关(关联)子查询、不相关(非关联)子查询。

(1)相关子查询:先执行主查询,再执行子查询

标量子查询中:where 20>(子查询语句);

多行子查询中:exists

(2)不相关子查询:先执行子查询,再执行主查询

标量子查询中:where 列名>(子查询语句)

多行子查询中:in、all、some(any)

3)子查询的操作符

1.标量子查询、行子查询

(1)操作符有哪些

>、=、和!=、between and

(2)例子

标量子查询:

例子1:查询工资最少的员工的基本信息

select * from employee where salary=(select min(salary) from employee);

例子2:查询最低工资高于4号部门的最高工资的部门id和其最低工资

select depart_id,min(salary) from employee

group by depart_id

having min(salary)>(select max(salary) from employee where depart_id=4);

行子查询:

例子1:查询公号最小且工资最高的员工的基本信息

SELECT *FROM employee WHERE (employee_id,salary)=(SELECT MIN(employee_id),MAX(salary) FROM employees);

2.列子查询

(1)操作符有哪些

in和not in、some(any)、all、exists和not exists

(2)in

等于子查询结果的任意一个值

(3)any(some)

和子查询结果中的任意一个比较     

注意:=any相当于in,<>any相当于not in

(4)all

和子查询结果中的所有值比较

(5)exists

检查子查询结果是否为空。存在数据就返回值True,否则返回False

注意:和and一起用的情况特殊,例子如下:

查询 course 表中是否存在 id=1 的课程,如果存在,就查询出 student 表中 age 字段大于 24 的记录。

SELECT * FROM student

WHERE age>24 AND EXISTS(SELECT course_name FROM course WHERE id=1);

(6)补充说明

列子查询的all和any(some)可以被单行子查询替代

例子1:返回比job_id为“IT_ProG”任一工资低的员工


select name from employee where salary<any(select distinct salary from employee where job_id='IT_ProG');


可以替换为

select name from employee where salary<(select max(salary) from employee where job_id='IT_ProG');

例子2:返回比job_id为“IT_ProG”所有工资低的员工


select name from employee where salary<all(select distinct salary from employee where job_id='IT_ProG');


可以替换为

select name from employee where salary<(select min(salary) from employee where job_id='IT_ProG');

十、分页查询

1)limit关键字的语法

语法1:select * from student limit 起始位置,size

语法2:select * from student limit 起始位置 offset size

起始位置:要显示条目的起始索引(默认从0开始)

size:要显示的条目个数

案例:查询第10条到第13条(共4条)

写法1:select * from student limit 9,4;  //4表示返回4行,9表示从表的第10行开始

写法2:select * from student limit 4 offset 9;  

2)如何分页

select * from studnet limit (当前页码-1)*每页记录条数 ,每页记录条数;

十一、联合查询

(1)union、union all

1.含义

将多次查询结果合并成一个结果

2.特点

适用于合并多个表的查询结果;

union默认去重,union all 包含所有的重复项;

union去除重复的方式等效于distinct关键字,它是指输出字段列表的组合无重复,不是指剔除单个字段下的重复值

3.要求

两个查询结果集的列数必须相等,否则会报错

4.例子

f5ea5942a2054d01a9807333cd0b8e03.png

其中第一个select出的id只有2、3;第二个select出的t_id只有1、4

(2)minus、intersect

用于比较2个查询结果的差异

Oracle特有的,mysql和sqlserver都没有。不过mysql、sqlserver可以通过NOT EXISTS配合LEFT JOIN来实现

minus:取差集,左表减去右表剩余的数据

intersect:取交集

例子:

查询sql1  minus  查询sql1 

十二、查询时加锁(select xxx for update)

作用

查询时锁定查询记录,防止查询时内容被修改出现并发问题(脏读、幻读、不可重复读),导致查询结果不是我们想要的

原理

查询时加悲观锁:


  • 如果查询条件用了含索引,那么select xxx for update就会进行行锁;
  • 如果查询条件都是普通字段(不含索引),那么select xxx for update就会进行锁表

应用案例

select a,b from 表名 where a=1 for update;
update 表名 set b=2 where a=1;
commit


与直接“update 表名 set b=2 where a=1”的区别在于:

可以防止第三方在commit之前修改数据


http://chatgpt.dhexx.cn/article/4SIEN7j5.shtml

相关文章

查询数据(数据库)——简单查询

目录 1&#xff0e;最简单的查询 &#xff08;1&#xff09;查询指定列 &#xff08;2&#xff09;查询所有列 &#xff08;3&#xff09;查询计算列 &#xff08;4&#xff09;为列起别名 &#xff08;5&#xff09;使用DISTINCT关键字消除重复元组 2&#xff0e;查询满…

数据库之数据的查询

1 目的 1、理解SQL的特点&#xff1b; 2、掌握SELECT命令的使用&#xff1b; 3、掌握单表查询、连接查询、嵌套查询和集合查询&#xff1b; 4、掌握INSERT、UPDATE和DELETE命令的使用&#xff1b; 5、掌握将SQL命令嵌入到C#或其他高级语言&#xff1b; 2 要点 1、单表查询、…

【MySQL】数据库的基本查询

前言 上篇已经讲过数据库与表相关的一些相关的操作了&#xff0c;如果你对这部分依旧不太熟悉建议先去看看 传送门&#xff1a;【MySQL】逻辑库与数据表相关操作. 这篇就来说一下数据库中表的基本查询&#xff0c;看见是基本查询&#xff0c;就知道肯定有高级查询&#xff0…

SQL数据库的查询操作大全(select)

目录&#xff1a; 1、数据库的连接、创建 2、对字段的操作&#xff1a;&#xff08;alter table&#xff09; 3、对数据的操作&#xff08;插入、修改、删除&#xff09; 4、数据查询&#xff08;select&#xff09; 5、多表查询&#xff08;join on&#xff09; 6、约束…

JDK、Tomcat安装步骤

JDK安装 JDK下载地址 1.JDK安装 &#xff08;1&#xff09;运行Tomcat时需要先安装JDK&#xff0c;下载x64 installer &#xff08;2&#xff09;选择安装路径 &#xff08;3&#xff09;安装完成 2.配置环境变量 &#xff08;1&#xff09;“我的电脑”右键→属性→高级系…

Tomcat安装教程

1、下载 Tomcat。 你可以从 Apache Tomcat 官网&#xff08;Apache Tomcat - Welcome!&#xff09;上下载最新版本的 Tomcat。解压下载的压缩包。将下载的压缩包解压到指定的目录&#xff0c;例如 C:\Tomcat。 2、配置环境变量。 在 Windows 中&#xff0c;打开控制面板&…

详细到落泪的Tomcat安装教程....

前言 我个人是很少写基础软件的安装的&#xff0c;直到有一天诸葛铁头因为Tomcat安装的问题找到我… 诸葛铁头&#xff0c;原名诸葛铁蛋&#xff0c;因人比较头铁&#xff0c;故取名铁头。在诸葛体铁头建议下、以及征求了她的同意后&#xff0c;写了这篇文章。 虽然这篇文章…

Tomcat安装配置

Tomcat 是一个免费的开放源代码的 Web应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试 JSP程序的首选。 1. Tomcat下载 1&#xff09;进入Tomcat官网&#xff0c;选择下载所需的Tomca…

Tomcat安装教程(windows)

1. 下载Tomcat 首先确定你Windows系统是64位&#xff0c;还是32位(现在大部分是64位)及JDK版本&#xff08;Tomcat在 JDK1.8 环境下能够正常运行&#xff09; 下载地址&#xff1a;Tomcat官网. 2. 安装Tomcat 解压压缩包&#xff0c;放在想要放在的盘符(最好不要是C盘&#…

Apache Tomcat安装配置

Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器。Tomcat 技术先进、性能稳定&#xff0c;而且免费&#xff0c;因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可&#xff0c;成为目前比较流行的Web 应用服务器。 Tomcat安装方法 1、下载Tomcat后&a…

Tomcat安装配置及IDEA配置方法【亲测有效】

Tomcat安装配置及IDEA配置 1.下载Tomcat2.配置Tomcat环境变量3.安装Tomcat4.启动Tomcat5.测试Tomcat6.IDEA配置Tomcat 1.下载Tomcat Tomcat9官网下载地址 选择自己需要的版本&#xff0c;一般选择Windows 64位压缩包版本&#xff1a; 下载完后安装解压即可&#xff0c;解压后…

Eclipse、Tomcat安装配置及部署教程

想用Tomcat作为服务器&#xff0c;必须分以下两步。首先要配置好JDK的环境变量&#xff0c;再去下载Tomcat的压缩包。 下载、安装JDK&#xff0c;并且配置好环境变量 1、打开浏览器&#xff0c;输入JDK搜索&#xff0c;根据搜索结果下载安装包安装应用 2、先接受协议&#x…

Tomcat安装及运行

Tomcat 操作 Tomcat 安装 1、解压压缩文件 【注意】不要有中文路径 2、效果如下 Tomcat 运行 1、移动到tomcat安装路径下&#xff0c;双击进入 2、进入bin目录 3、双击 startup.bat 启动 Tomcat 【注意】区别于 startup.sh &#xff0c;此脚本用于 Linux 下 Tomcat 的启动&a…

Tomcat的安装与配置

Tomcat的安装与配置 一、准备与安装 1.在下载安装tomcat之前请确保计算机上已有java环境&#xff0c;可以通过键盘WindowsR&#xff0c;输入cmd&#xff0c;输入java -version来确定JDK版本&#xff0c;我使用的是JDK1.8 2.进入Tomcat官网&#xff0c;选择与JDK版本相匹配的…

Mac电脑tomcat安装部署

1、tomcat官网下载点击 下载zip到本地&#xff0c;解压即可安装&#xff0c;如下图。 2、命令行启动tomcat&#xff0c;用如下命令 Mac启动、关闭tomcat 。 1.打开终端进入tomcat的bin目录 ~ cd /Users/xxx/Documents/Java/apache-tomcat-9.0.34/bin 2.开启tomcat sudo sh st…

Tomcat 安装教程【附图文说明】

Apache Tomcat下载、安装、配置图文教程自我心得 一、Tomcat下载 Tomcat官网&#xff1a;Tomcat官方网址&#xff0c;可以在此处下载Tomcat。点击左侧Download下的对应版本。 注意有zip和exe两种格式的&#xff0c;zip是免安装版的&#xff0c;exe是安装版。同时观察自己的电…

TomCat安装和配置

我的环境&#xff1a;Win11&#xff0c;JDK1.8.0_333&#xff0c;IDEA2022.1.3 1、查看有没有安装tomcat 在cmd终端输入service.bat install命令 这是已经安装了,输入service remove tomcat9删除(这里注意你的版本号&#xff0c;写自己的) 2、在官网下载对应tomcat版本 cmd终…

Tomcat安装和配置(超详细)

一、Tomcat安装准备 1、tomcat下载 1.1、百度网盘链接下载 链接&#xff1a;https://pan.baidu.com/s/1uceOKe_QcpSQ6yhNxi4T5g?pwd1234 提取码&#xff1a;1234 1.2、官网在线下载 Tomcat官网&#xff1a;https://tomcat.apache.org/download-80.cg…

Tomcat安装及配置(Windows环境)

Tomcat&#xff08;Catalina&#xff09;&#xff1a;WEB服务器&#xff08;实现了JAVAEE中ServletJSP两个核心规范&#xff09; 一、官网下载安装包&#xff1a;Apache Tomcat - Welcome! 二、使用下载好的安装包&#xff08;apache-tomcat-10.0.12.zip&#xff09;直接解压到…

Tomcat安装及IDEA配置Tomcat教程

Tomcat安装 以Tomcat8.5为例 1.网站链接 Apache Tomcat - Apache Tomcat 8 Software Downloads 根据个人喜好&#xff0c;我安装的是8.5版本 2.下载完解压即可 我的安装目录为&#xff08;E:\Environments\apache-tomcat-8.5.83&#xff09; 3.配置系统变量 变量名固定不变&a…