SQL复习笔记

本文是SQL复习笔记,详细介绍了SQL语言的特点,如一体化、使用灵活、非过程化和简单易用。内容涵盖SQL数据类型,如字符串、整数、定点数、浮点数、货币和逻辑型。还讲解了数据定义、数据操纵和数据查询的SQL语句,包括表的创建、修改、删除,以及数据的插入、更新、删除和查询。此外,还涉及了索引对象的定义以及单表查询、连接查询和嵌套查询的应用。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值