关系代数与单表查询

查看表的结构(基本信息)

EXEC sp_help 教师

关系代数

关系操作

关系的查询操作: 关系的更新操作:

选择(Select) 插入(Insert)

投影(Project) 删除(Delete)

连接(Join) 修改(Update)

除(Divide)

并(Union)

交(Intersection)

差(Difference)

广义笛卡尔积(Extended Cartesian product)

关系运算

传统的集合运算(并、交、差、笛卡尔积)

专门的关系运算(投影、选择、联接、除)

基本运算(并、差、笛卡尔积、投影、选择)五种

辅助运算符

算术运算符:+、-、×、÷。

比较运算符:>、≥、<、≤、=、≠。

逻辑运算符:¬(逻辑非)、∧(逻辑与)、∨(逻辑或)。

包含运算符:∈(属于)

单表查询

基本查询

查询表内全部信息
SELECT * FROM 表名

如:SELECT * FROM 学院

查询表内某些特定的列
SELECT 列名,列名…… FROM 表名

如:SELECT 学院名称, 学院电话 FROM 学院

查询并去掉重复行

DISTINCT 只能出现在第一个字段前(解释在语句顺序分析)

SELECT DISTINCT 列名(,列名……) FROM 表名 select 1,distinct 2 是不对的

如:SELECT DISTINCT 职称 FROM 教师 distinct 1,2,3 表示对3字段的整体去重

查询 将结果截取一部分显示、重命名列显示
LEFT 截取字符串中左边的字符

RIGHT 截取字符串中右边的字符

TRIM 去除字符串中的空字符

LTRIM 去除字符串中左边的空字符

RTRIM 去除字符串中右边的空字符

AS又出现了 上次是用于建表时候的自动求和 这里是作为重命名功能

查询 从学院表中提取所有学院的名称、电话组成一个学院电话表

SELECT 学院名称,RIGHT(LTRIM(RTRIM(学院电话)),8) AS 教务办电话 FROM 学院

条件查询

WHERE

ALL 满足所有值的记录

ANY 、 SOME 满足任意一个值的记录

BETWEEN……AND……包括俩端值 BETWEEN 0(小) AND 90(大) >=0 and <=90

EXISTS 存在 判断是否为空

IN IN('男','女')

LIKE 一般与通配符一起使用 %代表多个字符 _代表单个字符 []范围内 [^}不在范围内

比如 查询

姓名第二个字为‘阳’的学生记录

SELECT * FROM 学生 WHERE 姓名 LIKE'_阳%'

IS 判断空值 不能用=NULL 需要用 IS NULL IS NOT NULL

image-8854ed40
AND

找到满足学分小于3 的必修课程 并展示 课程名称 学分数 学时数 三列

SELECT 课程名称,学分数,学时数 FROM 课程

WHERE 学分数<3 AND 课程性质='必修'
BETWEEN AND

找到学时数在40到60的课程 并展示课程名称,学时数 俩列

SELECT 课程名称,学时数 FROM 课程 WHERE 学时数 BETWEEN 40 AND 60
LIKE(模糊查询)与LEFT

like 和 left 有时可以通用

SELECT * FROM 教师 WHERE 籍贯 LIKE '四川%'

SELECT * FROM 教师 WHERE LEFT(籍贯,2)='四川'
--查找江西籍的男教师信息

SELECT * FROM 教师 WHERE 籍贯 like '江西%' AND 性别='男'

--等同于

SELECT * FROM 教师 WHERE left(籍贯,2)= '江西' AND 性别='男'
OR与IN

查找教师表(刘星、徐丹丹老师的信息 显示教师编号 姓名 籍贯 所属学院)

SELECT 编号,姓名,籍贯,所属学院 FROM 教师 WHERE 姓名='刘星' OR 姓名='徐丹丹'
--等同于

SELECT 编号,姓名,籍贯,所属学院 FROM 教师 WHERE 姓名 IN ('刘星','徐丹丹')
IS

查询空值

SELECT * FROM 教师 WHERE 密码 IS NULL

空值的判断只能用IS NULL 不能=NULL

SELECT * FROM 教师 WHERE 密码 = NULL     --这样查不到
AND 与 OR

具有优先级 and优先级大于or

查询籍贯为山东 江苏 重庆 的女生信息

SELECT * FROM 学生 WHERE 性别='女' AND 籍贯 LIKE '山东%' OR 籍贯 LIKE '江苏%' OR 籍贯
LIKE '重庆%'
SELECT * FROM 学生 WHERE 性别='女' AND LEFT(籍贯,2)='山东' OR LEFT(籍贯,2)='江苏' OR
LEFT(籍贯,2)='重庆'

生成表查询

SELECT 列名(,列名……)INTO 新表名

查询生成22软1的学生信息表 显示学号 姓名 出生日期

SELECT 学号,姓名,出生日期 into [221学生信息表] FROM 学生 WHERE 专业班级='22软件本科1班'

--因为数字开头 所以要加[]

SELECT * FROM [221学生信息表]

查询生成一张女生信息表 显示学号 姓名 出生日期

SELECT 学号,姓名,出生日期 INTO 女生信息表 FROM 学生 WHERE 性别='女'

SELECT * FROM 女生信息表

注意:

当选择列表select_list中包括计算列时

新表中的相应列不再是计算列

其类型由其值的格式来确定

(失去计算功能的意思)

mysql中

把查询结果复制成一张表存储 create table emp as select * from emp;

image-ad1ac012

还可以把查询结果插入在一个表当中

insert into table_1 select * from dept

insert into 表名

后接查询语句

要注意的就是字段条数要匹配


⬅️ 09-数据修改(改) 🏠 00-数据库 ➡️ 11-聚合查询