关系代数与单表查询
查看表的结构(基本信息)
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
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 [22软1学生信息表] FROM 学生 WHERE 专业班级='22软件本科1班'
--因为数字开头 所以要加[]
SELECT * FROM [22软1学生信息表]
查询生成一张女生信息表 显示学号 姓名 出生日期
SELECT 学号,姓名,出生日期 INTO 女生信息表 FROM 学生 WHERE 性别='女'
SELECT * FROM 女生信息表
注意:
当选择列表select_list中包括计算列时
新表中的相应列不再是计算列
其类型由其值的格式来确定
(失去计算功能的意思)
mysql中
把查询结果复制成一张表存储 create table emp as select * from emp;
还可以把查询结果插入在一个表当中
insert into table_1 select * from dept
insert into 表名
后接查询语句
要注意的就是字段条数要匹配
⬅️ 09-数据修改(改) 🏠 00-数据库 ➡️ 11-聚合查询
💬 评论