数据库基础知识——DQL语言(二)

文章目录

    • 1.多表连接查询
      • 1.1 sql92语法
        • 1.1.1 等值连接
        • 1.1.2 sql92:非等值连接
        • 1.1.3 sql92:自连接
      • 1.2 sql99语法
        • 1.2.1 等值连接
        • 1.2.2 非等值连接
        • 1.2.3 内连接
        • 1.2.4 左右连接(外连接)
    • 2.子查询
      • 2.1 where或者having后面
    • 3.分页查询
    • 4.联合查询

1.多表连接查询

笛卡尔乘积:表1,有m行;表2,有n行,如果连接条件省略或无效,则结果=m*n;
解决办法:添加上连接条件

1.1 sql92语法

sql92语法的多表连接查询包含:等值连接、非等值连接、自连接

1.1.1 等值连接

1.等值连接的结果 = 多个表的交集
2.n表连接,至少需要n-1个连接条件
3.多个表不分主次,没有顺序要求
4.一般为表起别名,提高阅读性和性能
#将beauty表中的女生和boys表中的男生匹配
select name,boyName
from beauty,boys
where beauty.boyfriend_id=boys.id;#查询员工名,员工工种id和员工工种名
select last_name,employees.job_id,job_title
from employees,jobs
where employees.job_id=jobs.job_id;#查询员工名和对应的部门
select last_name,department_name
from employees,departments
where employees.department_id=departments.department_id;#查询有奖金的员工名和部门名
select last_name,department_name
from employees,departments
where employees.department_id=departments.department_id
and employees.commission_pct is not null;#查询每个城市的部门个数
select count(*),city
from locations,departments
where locations.location_id=departments.location_id
group by city;#查询员工名,部门名和所在的城市
select last_name,departments.department_name,locations.city
from employees,departments,locations
where employees.department_id=departments.department_id
and departments.location_id=locations.location_id;

1.1.2 sql92:非等值连接

#查询员工名,员工的工资和工资级别
select last_name,salary,grade_level
from employees,job_grades
where salary between lowest_sal and highest_sal;

1.1.3 sql92:自连接

#查询员工名和上级姓名
select e.last_name,e.employee_id,l.last_name as "leader"
from employees e,employees l
where e.manager_id=l.employee_id;

1.2 sql99语法

含义:1999年推出的sql语法
支持:
等值连接、非等值连接 (内连接)
外连接
交叉连接语法:select 字段,...
from 表1
【inner|left outer|right outer|cross】join 表2 on  连接条件
【inner|left outer|right outer|cross】join 表3 on  连接条件
【where 筛选条件】
【group by 分组字段】
【having 分组后的筛选条件】
【order by 排序的字段或表达式】好处:语句上,连接条件和筛选条件实现了分离,简洁明了!

1.2.1 等值连接

#查询员工名和部门名
select last_name,department_name
from employees
inner join departments
on employees.department_id=departments.department_id;#查询名字中包含e的员工名和工种名(包含筛选)
select last_name,job_title
from employees
inner join jobs
on employees.job_id=jobs.job_id
where last_name like "%e%";#查询部门个数大于3的城市和部门个数
select city,count(*)
from locations
inner join departments
on locations.location_id=departments.location_id
group by city
having count(*)>3;

1.2.2 非等值连接

#查询员工名和工资和工资水平
select last_name,salary,grade_level
from employees
inner join job_grades
on employees.salary between job_grades.lowest_sal and job_grades.highest_sal;

1.2.3 内连接

#查询员工的名字和上级姓名
select e.last_name,l.last_name as "leader"
from employees as e
inner join employees as l
on e.manager_id=l.employee_id;

1.2.4 左右连接(外连接)

用于查询一个表中有,另外一个表中没有的记录
特点:外连接的查询结果为主表中的所有记录,如果从表中有和主表匹配的,则显示对应的值,否则显示为null;左外连接:left join的左边是主表;右外连接:right join的右边是主表;
#查询女神的男朋友,要是没有,显示null
select name,boyName
from beauty
left join boys
on beauty.boyfriend_id=boys.id;

