数据库技术与应用 数据操作 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.限制条件
数据库技术与应用 数据操作 MMSQL 学习笔记5_第1张图片

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 涉及空值的查询

数据库技术与应用 数据操作 MMSQL 学习笔记5_第2张图片

--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

数据库技术与应用 数据操作 MMSQL 学习笔记5_第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);
--对成绩进行排序。
select *from 成绩表
order by 成绩 desc

在这里插入图片描述

5.1.5 子查询

数据库技术与应用 数据操作 MMSQL 学习笔记5_第4张图片

5.1.5.1 嵌套子查询

数据库技术与应用 数据操作 MMSQL 学习笔记5_第5张图片
1.确定表,2.看两个表有没有关联信息3.开始嵌套数据库技术与应用 数据操作 MMSQL 学习笔记5_第6张图片
数据库技术与应用 数据操作 MMSQL 学习笔记5_第7张图片

--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 相关子查询

数据库技术与应用 数据操作 MMSQL 学习笔记5_第8张图片
数据库技术与应用 数据操作 MMSQL 学习笔记5_第9张图片
数据库技术与应用 数据操作 MMSQL 学习笔记5_第10张图片

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

5.1.6 表连接

5.1.6.1 内部连接

数据库技术与应用 数据操作 MMSQL 学习笔记5_第11张图片
数据库技术与应用 数据操作 MMSQL 学习笔记5_第12张图片

5.1.6.1.1 where

数据库技术与应用 数据操作 MMSQL 学习笔记5_第13张图片
数据库技术与应用 数据操作 MMSQL 学习笔记5_第14张图片数据库技术与应用 数据操作 MMSQL 学习笔记5_第15张图片

--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 成绩表.学号=学生表.学号

数据库技术与应用 数据操作 MMSQL 学习笔记5_第16张图片
数据库技术与应用 数据操作 MMSQL 学习笔记5_第17张图片

5.1.6.1.2 inner join 链接

在这里插入图片描述
数据库技术与应用 数据操作 MMSQL 学习笔记5_第18张图片
数据库技术与应用 数据操作 MMSQL 学习笔记5_第19张图片
数据库技术与应用 数据操作 MMSQL 学习笔记5_第20张图片

5.1.6.2 外部连接

数据库技术与应用 数据操作 MMSQL 学习笔记5_第21张图片
在这里插入图片描述

5.1.6.2.1 左外部连接

在这里插入图片描述
数据库技术与应用 数据操作 MMSQL 学习笔记5_第22张图片

5.1.6.2.2 右外部连接

在这里插入图片描述
数据库技术与应用 数据操作 MMSQL 学习笔记5_第23张图片

5.1.6.2.3 完全连接

在这里插入图片描述
数据库技术与应用 数据操作 MMSQL 学习笔记5_第24张图片

5.1.7 在查询基础上创建新表

数据库技术与应用 数据操作 MMSQL 学习笔记5_第25张图片

5.2 添加数据

5.2.1 使用SQL Sever Management Studio 添加数据

在这里插入图片描述

5.2.2 使用T-SQL添加数据

5.2.2.1 使用INSERT和VALUES插入行

在这里插入图片描述
在这里插入图片描述
数据库技术与应用 数据操作 MMSQL 学习笔记5_第26张图片
数据库技术与应用 数据操作 MMSQL 学习笔记5_第27张图片

5.2.2.2 使用INSERT和SELECT插入行

数据库技术与应用 数据操作 MMSQL 学习笔记5_第28张图片数据库技术与应用 数据操作 MMSQL 学习笔记5_第29张图片
数据库技术与应用 数据操作 MMSQL 学习笔记5_第30张图片
数据库技术与应用 数据操作 MMSQL 学习笔记5_第31张图片

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语句修改表中数据的语法形式为:
数据库技术与应用 数据操作 MMSQL 学习笔记5_第32张图片
数据库技术与应用 数据操作 MMSQL 学习笔记5_第33张图片
数据库技术与应用 数据操作 MMSQL 学习笔记5_第34张图片
数据库技术与应用 数据操作 MMSQL 学习笔记5_第35张图片
数据库技术与应用 数据操作 MMSQL 学习笔记5_第36张图片
数据库技术与应用 数据操作 MMSQL 学习笔记5_第37张图片

5.4 删除数据

5.4.1 使用SQL Sever Management Studio 修改数据

数据库技术与应用 数据操作 MMSQL 学习笔记5_第38张图片

5.4.2 使用Delete语句删除数据

数据库技术与应用 数据操作 MMSQL 学习笔记5_第39张图片
数据库技术与应用 数据操作 MMSQL 学习笔记5_第40张图片
数据库技术与应用 数据操作 MMSQL 学习笔记5_第41张图片
数据库技术与应用 数据操作 MMSQL 学习笔记5_第42张图片

看完不点赞,快乐少一半

你可能感兴趣的:(数据库技术与应用,数据库,sql)