数据库技术与应用 数据操作 MMSQL 学习笔记5

5.1 查询数据

所谓查询,就是对已经存在于数据库中的数据按特点的组合、条件或次序进行检索。查询功能是数据库最基本也是最重要的功能。

5.1.1 SELECT语句

SELECT select_list
[INTO new_table_name]
FROM table_list
[WHERE search_conditions]
[GROUP BY group_by_list]
[HAVING search_conditions]
[ORDER By order_list[ASC|DESC]]
--example
从学生表里面查看部分学生信息
SELECT 学号,姓名,籍贯
FROM 学生信息
从学生表里面查看全部学生信息
SELECT *
FROM 学生信息

注意:此时*代表所有的属性

5.1.1.1 DISTINCT关键字

如果用户希望在查询返回结果中删除重复行,就可以在SELECT子句中使用DISTINCT关键字,也是一种聚合函数。

SELECT DISTINCT select_list
FROM table_name
--example
从学生表里面查看学生都来自什么地方
SELECT DISTINCT 籍贯
FROM 学生信息

DISTINCT去除重复只能针对某一列。

5.1.1.2 TOP关键字

TOP语句用于规定要返回的记录的数目的语法

SELECT TOP n [PERCENT] * FROM table_name
--example
从学生表里面查询前100名不重复的学生姓名。
SELECT DISTINCT TOP 100 姓名
FROM 学生信息

5.1.1.3 别名

可使用别名的方法根据需要对数据显示的标题进行修改

1. SELECT select_list 'new_name',··· FROM  table_name
2. SELECT 'new_name'=select_list,··· FROM  table_name
3. SELECT select_list as 'new_name',··· FROM  table_name
--example
使用'NO'替换学号,'Name'替换姓名.'Sex'替换性别.
1. SELECT 学号 'NO',姓名 'Name',性别 'Sex' FROM  学生信息
2. SELECT 'NO'=学号,'Name'=姓名,'Sex'=性别 FROM  学生信息
3. SELECT 学号 as 'NO',姓名 as 'Name',性别 as 'Sex' FROM  学生信息

5.1.1.4 计算列

在进行数据查询时,经常需要对查询到的数据进行再次计算。

SELECT 属性1,属性2,'调整前属性'=属性3,'调整后属性'=属性3+运算符。
FROM table_name
--example
从学生表中输出学号,姓名,成绩,成绩-10
SELECT 学号,姓名,'调整前成绩'=成绩,'调整后成绩'=成绩-10FROM 学生信息

5.1.2 选择查询

一般查询都不是针对全表所有行的查询,只是从整个表中选出满足制定条件的内容,这就要用到WHERE子句。
1.先确定表
2.确定要查询那些列
3.限制条件
在这里插入图片描述

SELECT select_list
FROM table_list
WHERE search_conditions

其中,search_conditions为选择查询结果的条件。SQL Server支持比较、逻辑、范围、列表、字符串匹配选择方法。

5.1.2.1 比较搜索条件

比较运算符包括:

>(大于)、<(小于)、=(等于)、>=(大于等于)、<=(小于等于)、!=(不等于)、!>(不大于)、!<(不小于),其中!=、!>、!<不是ANSI标准的运算符

--example
--1.查询籍贯是beijing的学生有那些?--比较
SELECT *
FROM 学生信息
WHERE 籍贯=‘beijing’
--2.查询籍贯是beijing,男学生有那些?--逻辑and 和 or
SELECT *
FROM 学生信息
WHERE 籍贯=‘beijing’ and 性别=‘男’

5.1.2.2 范围搜索条件

范围搜索返回介于两个指定值之间的所有值,可分为包括范围和排他范围两个类型。用BETWEEN和NOTBETWEEN

--3.查询成绩在(不在)70-80之间学生有那些?
SELECT *
FROM 学生信息
WHERE 成绩 BETWEEN 70 AND 80  --在
WHERE 成绩 NOT BETWEEN 70 AND 80 --不在

5.1.2.3 列表搜索条件

IN关键字使用户可以选择与列表中的任意值匹配的行

--4.查询成绩为60和100学生有那些?
SELECT *
FROM 学生信息
WHERE 成绩 IN(60,100)

5.1.2.4 搜索条件中的字符匹配符

like关键字搜索与制定模式匹配的字符串、日期或时间值。模式包含要搜索的字符串,字符串中可包含4中通配符的任意组合。

通配符描述
%替代一个或多个字符
_仅替代一个字符
[charlist]字符列中的任何单一字符,也可以范围[a-d]或者[abcd]
[^charlist]不在字符列中的任何单一字符也可以范围[^a-d] 或者[^abcd]
--5.查询姓名中包括的学生有那些?
SELECT *
FROM 学生信息
WHERE 姓名 like '王%'
--6.查询姓名中包含大或小的学生有那些?
SELECT *
FROM 学生信息
WHERE 姓名 like '%[大小]%'
--7.查询姓名中不包含猪或狗的学生有那些?
SELECT *
FROM 学生信息
WHERE 姓名 like '%[^猪狗]%'