2.子查询

含义:

一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询
在外面的查询语句,称为主查询或外查询

特点:

1、子查询都放在小括号内
2、子查询可以放在from后面、select后面、where后面、having后面,但一般放在条件的右侧select后面:仅仅支持标量子查询from后面:支持表子查询where或者having后面:标量子查询,列子查询,行子查询exists后面:表子查询
3、子查询优先于主查询执行,主查询使用了子查询的执行结果
4、子查询根据查询结果的行数不同分为以下两类:
① 单行子查询结果集只有一行一般搭配单行操作符使用:> < = <> >= <= 非法使用子查询的情况:a、子查询的结果为一组值b、子查询的结果为空② 多行子查询结果集有多行一般搭配多行操作符使用:any、all、in、not inin: 属于子查询结果中的任意一个就行any和all往往可以用其他查询代替

2.1 where或者having后面

标量子查询(单行子查询)
列子查询(多行子查询)
行子查询(多列多行)特点:
子查询一般放在小括号内;
子查询一般放在条件的右侧;
标量子查询,一般搭配着单行操作符使用>< >= <= = <>
列子查询一般搭配着多行操作符使用in、any、some、all
#查询比Abel工资高的员工名和工资
select last_name,salary
from employees
where salary>(select salary from employees where last_name="Abel"
);#查询job_id与141号员工相同,salary比143号员工多的员工的姓名,job_id和salary
select last_name,job_id,salary
from employees
where job_id=(select job_idfrom employeeswhere employee_id=141
)
and salary>(select salaryfrom employeeswhere employee_id=143
);#查询最低工资大于50号部门最低工资的部门id和工资
select department_id,min(salary)
from employees
group by department_id
having min(salary)>(select min(salary)from employeeswhere department_id=50
);#查询location_id是1400或者1700的部门中的所有员工的姓名
select last_name
from employees
where department_id in (select department_idfrom departmentswhere location_id in (1400,1700)
);

3.分页查询

应用场景:

实际的web项目中需要根据用户的需求提交对应的分页查询的sql语句

语法:

select 字段|表达式,...
from 表
【where 条件】
【group by 分组字段】
【having 条件】
【order by 排序的字段】
limit 【起始的条目索引,】条目数;

特点:

1.起始条目索引从0开始2.limit子句放在查询语句的最后3.公式:select * from  表 limit (page-1)*sizePerPage,sizePerPage
假如:
每页显示条目数sizePerPage
要显示的页数 page
#查询前五条员工信息
select *
from employees
limit 0,5;#查询第11-25条
select *
from employees
limit 10,25;#查询有奖金的,工资前十名的员工姓名
select last_name,salary
from employees
where commission_pct is not null
order by salary desc
limit 10;

4.联合查询

引入:
union 联合、合并

语法:

select 字段|常量|表达式|函数 【from 表】 【where 条件】 union 【all】
select 字段|常量|表达式|函数 【from 表】 【where 条件】 union 【all】
select 字段|常量|表达式|函数 【from 表】 【where 条件】 union  【all】
.....
select 字段|常量|表达式|函数 【from 表】 【where 条件】

特点:

1、多条查询语句的查询的列数必须是一致的
2、多条查询语句的查询的列的类型几乎相同
3、union代表去重,union all代表不去重
#查询员工的名字中,邮箱中含有a,并且部门号大于90的员工信息
select * from employees where last_name like "%a%"
union
select * from employees where email like "%a%"
union 
select * from employees where department_id>90;

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

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

相关文章

周志华教授发表首届国际学习与推理联合大会IJCLR开场Keynote:探索从纯学习到学习+推理的AI...

周志华&#xff0c;毕业于南京大学&#xff0c;欧洲科学院外籍院士&#xff0c;国家杰出青年基金获得者&#xff0c;现任南京大学人工智能学院院长、南京大学计算机软件新技术国家重点实验室常务副主任、机器学习与数据挖掘研究所 (LAMDA)所长、人工智能教研室主任。2021年8月1…

