SQL复习笔记
SQL结构化查询语言 是一种关系操作的标准语言
包括数据定义、数据操纵、数据查询、数据控制等功能类型的语句
SQL语言的特点:1)一体化 2)使用方式灵活 3)非过程化 4)语言简单易用
SQL数据类型
1)字符串型 Varchar(n)、char(n) 【前者占用更少的内存和硬盘空间,后者检索速度更快】
2)整数型 Int、SmallInt【Int整数范围-32768~32768 SmallInt小整数范围-128~127 】
3)定点数型Numeric(p,d)
4)浮点型Real、Double(n,d)
5)货币型MONEY
6)逻辑型Bit 【只能取0或1,用于表示逻辑"真"和"假"】
7)日期型Date
数据定义SQL语句
1.数据库创造SQL语句
Create Database<数据库名>
2.数据库修改SQL语句
Alter Database <数据库名>Alter log on
3.数据库删除SQL语句
Drop Database <数据库名>
数据库表对象定义
1.数据库表创建SQL语句
Create Table<表名>
(<列名1> <数据类型> [列完整约性束],
<列名2> <数据类型> [列完整约性束],
<列名2> <数据类型> [列完整约性束],
......
);
列约束关键词:Primary key(主键)、Not Null(非空)、Unique(唯一性)、Check(值范围)、Default(默认值)
表约束关键词:表约束定义由多个列构成的符合主键,加入Constraint关键词来标识表约束
Constraint CoursePlan_PK Primary Key(CourseID,TeacherID)
表约束定义代理键:某些情况下可以使用代理键来替代复合主键。
标识列约束关键词为Identity(m,n),其中m为序列值的初始值,n为序列值的增长量值
CoursePlanID int Not Null Identity(1,1)
表约束定义外键:通过表约束Constraint关键词,不但可以定义表的主键,也可以定义表中的外键
2.数据库表修改SQL语句
基本语句格式Alter Table <表名>[改变方式];
1)add方式,用于增加新列或列完整性约束条件
alter table<表名>and<新列名称><数据类型>|[完整性约束];
2)drop方式,用于删除指定列或列的完整性约束条件
alter table<表名>drop column<列名>;
alter table<表名>drop<完整性约束名>;
3)change方式,用于修改列名称及其数据类型
alter table<表名>change<原列名>to<新列名><新列的数据类型>;
4)modify方式,用于修改列的数据类型
alter table<表名>modify<列名><新的数据类型>;
数据索引对象定义
1.索引对象创建SQL语句
create index<表名> on <表名><(列名)>;
若在应用中不允许有重复索引值,则
alter unique index<表名> on<表名><(列名)>;
2.索引对象修改SQL语句
alter index <索引名> on<表名>rename to<新索引名>;
3.索引对象删除SQL语句
drop index<索引名>;
数据操纵SQL语句
数据插入SQL语句
数据插入每执行一个insert into语句 ,就会在表中插入一行数据
insert into <基本表> values (列值表);
insert into STUDENT values('2020983712','小明','男');
insert into STUDENT values('2020983615','小张','女');
数据更新SQL语句
将学生表中,姓名叫小民的学生,生日更改为2000年5月1日,学号更改为001
update STUDENT
set Brithday='2000-05-1',StudentID='001'
where StudentName='小民';
数据删除SQL语句
删除学生信息表STUDENT中,姓名为娜娜的学生数据
delete from STUDENT
where StudentName='娜娜';
数据查询SQL语句
查询语句基本结构
SELECT语句的语法格式
SELECT〈查询列〉
[INTO〈新表名〉]
[FROM〈数据源〉]
[WHERE〈元组条件表达式〉]
[GROUP BY <分组项>] [HAVING <组选择条件>]
[ORDER BY <排序条件>]
[COMPUTE〈统计列组〉] [BY〈表达式〉]
1)select子句:用来指明从数据库表中需要查询的目标列。all关键词是查询默认操作,distinct关键词是用来去掉结果集中的重复数据行。 *可以指代表中的所有列
2)into子句:用来将被查询的结果集数据插入新表
3)from子句:用来指定被查询的数据来自哪个表或者哪些表,若有多表,用逗号隔开
4)where子句:用来给出查询的检索条件
5)group by子句:用来对查询结果进行分组,并进行分组统计等处理。在分组中还可以使用having关键词定义分组结果
6)order by子句:用来对查询结果集进行排序。ASC为升序,DESC为降序。
1.单表查询
从STUDENT表中读取学生的学号,姓名,专业列数据
select StudentID,StudentName,Major
from STUDENT
从STUDENT表中查询所有数据
select * from STUDENT
过滤重复查询结果
select distinct Major
from STUDENT;
从学生表STUDENT中读取专业为“网络空间安全”,性别为“女”的学生数据
select *
from STUDENT
where Major='网络空间安全',gender='女';
从学生表STUDENT中读取专业为“网络空间安全”,性别为“女”的学生的姓名
select StudentName
from STUDENT
where Major='网络空间安全',gender='女';
从学生表STUDENT中查询出生日期在“2000-1-1”到“2001-1-1”的学生数据
使用between and语句
select *
from STUDENT
where Birthday between '2000-01-01' and '2001-01-01';
使用运算符
select *
from STUDENT
where Birthday >='2000-01-01' and <='2001-01-01';
通配符:用于代表字符串数据模式中的未知字符,在查询条件使用
**常用通配符有 ‘_’(下划线) 和 ‘%’(百分号) **
下划线代表一个未指定的字符,百分号代表一个或者多个未指定的字符
从STUDENT表中查询姓刘的学生数据
select *
from STUDENT
where StudentName like '刘_';
从STUDENT表中查询邮箱域名不为“@qq.com”的学生数据
select *
from STUDENT
where Email not like '%@qq.com';
查询结果排序
对学生表,若按照出生日期降序排列学生
order by 排序
select *
from STUDENT
order by Brithday DESC
(升序使用ASC,降序使用DESC)
IN和NOT IN语句
查询软件系、计科系和通信系学生的姓名和性别
select StudentName,Gender from STUDNET
where Major in('软件','计科','通信')
可改写
select StudentName,Gender from STUDNET
where Major ='软件' or Major='计科' or Major='通信'
查询既不是软件系、计科系和通信系的学生的姓名和性别
selet StudentName,Gender from STUDENT
where Major not in ('软件','计科','通信')
涉及空值的查询
谓词 IS NULL 或 IS NOT NULL
某些学生选修课程后没有参加考试,所以有选课记录,无考试成绩。查询缺少成绩的学生的学号和相应的课程号
select 学号,课程 from 选课
where 成绩 is null
统计函数
计数
count(*) count(<列名>)
对学生表STUDENT,若要统计表中学生人数,并使用AS对计算结果命名一个列名
select count(*) AS 学生人数
from STUDENT;
计算总和
sum(<列名>)
计算平均值
avg(<列名>)
从学生表中性别为女的学生中查找年龄是平均年龄的女生姓名
select 姓名,avg(年龄) AS 平均年龄
from 学生表 where 性别 ='女';
最大最小值
max(<列名>) min(<列名>)
从学生表中找出年龄最大和年龄最小的学生的出生日期
selct min(birthday) as 最大年龄,max(birthday) as 最小年龄
from STUDENT;
查询结果分组处理
通过group by实现,having子句限定分组数据
若要分专业统计STUDENT表中的学生人数·
select Major as 专业,count(StudentID) as 学生人数
from STUDENT
group by Major;
若要分专业统计STUDENT表中的男生人数,但限定只显示人数大于2 的人数
select Major as 专业,count(StudentID) as 学生人数
from STUDENT
where StudentGender='男'
group by Major
having count(*)>2;
使用子查询处理多表
select 字段1,字段2....from 表名1
where 公共字段 in (select 公共字段 from 表名2 where 条件语句)
2.连接查询
同时涉及多个表的查询
关联表TEACHER和COLLEGE,查询学院名称,教师人数,输出按名字降序排列
select COLLEGE.CollegeName AS 学院名称,COUNT(TEACHER.CollegeID) AS 教师人数
from COLLEGE,TEACHER
where COLLEGE.CollegeID= TEACHER.CollegeID
group by COLLEGE.CollegeName
order by COLLEGE.CollegeName DESC;
JOIN ON 连接
关联表TEACHER(A和COLLEGE(B,查询学院名称,教师编号,教师姓名,教师性别,职称等信息,按学院名称,教师编号分别排序输出。
select B.CollegeName AS 学院名称,A.TeacherID AS 编号,A.Teacher AS 姓名,A.Gender AS性别 ,A.TeacherTitle AS 职称
from TEACHER AS A JOIN COLLEGE AS B ON A.CollegeID =B.CollegeID
order by B.CollegeName ,A.TeacherID;
三表
select <目标列1>[,<目标列2>...]
from <表名1> join <表名2> on <连接条件1> join <表名3> on <连接条件2>;
3.嵌套查询
一个select-from-where语句称为一个查询块
将一个查询块嵌套在另外一查询块的where子句或having短语的条件中的查询成为嵌套查询
select姓名 from 学生 where 学号 in
(select 学号 from 选课 where 课程号=‘C2’);
子查询不能使用order by子句
带有IN谓词的子查询
查询选修了课程名位“数据结构”的学生学号和姓名
嵌套查询
select 学号,姓名
from 学生
where 课程号 in
(select 课程号
from 课程
where 课程名=‘数据结构’)
)
使用连接查询
select 学号,姓名
from 学生,选课,课程
where 学生.学号=选课.学号
AND 选课.课程号=课程.课程
AND 课程.课程名=‘数据结构’
带有比较运算符的子查询
当能确切知道内层查询返回单值时,可用比较运算符(>,<,=,>=,<=,!=或< >)。
与ANY或ALL谓词配合使用
select 学号,姓名
from学生
where 所在系 =
(select 所在系
from 学生
where 名字=‘张三’)
带有ANY或ALL谓词
ANY任意一个值
ALL所有值
查询其他系中比软件系某一学生年龄小的学生姓名和年龄
selct StudentName ,Age
From STUDENT
where Age <ANY(select Age from STUDENT where Major='软件')
And Major <>'软件';
带有EXISTS谓词的子查询
带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”
查询所有选修了C1号课程的学生姓名。
select 姓名
from 学生
where exists
(select * from 选课 where 学号=学生.学号
and 课程号 =‘C1’)
本文是SQL复习笔记,详细介绍了SQL语言的特点,如一体化、使用灵活、非过程化和简单易用。内容涵盖SQL数据类型,如字符串、整数、定点数、浮点数、货币和逻辑型。还讲解了数据定义、数据操纵和数据查询的SQL语句,包括表的创建、修改、删除,以及数据的插入、更新、删除和查询。此外,还涉及了索引对象的定义以及单表查询、连接查询和嵌套查询的应用。
417

被折叠的 条评论
为什么被折叠?