5.1.2.5 涉及空值的查询

在这里插入图片描述

--8.查询没有参加考试的学生有那些?
SELECT *
FROM 学生信息
WHERE 成绩 is null

5.1.3 聚合函数

聚合函数对一组值执行计算,并返回单个值。
聚合函数有什么特点?
1.除了 COUNT 以外,聚合函数忽略空值。
2.聚合函数经常与 SELECT 语句的 GROUP BY 子句一同使用。
3.所有聚合函数都具有确定性。任何时候用一组给定的输入值调用它们时,都返回相同的值。
4.标量函数:只能对单个的数字或值进行计算。主要包括字符函数、日期/时间函数、数值函数和转换函数这四类。
T-SQL提供很多聚合函数,以下对部分讲解。

1、求总和,总分等:sum() --必须为数字列

--example
1.求某个班级总分
select Sum(成绩) as '总成绩' from 学生信息

2、求某一列平均数 :avg()

--example
2.求某个班平均成绩 ?
select avg(成绩) as '平均分' from 学生信息

3、最高分

--example
3.求某个班最高分?
select max(成绩) as '最高分' from 学生信息

4、最低分

--example
4.求某个班最低分?
select min(成绩) as '最低分' from 学生信息

5、求个数/记录数/项目数等:count()

--example
5.总人数?
select count(*) as '总人数' from 学生信息
6.有成绩的总人数
select count(成绩) as '总人数' from 学生信息 where 成绩 is not null

5.1.4 数据分组

5.1.4.1 GROUP BY

GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。

语法格式
SELECT column_name,aggregate_function(column_name)
FROM table_name GROUP BY  column_name
--example
1.查询每个年级的总人数和班级数量
SELECT 年级,
SUM(学号) as '总人数',
count(DISTINCT 班级名称) as '班级数量',
FROM 学生信息表
GROUP BY  年级
--example
create table 成绩表
(
	学号 int primary key identity(1801305351,1),
	课程编号 varchar(8) not null,
	成绩 int
)
insert into 成绩表(课程编号,成绩) values ('1000',100);
insert into 成绩表 values ('1000',88);
insert into 成绩表 values ('1000',55);
insert into 成绩表 values ('1001',55);
insert into 成绩表 values ('1002',55);
insert into 成绩表 values ('1000',35);
insert into 成绩表 values ('1000',5);
insert into 成绩表 values ('1002',55);
insert into 成绩表 values ('1002',95);
insert into 成绩表 values ('1001',85);
insert into 成绩表 values ('1001',15);
--查询每门课的最高分和最低分
select 课程编号,
MAX(成绩) as '最高分',
MIN(成绩) as '最低分'
from 成绩表
group by 课程编号

5.1.4.2 HAVING

having通常与group by子句一起使用。相当一个用于组的where子句,制定组的搜索条件。having子句可以包含聚合函数,但where不可以。

--example
create table 成绩表
(
	学号 int primary key identity(1801305351,1),
	课程编号 varchar(8) not null,
	成绩 int
)
insert into 成绩表(课程编号,成绩) values ('1000',100);
insert into 成绩表 values ('1000',88);
insert into 成绩表 values ('1000',55);
insert into 成绩表 values ('1001',55);
insert into 成绩表 values ('1002',55);
insert into 成绩表 values ('1000',35);
insert into 成绩表 values ('1000',5);
insert into 成绩表 values ('1002',55);
insert into 成绩表 values ('1002',95);
insert into 成绩表 values ('1001',85);
insert into 成绩表 values ('1001',15);
--查询每门课总分少于250分的课程。
select 课程编号,
sum(成绩) as '总分'
from 成绩表
group by 课程编号
having sum(成绩)<250

5.1.4.3 ORDER BY

在这里插入图片描述

--example
create table 成绩表
(
	学号 int primary key identity(1801305351,1),
	课程编号 varchar(8) not null,
	成绩 int
)
insert into 成绩表(课程编号,成绩) values ('1000',100);
insert into 成绩表 values ('1000',88);
insert into 成绩表 values ('1000',55);
insert into 成绩表 values ('1001',55);
insert into 成绩表 values ('1002',55);
insert into 成绩表 values ('1000',35);
insert into 成绩表 values ('1000',5);
insert into 成绩表 values ('1002',55);
insert into 成绩表 values ('1002',95);
insert into 成绩表 values ('1001',85);
insert into 成绩表 values ('1001',15);
--对成绩进行排序。
select *from 成绩表
order by 成绩 desc

在这里插入图片描述

5.1.5 子查询

在这里插入图片描述

5.1.5.1 嵌套子查询

在这里插入图片描述
1.确定表,2.看两个表有没有关联信息3.开始嵌套在这里插入图片描述
在这里插入图片描述

