SELECT的使用

目录

1、SQL的查询命令

1.1 SELECT语句

1.2 投影查询

1.3 选择查询

1.4 聚合函数查询

1.5 简单分组查询(GROUP BY)

1.6 内连接查询

1.7 外连接查询

1.8 子查询

1. 无关子查询

2. 相关子查询

带exists的相关子查询:

1.9 集合查询

1. UNION(并)

2. INTERSECT(交)和EXCEPT(差)

1.10 排序(ORDER BY)

1.11 存储查询结果

2、数据操作中使用SELECT字句

2.1 INSERT中使用SELECT字句

2.2 UPDATE中使用SELECT字句

2.1 DELETE中使用SELECT字句


接下来查询,我们用,在teaching数据库里的,三张表:

student(sno(主码),sname,gender,sage,specialty(专业),grade(年级)),

course(cno(主码),cname,credit),

sc(sno(外码),cno(外码),score),(sno,cno)为主码。

1、SQL的查询命令

1.1 SELECT语句

SELECT [ALL|DISTINCT] <expression>[,...n]
FROM <table|view>[,...n]
[WHERE <condition_expression>]
[GROUP BY <column_name>[,...n] [HAVING <group_condition_expression>]
[ORDER BY <column_name> [ASC|DESC] [,...n]]

SELECT返回的是一个关系

ALL|DISTINCT默认ALL不去重DISTINCT去重一个就指定所有的列

expression表达式,通常取列名,所有列可用 * 表示。

FROM:从一个或多个表(视图)中查询。

WHEREcondition_expression可以是

1. 比较运算符:=、>、<、>=、<=、<>(!=)。

2. 逻辑运算符:AND(与)、OR(或)、NOT(非)。

3. 确定范围运算符:BETWEEN AND,NOT BETWEEN AND,可以用比较运算符代替。

4. 集合成员运算符:IN、NOT IN。

5. 字符匹配运算符:LIKE,NOT LIKE。

6. 判空运算符:IS NULL、IS NOT NULL。

7. 聚合函数:AVG()、MAX()、MIN()、SUM()、COUNT()。

8. SELECT 字句:SELECT可以嵌套。

9. 谓词:IN、EXISTS、ALL、SOME、ANY。

10. 集合运算符:UNION(并)、INTERSECT(交)、EXCEPT(差)。

GROUP BY:按一个或多个列,分组。

HAVING:在GROUP BY中可选(没有GROUP BY,不能单独写HAVING),给分组加上条件

ORDER BY:对最终的查询结果进行排序默认ASC升序,DESC降序。

1.2 投影查询

查询stduent表中的sname,gender,specialty。

use teaching
go
select sname,gender,specialty
from student

查询student表所有列。

select * from student

查询student表前三行(包括所有列)。

select top 3 *
from student

查询student表前50%(包括所有列)。

select top 50 percent *
from student

给查询到的列改名

select sno as 学号,sname as 名字 -- as 可省略,但可读性差
from student
-- 或
select 学号=sno,名字=sname -- =是赋值,不能反了
from student

当然,也可以 select 表达式,如:

select sno,sage+10 as 十年后的年龄
from student

1.3 选择查询

关系运算符

查询sc表中不及格的sno

select sno
from sc
where score<60

逻辑运算符

查询计算机中的男生的信息

select *
from student
where specialty = '计算机' and gender = '男'

IN关键字

查询计算机或电子商务专业的学生信息。

select *
from student
where specialty in ('计算机','电子商务')
-- 也可以这样写 where specialty = '计算机' or specialty = '电子商务'

LIKE关键字

LIKE '%',0~N任意字符

LIKE ‘_’,任意字符

LIKE '[ ]',范围中任意字符

LIKE '[^ ]',不在范围中任意字符

查询姓张的同学的信息。

select *
from student
where sname like '张%'

判空运算符

查询score是NULL的学生信息。

select *
from sc
where score is NULL

1.4 聚合函数查询

count(*):返回元组个数

count(column_name):返回该列属性值的个数(不去重)。

count(distinct column_name):返回该列属性值的个数(去重)。

avg(column_name):返回该列的平均值

sum(column_name):返回该列的总和

max(column_name):返回该列的最大值

min(column_name):返回该列的最小值

注意:返回的值,没有列名,自己取名字。

注意:where不能使用聚合函数

如:

查询专业的个数。

select count(distinct specialty) as 专业个数
from student

1.5 简单分组查询(GROUP BY)

group by 后的表达式,要与select中的表达式匹配

group by 后多个表达式,先按第一个分组,再按第二个分组……

HAVING 子句用于在分组(GROUP BY)查询之后进行筛选。

查询男生,女生的人数。

select gender,count(gender) as 人数
from student
group by gender

group by 后面有gender,select 后面也要有gender。

查询一个学生的总成绩,平均成绩。

use teaching
go
select sno,sum(score) as 总分,avg(score) as 平均成绩
from sc
group by sno

 group by 后面有sno,select 后面也要有sno。

1.6 内连接查询

连接格式

SELECT select_list
FROM table1 INNER INTO table2 ON condition_expression

也可以select  select_list  from table1,table2  where condition_expression,但较旧或不推荐。   

一般连接条件是,使用外键连接

如:

查询sname,cno,score,

select student.sname,sc.cno,sc.score
from student inner join sc on student.sno = sc.sno

1.7 外连接查询

把INNER INTO换成

LEFT OUTER JOIN:以左表为主(),右表不满足补NULL。

RIGHT OUTER JOIN:以右表为主(),右表不满足补NULL。

FULL OUTER JOIN :左,右表不满足时,各自对应位置补NULL。

其他不变。

1.8 子查询

1. 无关子查询

子查询与外部查询无关子查询只执行一次

查询与刘珊的专业相同的同学的sno,snsme,specialty

use teaching
go
select sno,sname,specialty
from student
where specialty = (
select specialty
from student 
where sname = '刘珊') and sname != '刘珊'

当然,也可以使用自连接:

use teaching
go
select a.sno,a.sname,a.specialty
from student as a inner join student as b on a.specialty = b.specialty
where b.sname = '刘珊' and a.sname != '刘珊'

查询选修了cno为‘0807’的学生的sname和specialty。

select sname,specialty
from student as s inner join sc on s.sno = sc.sno
where sc.cno = '0807'
2. 相关子查询

子查询依赖于外部查询。子查询重复执行

cah查询成绩比该课平均成绩低的学生的sno,cno,score

select sno,cno,score
from sc as a
where score<(
select avg(score)
from sc as b
where a.cno = b.cno)

可以认为是双重for循环

先确定a表一行的cno的值,1

把b表中所有等于这值的cno(相当于选了这个课程)的这些元组中的score求平均值,2

a表中该行的score与score平均值比较,留下符合条件的元组,3

直到a表中的每一行都执行一遍1,2,3,

最后在符合条件的元组中进行外部的查询。

exists的相关子查询

EXISTS

若子查询的结果集有元组(有满足的元组),返回TRUE,外层查询的某一行要被留下,

若子查询的结果集中没有元组(没有满足的元组),返回FALSE,外层查询的某一行要被删除。

NOT EXISTS

若子查询的结果集有元组(有满足的元组),返回FALSE,外层查询的某一行要被删除,

若子查询的结果集中没有元组(没有满足的元组),返回TRUE,外层查询的某一行要被留下。

查询所有选修了‘0202’课程的学生的姓名。

select sname
from student
where exists(
select *
from sc
where student.sno = sc.sno and sc.cno = '0202')
-- 或
select student.sname
from student inner join sc on student.sno = sc.sno
where sc.cno = '0202'
-- 或
select student.sname
from student
where sno in (
select sno
from sc
where cno = '0202')

双循环思想:

先确定student表一行的sno,

有满足子查询的条件的元组,返回TRUE,外层查询的某一行要被留下

没有满足的元组,返回FALSE,外层查询的某一行要被删除

直到确定完所有student表中的元组时,

再对留下的元组进行外部查询。

查询没有选课的student学号、姓名、性别,

use teaching
go
select sno,sname,gender
from student as s
where not exists(
select *
from sc
where s.sno = sc.sno
)

先确定student表一行的sno,

没有满足子查询的条件的元组,返回TRUE,外层查询的某一行要被留下

有满足的元组,返回FALSE,外层查询的某一行要被删除

直到确定完所有student表中的元组时,

再对留下的元组进行外部查询。

查询未选修0101号课程的student学号、姓名、性别

use teaching
go
select sno,sname,gender
from student as s
where not exists(
select *
from sc
where s.sno = sc.sno and sc.cno = '0101')

1.9 集合查询

1. UNION(并)
select_statement
UNION [ALL]
select_statement
[UNION [ALL]
select_statement[...n]]

select_statement:select语句。

ALL不去重,不指定,就去重(默认)

选了‘0101’和‘0202’的课程的学生的名字。

use teaching
go
select sno,sname
from student
where sno in(
select sno
from sc as sc1
where exists(
select *
from sc as sc2
where sc1.sno = sc2.sno and sc1.cno = '0101' and sc2.cno = '0202'))
-- 或
use teaching
go
select sc.sno,student.sname
from student inner join sc on student.sno = sc.sno
where cno = '0101'
UNION
select sc.sno,student.sname
from student inner join sc on student.sno = sc.sno
where cno = '0202'
2. INTERSECT(交)和EXCEPT(差)

自动去重

select_statement
{INTERSECT|EXCEPT}
select_statement

1.10 排序(ORDER BY)

最终的查询结果进行排序默认ASC升序,DESC降序。

ORDER BY不能在子查询中使用。

ORDER BY 多个,先按第一个排,再按第二个排……

1.11 存储查询结果

SELECT select_list INTO new_table_name   ,自动创建一个新表

FROM……

……

2、数据操作中使用SELECT字句

2.1 INSERT中使用SELECT字句

INSERT INTO table_name[(column_list)]
SELECT select_list
FROM table_name
[WHERE condition_expression]

要自己创建表。

创建一个及格的成绩表

use teaching
go
create table 成绩表(
姓名 char(8),
学号 char(4),
成绩 int)
go
insert into 成绩表(姓名,学号,成绩)
select * from sc where score>=60
go
select * from 成绩表

2.2 UPDATE中使用SELECT字句

UPDATE table_name
SET column_name=expression[,...n]
[WHERE condition_expression]

在condition_expression中使用select子句。

2.1 DELETE中使用SELECT字句

DELETE table_name
[WHERE condition_expression]

在condition_expression中使用select子句。

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

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

相关文章

电池均衡系统

一、电池概况 常见的电池分类&#xff1a;铅酸电池、锂电池、钠离子电池、碱性干电池、纽扣电池等&#xff0c;其中钠离子电池暂未大规模商用。 例如&#xff1a;电动车电池电压通常48v、60v、72v等&#xff0c;汽车启动电池电压&#xff1a;12v 而构成高电压的电池&#xf…

Windows系统下载、部署Node.js与npm环境的方法

本文介绍在Windows电脑中&#xff0c;下载、安装并配置Node.js环境与npm包管理工具的方法。 Node.js是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;其允许开发者使用JavaScript编写命令行工具和服务器端脚本。而npm&#xff08;Node Package Manager&#xff09;则…

使用arduino从零做一辆ROS2Jazzy的阿克曼小车---电机驱动篇

本项目采用 Arduino Mega2560 Pro 作为主控开发板&#xff0c;电机驱动器选用 TB6612FNG&#xff0c;并配备了 12V 电源、两个直流减速电机和一个舵机。未来计划通过嘉立创将各模块集成到一个 PCB 板上&#xff0c;提升系统的集成度和稳定性。 本文将聚焦于电机驱动部分&#x…

华为麦芒5(安卓6)termux记录 使用ddns-go,alist

下载0.119bate1 安卓5和6版本,不能换源,其他源似乎都用不了,如果root可以直接用面具模块 https://github.com/termux/termux-app/releases/download/v0.119.0-beta.1/termux-app_v0.119.0-beta.1apt-android-5-github-debug_arm64-v8a.apk 安装ssh(非必要) pkg install open…

图片转成oled使用的字模数据

目录 oled尺寸 如何生成用到的图片 图片转字模 1.首先用Img2Lcd转成bmp单色图片 2.然后用PCtoLCD2002把单色图片转字模 oled尺寸 我使用0.96寸oled模块&#xff0c;对应着的分辨率是128*64&#xff0c;对应着宽高像素比128*64。所以不是随意一张图片就能用的&#xff0c;…

【通信网络】二层基础:03 二层转发基础

1. 二层转发概述 数据链路层&#xff0c;位于OSI模型中的第二层&#xff0c;所以称之为二层。本文我们讨论的转发过程&#xff0c;就是在数据链路层上的转发过程&#xff0c;即二层转发。 1.1 MAC地址 为了唯一的表示一台网络设备&#xff0c;网络设备都有自己的MAC地址。IE…

从0到100:基于Java的大学选修课选课小程序开发笔记(上)

背景 为学生提供便捷的课程选择方式&#xff0c;并帮助学校进行课程管理和资源调配&#xff1b;主要功能包括&#xff1a;课程展示&#xff0c;自主选课&#xff0c;取消选课&#xff0c;后台录入课程&#xff0c;统计每门课程报名情况&#xff0c;导出数据&#xff0c;用户管…

基于Springboot + vue实现的火锅店管理系统

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…

基于Svelte 5的体检查询系统前端设计与实现探究

一、引言 1.1 研究背景与意义 在当今数字化时代&#xff0c;医疗信息化已成为医疗行业发展的重要趋势。随着人们对健康的重视程度不断提高&#xff0c;体检作为预防疾病、保障健康的重要手段&#xff0c;其相关信息的管理和查询需求也日益增长。传统的体检查询系统前端往往存…

科大讯飞在线语音合成(流式版)python版

1、进入自己的项目 复制APPID、APISecret、APIKey 2、添加好听发音人 复制vcn参数 3、需要替换代码部分&#xff1a; 换自己喜欢的发声人的参数 换上自己的APPID、APISecret、APIKey 4、完整代码&#xff1a; # -*- coding:utf-8 -*- import _thread as thread import base…

TCP 为什么采用三次握手和四次挥手以及 TCP 和 UDP 的区别

1. TCP 为什么采用三次握手和四次挥手 采用三次握手的原因&#xff1a; 确认双方的收发能力。第一次握手&#xff0c;客户端发送 SYN 报文&#xff0c;告诉服务器自身具备发送数据的能力&#xff0c;第二次握手&#xff0c;服务器回应 SYN ACK 报文&#xff0c;表名自己既能…

python-Flask:SQLite数据库路径不正确但是成功访问到了数据库,并对表进行了操作

出现了这个问题&#xff0c;就好像是我要去找在南方的人&#xff0c;然后我刚好不分南北&#xff0c;我认为的方向错了&#xff0c;实则方向对了。 在我针对复盘解决&#xff1a;sqlite3.OperationalError: unrecognized token: “{“-CSDN博客这个内容的时候&#xff0c;又出现…

2024-12-29-sklearn学习(25)无监督学习-神经网络模型(无监督) 烟笼寒水月笼沙,夜泊秦淮近酒家。

文章目录 sklearn学习(25) 无监督学习-神经网络模型&#xff08;无监督&#xff09;25.1 限制波尔兹曼机25.1.1 图形模型和参数化25.1.2 伯努利限制玻尔兹曼机25.1.3 随机最大似然学习 sklearn学习(25) 无监督学习-神经网络模型&#xff08;无监督&#xff09; 文章参考网站&a…

Spring ----深入理解AOP(面向切面编程)

给程序做增强 事务是最小的执行单元&#xff0c;转账&#xff0c;同时成功、同时失败 TxUtils类式事务管理类&#xff0c;有6个静态方法&#xff0c;可以直接通过类名来调用&#xff0c;threadlocal线程池&#xff0c;还有一个静态代码块&#xff0c;来加载链接 从数据源中获取…

vue源码分析(十)—— 生命周期

文章目录 前言一、关键方法 callHook二、详细的钩子函数说明1.beforeCreate和create2.beforeMount & mounted注意点组件&#xff08;非根组件&#xff09;的渲染节点&#xff08;1&#xff09;invokeInsertHook函数&#xff08;2&#xff09;insert方法&#xff08;3&#…

docker离线安装及部署各类中间件(x86系统架构)

前言&#xff1a;此文主要针对需要在x86内网服务器搭建系统的情况 一、docker离线安装 1、下载docker镜像 https://download.docker.com/linux/static/stable/x86_64/ 版本&#xff1a;docker-23.0.6.tgz 2、将docker-23.0.6.tgz 文件上传到服务器上面&#xff0c;这里放在…

【WIN11新机/重装系统 把尿级系统设置优化】

目录 一、更改鼠标样式二、更改显示器刷新率三、常规文件存储路径0.存储感知1.保存新内容的地方2.快捷访问的文件路径3.Edge浏览器下载路径 四、通知关闭五、开机自启动关闭六、隐私关闭七、性能优化1.开机优化2.用户账控制关闭 八、关闭Windows自动更新九、任务栏设置十、必装…

7.若依参数设置、通知公告、日志管理

参数设置 对系统中的参数进行动态维护。 关闭验证码校验功能 打开页面注册功能 需要修改前端页面代码 通知公告 促进组织内部信息传递 若依只提供了一个半成品&#xff0c;只实现了管理员可以添加通知公告。 日志管理 追踪用户行为和系统运行状况。 登录日志 和操作日志…

修改网络ip地址方法有哪些?常用的有这四种

在数字时代&#xff0c;IP地址作为网络设备的唯一标识&#xff0c;对于网络连接和通信至关重要。然而&#xff0c;有时候我们可能需要修改设备的IP地址&#xff0c;以满足特定的网络需求或解决网络问题。本文将为您详细介绍几种修改网络IP地址的常用方法&#xff0c;无论是对于…

【Java项目】基于SpringBoot的【外卖点餐系统】

【Java项目】基于SpringBoot的【外卖点餐系统】 技术简介&#xff1a;本系统使用JSP技术&#xff0c;采用B/S架构、Spring Boot框架、MYSQL数据库进行开发设计。 系统简介&#xff1a;管理员&#xff1b;首页、个人中心、用户管理、商家管理、菜品分类管理、骑手管理、系统管理…