数据库系统理论——关系数据库标准语言SQL


前言:本章正式学习sql语言的语法,学习完本章之后,要能够对基本表进行增删改查,定义视图。

一、数据定义

1、基本表的定义、删除与修改

在这里插入图片描述
在这里插入图片描述
这里需要注意的是列级完整型约束条件与表级完整性约束。
看几个例子:
1、建立student基本表

CREATE TABLE STUDENT
(
SNO CHAR(9) PRIMARY KEY,   //这里是列级完整性约束,说明sno是主码
SNAME CHAR(20) UNIQUE,  //表示SNAME是唯一值
SSEX CHAR(2),
SAGE SMALLINT,
SDEPT CHAR(20)
);

2、建立课程表

CREATE TABLE COURSE
(
CNO CHAR(4) PRIMARY KEY,
CNAME CHAR(40) NOT NULL,
CPNO CHAR(4), 
CCREDIT SMALLINT,
FOREIGN KEY(CPNO) REFERENCES COUESE(CNO)
/*表级完整性约束,CPNO是外码,被参照表是course,被参照列是cno*/ 
);

本例子说明参照表与被参照表可以是一样的。
3、建立学生选课表

CREATE TABLE SC
(
SNO CHAR(10),
CON CHAR(4),
GRADE SMALLINT,
PRIMARY KEY (SNO,CNO),/*主码是由属性组构成,两个属性共同构成主码*/
FOREIGN KEY (SNO) REFERENCES STUDENT(SNO), 
/*sno为外码,student为被参照表*/
FOREIGN KEY (CNO) REFERENCES COURSE (CNO),
/*cno为外码,course是被参照表*/
CHECK(GRADE BETWEEN 0 AND 100)
);

基本表的修改:
定义格式:
在这里插入图片描述
(1)增加基本表的属性

/*ALTER TABLE (表名) ADD (属性名) (属性类型);*/
ALTER TABLE STU ADD BIRTHDAY DATE;

(2)修改基本表某些属性类型

/*ALTER TABLE (表名) ALTER COLUMN (属性名) (属性类型);*/
ALTER TABLE STU ALTER COLUMN SNO INT;

(3)增加基本表某些属性约束条件

/*ALTER TABLE (属性名) ADD (约束条件)(属性名)*/
ALTER TABLE STU ADD UNIQUE(SNO);

基本的删除

DROP TABLE <表名> [RESTRICT|CASCADE];
/*
当用restrict时,视图不会一起删除
当用cascade时,视图会一起被删除
*/

2、索引的建立于删除(了解)

索引是内模式的范畴,而基本表是模式(逻辑模式,概念模式),视图时外模式或子模式的范畴。
书上p88;

二、数据查询(会其中一种)

在这里插入图片描述

1、单表查询

在这里插入图片描述
说明:别名起在原属性后面;
在这里插入图片描述

(1)这里出现重复元组,怎么处理??

SELECT DISTINCT SNO FROM SC;
/*这里在sno属性前面加上了约束项,distinct即为去重重复元组,否则就默认all,显示所有*/

在这里插入图片描述

(2)between。。。。and

在这里插入图片描述
注意:这里查询的where语句,不要和基本表的定义中的cheak()子句搞混!!!
如果要查找不在20~23岁的学生,则按照下面写:

SELECT SNAME,SDEPT,SAGE
FROM STUDENT
WHERE SAGE NOT BETWEEN 20 AND 23;

在前面加上not即可;

(3)语法IN

在这里插入图片描述

SELECT SNAME,SSEX
FROM STUDENT
WHERE SDEPT IN('CS','MA','IS');
/*
要是这里题目是不在这些系里面的学生,只需要把最后一个where子句改了即可
WHERE SDEPT NOT IN('CS','MA','IS');
*/

(4) 拓展

这里说一下,有两个语句的区别,效率哪一高,大家判断一下?

SELECT *
FROM STU;

SELECT SNAME,SAGE
FROM STU;

这里我们认为时第二种效率高一些,无需知道原因,了解即可!

(5)字符

like
/*like与“=”是一样的作用*/
SELECT *
FROM STU
WHERE SNO='21230202';
WHERE SNO LIKE '21230202';

姓氏 % _ p95

(6)关于空值的讨论

在这里插入图片描述

(7)多重查询

在这里插入图片描述

SELECT SNAM
FROM STUDENT
WHERE SDEPT='CS' AND SAGE<20;

在这里插入图片描述
在这里插入图片描述
解释:这里用的是“or”,是指,“或者”的意思,三个系别的学生全部投影出来!