--example
create table 成绩表
(
	学号 int primary key identity(1801305351,1),
	课程编号 varchar(8) not null,
	成绩 int
)
insert into 成绩表(课程编号,成绩) values ('1000',100);
insert into 成绩表 values ('1000',88);
insert into 成绩表 values ('1000',55);
insert into 成绩表 values ('1001',55);
insert into 成绩表 values ('1002',55);
insert into 成绩表 values ('1000',35);
insert into 成绩表 values ('1000',5);
insert into 成绩表 values ('1002',55);
insert into 成绩表 values ('1002',95);
insert into 成绩表 values ('1001',85);
insert into 成绩表 values ('1001',15);
--对课程为1000并且成绩高于平均分的进行筛选。
select * from 成绩表
select 学号,成绩
from 成绩表
where 课程编号=1000 and  成绩>(select AVG(成绩)from 成绩表 where 课程编号=1000)

5.1.5.2 相关子查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入代码片
--example
--查询课程为1000的学生的姓名,学号,成绩。
--用到学生表和成绩表
select 学生表.姓名,学生表.学号,成绩表.成绩 from  学生表,成绩表
where 学生表.学号=成绩表.学号 and 学生表.学号 in
(select 成绩表.学号 from 成绩表 where 课程编号=1000)

5.1.6 表连接

5.1.6.1 内部连接

在这里插入图片描述
在这里插入图片描述

5.1.6.1.1 where

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

--example
create table 成绩表
(
	学号 int primary key identity(1801305351,1),
	课程编号 varchar(8) not null,
	成绩 int
)
insert into 成绩表(课程编号,成绩) values ('1000',100);
insert into 成绩表 values ('1000',88);
insert into 成绩表 values ('1000',55);
insert into 成绩表 values ('1001',55);
insert into 成绩表 values ('1002',55);
insert into 成绩表 values ('1000',35);
insert into 成绩表 values ('1000',5);
insert into 成绩表 values ('1002',55);
insert into 成绩表 values ('1002',95);
insert into 成绩表 values ('1001',85);
insert into 成绩表 values ('1001',15);
CREATE TABLE 学生表(
	学号 int IDENTITY(1801305351,2) NOT NULL,
	姓名 varchar(8)  NOT NULL,
	性别 varchar(8)  NOT NULL,
	地址 varchar(8)  NOT NULL
	)
insert 学生表(学号,姓名,性别,地址) values(	1801305351	,	'小猪'	,	'男'	,	'上海'	)
insert 学生表(学号,姓名,性别,地址) values(	1801305353	,	'小狗'	,	'女'	,	'深圳'	)
insert 学生表(学号,姓名,性别,地址) values(	1801305355	,	'小1'	,	'女'	,	'武汉'	)
insert 学生表(学号,姓名,性别,地址) values(	1801305357	,	'小2'	,	'女'	,	'背景'	)
insert 学生表(学号,姓名,性别,地址) values(	1801305359	,	'小3'	,	'女'	,	'北京'	)
insert 学生表(学号,姓名,性别,地址) values(	1801305361	,	'小4'	,	'女'	,	'杭州'	)
insert 学生表(学号,姓名,性别,地址) values(	1801305363	,	'小5'	,	'女'	,	'地域'	)
insert 学生表(学号,姓名,性别,地址) values(	1801305365	,	'小6'	,	'女'	,	'黑屏'	)
insert 学生表(学号,姓名,性别,地址) values(	1801305367	,	'小7'	,	'女'	,	'按时'	)
insert 学生表(学号,姓名,性别,地址) values(	1801305369	,	'小8'	,	'女'	,	'奇怪'	)
insert 学生表(学号,姓名,性别,地址) values(	1801305371	,	'小9'	,	'女'	,	'深圳'	)
--1.多表数据 学号,姓名,课程标号,成绩。
select 学生表.学号,学生表.姓名,成绩表.课程编号,成绩表.成绩
from 成绩表 inner join 学生表
on 成绩表.学号=学生表.学号

在这里插入图片描述
在这里插入图片描述

5.1.6.1.2 inner join 链接

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.1.6.2 外部连接

在这里插入图片描述
在这里插入图片描述

5.1.6.2.1 左外部连接

在这里插入图片描述
在这里插入图片描述

5.1.6.2.2 右外部连接

在这里插入图片描述
在这里插入图片描述

5.1.6.2.3 完全连接

在这里插入图片描述
在这里插入图片描述

5.1.7 在查询基础上创建新表

在这里插入图片描述

5.2 添加数据

5.2.1 使用SQL Sever Management Studio 添加数据

在这里插入图片描述

5.2.2 使用T-SQL添加数据

5.2.2.1 使用INSERT和VALUES插入行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2.2.2 使用INSERT和SELECT插入行

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

create table 成绩表2
(
学号 varchar(15),
课程编号 varchar(2),
成绩 int
)
insert into 成绩表2
select 学号,课程编号,成绩 from 成绩表
where 成绩>70 and 课程编号='1003'

5.3 修改数据

5.3.1 使用SQL Sever Management Studio 修改数据

在这里插入图片描述

5.3.1 使用UPDATE语句修改数据

使用UPDATE语句修改表中数据的语法形式为:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.4 删除数据

5.4.1 使用SQL Sever Management Studio 修改数据

在这里插入图片描述

5.4.2 使用Delete语句删除数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

看完不点赞,快乐少一半

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猪宝宝哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值