数据库系统概论(第五版) 第三章 关系数据库标准语言SQL

3.1SQL概述

Structured Query Language

mysql安装

安装

3.2学生-课程数据库

3.3数据定义

进入mysql

mysql;

or

mysql -uroot -p

在这里插入图片描述

创建数据库

CREATE DATABASE cyp;

查看已创建的databases
在早期,databases和schema本质没有区别
并且sql关键字不区分大小写,但是自己的命名是区分大小写的

show databases;

在这里插入图片描述
使用数据库(进入模式)

use cyp;

在这里插入图片描述

查看数据库中的所有表

show tables;

在这里插入图片描述
没创建所以一个都没有

创建

CREATE TABLE TAB1(COL1 SMALLINT,COL2 INT,COL3 CHAR(20),COL4 NUMERIC(10,3), COL5 DECIMAL(5,2));

在这里插入图片描述
再次查看表

 SHOW TABLES;

在这里插入图片描述
查看表中细则

DESC TAB1;

在这里插入图片描述
展示当初创建表时候的情况

 SHOW CREATE TABLE  TAB1;

在这里插入图片描述

删除表cyp

 DROP DATABASE cyp ;

在这里插入图片描述
退出模式
在这里插入图片描述
再次
一行一行输入

>mysql -uroot -p                       //然后输入密码
>CREATE DATABASE cyp;
> use cyp;
> create table tab1 (c1 smallint,c2 int,c3 char(20),c4 numeric(10,3),c5 decimal(5,2));
>  desc tab1;
> create table Student (Sno CHAR(9) PRIMARY KEY,Sname CHAR(20) UNIQUE,Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20));
> desc student;
>  create table Course(Cno CHAR(4) PRIMARY KEY,Cname CHAR(40)NOT NULL,Cpno CHAR(4),Ccredit SMALLINT,FOREIGN KEY(Cpno)REFERENCES Course(Cno));
> DESC cOURSE;
> CREATE TABLE SC(Sno CHAR(9),Cno CHAR(4),Grade SMALLINT,PRIMARY KEY(Sno,Cno),FOREIGN KEY (Sno) REFERENCES Student(Sno),FOREIGN KEY(Cno) REFERENCES Course(Cno));
> DESC SC;

在这里插入图片描述

在student表中增加一行

 ALTER TABLE Student ADD S_entrance DATE;

在这里插入图片描述
修改类型
将age的字符型改成整数型

 ALTER TABLE STUDENT MODIFY COLUMN Sage INT;

在这里插入图片描述
增加课程名称必须取唯一值的约束条件

ALTER TABLE Course ADD UNIQUE(Cname);

在这里插入图片描述

删除基本表

DROP TABLE <表名> [RESTRICT|CASCADE];/*有限制|无限制*/
 DROP TABLE STUDENT CASCADE;

表示删不掉

在这里插入图片描述

 CREATE VIEW IS_STUDENT
    -> AS
    -> SELECT Sno,Sname,Sage
    -> FROM Student
    -> WHERE Sdept='is';

在这里插入图片描述

DROP TABLE Student RESTRICT;
DROP TABLE Student CASCADE;
SELECT *FROM IS_STUDENT;

在这里插入图片描述
不同的sql的细节不同
见page87

索引类型
顺序文件的索引
B+树索引
散列索引
位图索引

建立索引

 CREATE UNIQUE INDEX Stusno ON Student(Sno);
 CREATE UNIQUE INDEX Coucno on Course(Cno);
 CREATE UNIQUE INDEX Scno ON SC(Sno ASC,Cno DESC);

在这里插入图片描述
修改索引
遇到bug了

3.4数据查询

套路:

SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表表达式>]...        /*3在按照SELECT子句中的目标列表式选出元组中的属性值形成结果表
FROM<表名或视图名>[,<表名或视图名>...]|(<SELECT语句>)[AS]<别名>     /*2from子句指定的基本表,视图,或派生表找到满足条件的元组
[WHERE<条件表达式>]                                               /*1根据where条件表达式
[GROUP BY<别名1>[HIVING<条件表达式>]]                              /*如果有,按照列名1的值进行分组,改属性列值相等的元组分一组
[ORDER BY<列名2>[ASC|DESC]];                        			  /* 如果有,按照列表2的值进行升序或者降序排序

单表查询

SELECT Sno,Sname
FROM student;
 SELECT Sname,Sno,Sdept
 FROM Student;

查询全体学生

SELECT*
FROM Student;

查询经过计算的值

SELECT Sname,2021-Sage               /*当年减去年龄得到年份
FROM Student;                        

选择列

SELECT Sname,'Year of Birth:',2014-Sage,LOWER(Sdept)
FROM Student;

通过指定别名来改变查询结果的列标题

SELECT Sname NAME,'Year of Birth:'BIRTH,2014-Sage BIRTHDAY,LOWER(Sdept)DEPARTMENT
FROM Student;

消除取值重复的行

SELECT (ALL) Sno
FROM SC;

去重

SELECT DISTINCT Sno
FROM SC;

查询满足条件的元组

查询条件谓词
比较=,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较运算符
确定范围BETWEEN AND,NOT BETWEEN AND
确定集合IN,NOT IN
字符匹配LIKE,NOT LIKE
空值IS NULL ,IS NOT NULL
多重条件(逻辑运算)AND,OR,NOT

查询计算机科学系全体学生的名单

SELECT Sname
FROM Sudent
WHERE Sdept='CS';

查询所有年龄在20岁以下的学生的姓名以及年龄

SELECT Sname,Sage
FROM Student
WHERE Sage<20;

查询考试成绩不及格的学生的学号

SELECT DISTINCT Sno
FROM SC
WHERE Grade<60;

查询年龄在20~23岁之间的学生姓名。系别和年龄。

SELECT Sname,Sdept,Sage
FROM Sdudent
WHERE Sage BETWEEN 20 AND 23;

查询年龄不在20~23岁之间的学生姓名系别和年龄

SELECT Sname,Sdept,Sage
FROM Sdudent
WHERE Sage NOT BETWEEN 20 AND 23;

IN可以用来查找属性值属于指定集合的元组

查询计算机科学系。数学系、和信息系

SELECT Sname,Ssex
FROM Student
WHERE Sdept IN ('CS','MA','IS');

字符匹配
谓词like可以用来进行字符串的匹配

[NOT] LIKE'<匹配串>' [ESCAPE'<换码字符>']
SELECT*
FROM Student
WHERE Sno LIKE '20192502';

等价于

SELECT*
FROM Student
WHERE Sno ='20192502';

姓刘的
以下没有必要不写找啥,从那个表找

SELECT 
FROM
WHERE Sname LIKE '刘%';

欧阳啥

SELECT 
FROM
WHERE Sname LIKE '欧阳_';

_代表必须得有
%代表string可以为空
_阳%

SELECT 
FROM
WHERE Sname LIKE '_阳%';

不姓刘

SELECT 
FROM
WHERE Sname NOT LIKE '刘%';

转义字符
ESCAPE ‘\’

SELECT 
FROM
WHERE Cname LIKE 'DB\_Design' ESCAPE'\';

查询以‘DB_’开头,且倒数第三个字符为i的课程的详细情况

SELECT *
FROM Course
WHERE Cname LIKE 'DB\_%i__' ESCAPE'\';

NULL

SELECT 
FROM
WHERE Grade IS NULL;
SELECT 
FROM
WHERE Grade IS NOT NULL;

多重条件查询

SELECT 
FROM
WHERE Sdept='CS'  AND  Sage <20;
SELECT 
FROM
WHERE Sdept='CS' OR Sdept='MA' OR Sdept='IS';

第四行加入
默认升序ASC降序DESC

ORDER BY Grade DESC;

A升序B降序

ORDER BY A,B DESC;

聚焦函数

COUNT(*)                          		统计元组个数
COUNT([DISTINCT|ALL]<列名>)    			统计一列中值的个数
SUM([DISTINCT|ALL]<列名>)				计算一列值的总和(整数列)
AVG([DISTINCT|ALL]<列名>)				计算一列值的平均值(整数列)
MAX([DISTINCT|ALL]<列名>)				计算一列值的最大值
MIN([DISTINCT|ALL]<列名>)				计算一列值的最小值

3.5数据更新

3.6空值的处理

3.7视图

3.8小节

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.0-0.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值