(8) order by子句

在这里插入图片描述
在这里插入图片描述

SELECT SNO,GRADE
FROM SC
WHERE CNO=3ORDER BY GRADE DESC;/*降序:desc,升序:asc,这里升序可不写,因为默认就是升序*/

在这里插入图片描述
在这里插入图片描述

SELECT *
FROM STUDENT
ORDER BY SDEPT,SAGE DESC;
/*
说明:这里出现sdept是升序,sgae是降序,那么他们内部逻辑是什么,是同时起作用还是有先后???
【分析】
当sdept一直时,此时才会看sage
即为,sdept一致的前提下,sage再按照降序来排序。
*/

(9)聚集函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(10)group by子句

group by (属性);

将属性分组,即将相同的属性值放在一起,即一个组;
在这里插入图片描述
说明:按照学号分组,并且having后面加上聚集函数,来约束,寻找选修课程大于等于三的学号。聚集函数是作用在已经分好组的上面!!
在这里插入图片描述
在这里插入图片描述
特别注意:这里需要说明一下,select后面跟着的属性要与group by后面的一致。

2、连接查询

(1)

SELECT <>
FROM<>
WHERE <表名1>.<属性名1>==<表名2>.<属性名2>

这里的where通过如上格式将两个表连接起来,等于号左右是两个表的公共属性;
在这里插入图片描述
(2)
在where子句中也可以连接和查询一起加约束。
在这里插入图片描述

3、嵌套查询(exist不考)

在这里插入图片描述
此查询可以分为两步:
第一步查询刘晨的系名
第二步来用IN
合并为:

SELECT SNAME,SNO,SDEPT
FROM STUDENT
WHERE SDEPT IN(
SELECT SDEPT
FROM STUDENT
WHERE SNAME='刘晨'
);

在这里插入图片描述
这里也可以用连接查询:

select student.sno,sname
from student,course,sc
where student.sno=sc.sno and sc.sno=course.sno and cname='信息系统';

三、数据更新

1、插入数据

INSERT 
INTO()
VALUES()

stu(sname,ssex,sno)
例子:
(1)在stu表里面加入一个学生,姓名,韩,性别,男,学号2123

INSERT 
INTO STU(sname,ssex,sno)/*括号里面可写可不写,因为这里插入的数据与原关系模式属性一致*/
VALUES (‘韩’,‘男’,2123)

(2)在stu表里面加入一个学生,姓名,韩,性别,男

INSERT 
INTO STU(sname,ssex)
VALUES (‘韩’,‘男’)/*这里再第三个属性显示时,会自动补上null*/

INSERT 
INTO STU(sname,ssex,sno)/*如果这里是关系里面全部属性,而学号还不知道,则在插入时加上null*/
VALUES (‘韩’,‘男’,null)

2、修改数据

update <table>
set 
where

例子1:修改一个名为张三的学生的学号

UPDATE STU
SET SNO='2222'
WHERE SNAME=张三;

例子2:将所有同学分数加10分

UPDATE SC
SET SGRADE=SGRADE + 10;

3、删除数据

DELETE FROM <TABLE>
WHERE

例子:删除张三的信息

DELETE FROM STU
WHERE SNAME=ZHANGSAN;

DELETE FROM STU;/*删除所有学生*/

四、空值的处理

在这里插入图片描述

五、视图

1、视图的定义

CREATE VIEW
AS  <子查询>

注意:子查询一般用于连接查询,因为只要from后面跟着两个或两个以上的表,就要用连接查询,把他们的公共属性连接起来。

相关推荐

  1. 关系数据库标准语言SQL难题整理

    2024-05-13 11:14:07       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-13 11:14:07       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-13 11:14:07       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-13 11:14:07       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-13 11:14:07       18 阅读

热门阅读

  1. sql-行转列2(转置)

    2024-05-13 11:14:07       14 阅读
  2. sql-行转列(转置)

    2024-05-13 11:14:07       11 阅读
  3. 母亲节祝福html源码示例

    2024-05-13 11:14:07       10 阅读
  4. Es6 Generator 生成器函数

    2024-05-13 11:14:07       8 阅读
  5. vben框架是什么

    2024-05-13 11:14:07       12 阅读
  6. 新闻标题抓取

    2024-05-13 11:14:07       12 阅读
  7. 【学习笔记】C++每日一记

    2024-05-13 11:14:07       12 阅读
  8. Python小程序 - 文件处理1(使用AI工具)

    2024-05-13 11:14:07       11 阅读
  9. 规则引擎drools Part5

    2024-05-13 11:14:07       9 阅读