第八章 指针实验

C程序实验报告 实验项目&#xff1a; 1、指针基础及指针运算 2、数据交换 3、字符串反转及字符串连接 4、数组元素奇偶排列 姓名&#xff1a;曹时仙 实验地点&#xff1a;教学楼514教室 实验时间&#xff1a;2019.6.12 一、实验目的与要求 1、掌握指针的概念和定义方法 2、掌…

大脑的学习方式如何,机器学习与生物学习的联系将提供「答案」

来源&#xff1a;ScienceAI编辑&#xff1a;凯霞准确指出神经活动如何随着学习而变化&#xff0c;不是黑白分明的。有人认为大脑中的学习或生物学习可以从优化的角度来考虑&#xff0c;这就是在计算机或机器人等人工网络中学习的方式。由卡内基梅隆大学和匹兹堡大学的研究人员共…

数据库基础知识——DML语言

文章目录1.插入2.修改3.删除1.插入 语法&#xff1a; insert into 表名(字段名&#xff0c;...) values(值1&#xff0c;...);特点&#xff1a; 1、字段类型和值类型一致或兼容&#xff0c;而且一一对应 2、可以为空的字段&#xff0c;可以不用插入值&#xff0c;或用null填…

Go语言交叉编译工具gox

基本介绍 交叉编译是为了在不同平台编译出其他平台的程序&#xff0c;比如在Linux编译出Windows程序&#xff0c;在Windows能编译出Linux程序&#xff0c;32位系统下编译出64位程序&#xff0c;今天介绍的gox就是其中一款交叉编译工具。 配置环境 首先配置好Go语言的环境变量&a…

登顶Nature | DeepMind用AI首次实现数学领域重大进展,助力科学家证实两大猜想

来源&#xff1a;AI科技评论作者&#xff1a;杏花、莓酊编辑&#xff1a;琰琰数论是人类知识最古老的一个分支&#xff0c;然而它最深奥的秘密与其最平凡的真理是密切相连的。数学原理极易从事实中归纳出来&#xff0c;但证明却隐藏的极深。可以说数学&#xff0c;是一切科学的…

C++学习——类的多态

文章目录1.重载多态1.1 函数重载1.2 运算符重载2.强制多态3.类型参数化多态4.包含多态类的多态 多态是指同样的消息被不同类型的对象接收时导致不同的行为。 所谓消息是指对类成员函数的调用&#xff0c;不同的行为是指不同的实现&#xff0c;也就是调用了不同的函数。 在C中&a…

细胞如何获得秩序?除了形成细胞器,还可以发生相分离

来源&#xff1a;集智俱乐部作者&#xff1a;Viviane Callier译者&#xff1a;王百臻 审校&#xff1a;梁金 编辑&#xff1a;邓一雪 导语小小的细胞实际上是一个无比复杂的宇宙。DNA在细胞核中运筹帷幄&#xff0c;指导各种细胞器密切合作&#xff0c;产生功能各异的蛋白质。…

JS设置cookie、读取cookie、删除cookie

cookie是网站设计者放置在客户端的小文本文件&#xff0c;一般后台语言使用的比较多&#xff0c;可以实现用户个性化的一些需求。 javascript使用 document.cookie 来操作cookie同一个域名下的页面,共有一个cookie不同的浏览器分别管理自己的cookie,互不影响1.设置cookie // 设…

数据库基础知识——DDL语言

1.库的管理&#xff1a; 一、创建库 create database 库名#创建一个books库 create database books二、删除库 drop database 库名 三、修改库 rename database 旧库名 to 新库名2.表的管理&#xff1a; 2.1 创建表 CREATE TABLE IF NOT EXISTS stuinfo(stuId INT,stuName V…

从人类交互通信发展简史看元宇宙发展趋势及商业价值

来源&#xff1a;科协频道从通信角度来看&#xff0c;人类社会通信方式的发展历程和趋势&#xff0c;它一共经历了以下几个阶段&#xff1a;通信方式的发展历程和趋势第一阶段几千年以前的人类通过口口相传的方式&#xff0c;实现人与人之间的通信&#xff0c;这种通信方式的深…

字符设备驱动

1 引言 APP&#xff1a;open("/dev/xxx")&#xff0c;read&#xff0c;write    ——  设备字符驱动文件包含属性、主设备号和次设备号C LibrarySystem call interface内核&#xff1a;根据文件类型为字符设备&#xff0c;查找字符设备。根据主设备号查找file_…

yii2的Console定时任务创建

https://www.cnblogs.com/dwj97/p/6632848.html 设置定时任务 linux下&#xff0c;运行crontab -e 30 21 * * * /usr/local/php/bin/php /your_project_path/yii test/test //应用程序 上面的例子表示每晚的21:30执行上面的定时程序 下面是定时任务设置的一些基本介绍 基本格…

数据库基础知识——TCL语言

1.TCL含义 TCL&#xff0c;事务控制语言。通过一组逻辑操作单元&#xff08;一组DML——sql语句&#xff09;&#xff0c;将数据从一种状态切换到另外一种状态&#xff0c;即要么全部成功&#xff0c;要么全部失败。2.特点 &#xff08;ACID&#xff09; 原子性(atomicity)&a…

谷歌时间晶体登上Nature,诺奖得主重大猜想成为现实

来源&#xff1a;机器之心没有能量的供给&#xff0c;没有能量的消耗&#xff0c;它的循环运动会永远持续下去。时间晶体就像是一个「永动机」在不同状态之间永久循环往复而不消耗任何能量。来自斯坦福大学、谷歌、马克思 普朗克复杂系统物理研究所和牛津大学的研究团队声称已…

【GoWeb开发实战】Beego的路由控制

Beego的路由控制 二、路由控制 web框架中&#xff0c;路由是重要的一环&#xff0c;对于beego的路由配置如何&#xff1f; 2.1 默认路由 让我们从入口文件main.go先分析起来吧&#xff1a; package mainimport (_ "beegoDemo/routers""github.com/astaxie/beego…

数据库基础知识——视图

视图 含义&#xff1a;理解成一张虚拟的表 视图和表的区别&#xff1a; 使用方式占用物理空间视图完全相同 不占用&#xff0c;仅仅保存的是sql逻辑表完全相同 占用 视图的好处&#xff1a; 1、sql语句提高重用性&#xff0c;效率高 2、和表实现了分离&#xff0c;提高了安…

挑战唯物论?诺奖得主彭罗斯:意识产生可能是大脑内的「量子叠加」的结果...

来源&#xff1a;新智元量子物理学取得了巨大成功&#xff0c;但其解释仍然不确定。大脑由神经元组成&#xff0c;而神经元又由分子组成&#xff0c;很可能会受到量子效应的影响。量子力学和神经科学能否融合成「量子意识」理论&#xff1f;「我们是谁」&#xff1f;恐怕没有什…

完全背包

题目描述 即0-1背包&#xff0c;把每个物品只能拿一次改为能拿无数次。 思路 //这个位置的状态是不拿&#xff0c;第一次拿&#xff0c;和第n>1次拿 dp[i][j]max(max(dp[i-1][j],dp[i-1][j-v[i]]w[i]),dp[i][j-v[i]]); 拿0次&#xff1a;dp[i-1][j]; 拿1次&#xff1a;dp[i-…

下一个是什么?2022年值得关注的22项新兴技术

来源&#xff1a;参考消息网英国《经济学人》网站11月8日发表题为《下一个是什么&#xff1f;2022年值得关注的22项新兴技术》的文章。在文章列举的22项新技术中&#xff0c;既有今年大热的“元宇宙”、太空旅游、脑机接口&#xff0c;也有备受期待的量子计算、艾滋病病毒疫苗……