贡献者: 待更新
//插入元组的INSERT语句的格式:
INSERT
INTO <表名>[(<属性列1>[,<属性列2>]...)]
VALUE(<常量1>[,<常量2>]...);
例如:将一个新学生元组(学号:231119001,姓名:张三,性别:男,年龄:18岁)插入到Student表中
INSERT
INTO Student(Sno,Sname,Ssex,Sage)
VALUES ('231119001','张三','男','18');
例如:对每一个系,求学生的平均年龄,并把结果存入数据库
首先在数据库中建立一个新表,将其中一列存放系名,另一列存放相应的学生平均年龄。
//插入子查询结果的INSERT 语句格式为
INSERT
INTO<表名>[(<属性列1>[,<属性列2>...])
例如:对每一个系,求学生的平均年龄,并把结果存入数据库
首先在数据库中建立一个新表,其中一列存放系名,另一列存放相应的学生平均年龄
CREATE TABLE Dept_age
(
Sdept CHAR(15)
Avg_age SMALLINT
);
然后对Student表按系分组求平均年龄,再把系名和平均年龄存入新表中
INSERT
INTO Dept_age(Sdept,Avg_age)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept;
//数据查询的一般格式为
SELECT [ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]...
FROM <表名或视图名>[,<表名或视图名>..]|(<SELECT语句>)[AS]<别名>
[WHERE <条件表达式>]
[GROUP BY<列名 1> [HAVING <条件表达式> ]]
[ORDER BY<列名 2> [ASC|DESC]];
例如:查询全体学生的学号与姓名
SELECT Sno,Sname
FROM Stuent;
例如:从学生表查询名字为张三的学号
SELECT ID
FROM students
WHERE name='张三';
例如:查询全体学生的详细记录
SELECT *
FROM Student;
查询条件 | 谓词 |
比较 | =,>,<,>=,<=,<>,!>,!<;NOT+上述比较运算符 |
确定范围 | BETWEEN AND,NOT BETWEEN AND |
确定集合 | IN, NOT IN |
字符匹配 | LIKE,NOT LIKE |
空值 | IS NULL |
多重条件 | AND,OR,NOT |
1.比较大小
例1:查询计算机科学系全体学生的名单
SELECT Sname
FROM Student
WHERE Sdept='计算机科学';
例2:查询所有年龄在20岁一下的学生姓名以及年龄
SELECT Sname,Sage
FROM Student
WHERE Sage<20;
2.确定范围
例1:查询年龄在20-33岁(包括20岁和23岁)之间的学生姓名
SELECT Sname
FROM Student
WHERE Sage BETWEEN 20 AND 23;
例2:查询不在年龄在20-33岁之间的学生姓名
SELECT Sname
FROM Student
WHERE Sage NOT BETWEEN 20 AND 23;
3.确定集合
例1:查询计算机科学系,数学系学生的姓名和性别
SELECT Sname,Ssex
FROM Student
WHERE Sdept IN('计算机系','数学系')
例2:查询不是计算机科学系,也不是数学系学生的姓名和性别
SELECT Sname,Ssex
FROM Student
WHERE Sdept NOT IN('计算机系','数学系')
4.字符匹配
例1:从学生表查询姓名为张的学号
// % 表示任意多个字符
//_ 表示任意多个任意字符
SELECT ID
FROM students
WHERE name like '张%' ;
或者
SELECT ID
FROM students
WHERE name like '张_' ;
例2:查询名字中第二个字为“文”的学生的姓名和学号
SELECT Sname,Sno
FROM Student
WHERE Sname LIKE '_文%';
5.涉及空置的查询
例如:某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。
查询缺少成绩的学生的学号和课程号
SELECT Sno,Cno
FROM SC
WHERE Grade IS NULL; //分数Grade 是空值
6.多重条件查询
例如:查询计算机科学系年龄在20岁一下的学生姓名
SELECT Sname
FROM Student
WHERE Sdept='计算机科学' AND Sage<20
例如:查询选修了3号课程的学生的学号及成绩,查询结果按分数的降序排列
SELECT Sno,Grade
FROM SC
WHERE Cno='3'
ORDER BY Grade DESC;
COUNT (*) | *统计元组个数 |
COUNT([DISTINCE|ALL]<列名>) | 统计一列中值的个数 |
SUM ([DISTINCE|ALL]<列名>) | 计算一列值的总和 |
AVG([DISTINCE|ALL]<列名>) | 计算一列值的平均值 |
MAX([DISTINCE|ALL]<列名>) | 求一列值中的最大值 |
MIN ([DISTINCE|ALL]<列名>) | 求一列值中的最小值 |
例1:查询学生总人数
SELECT *
FROM Student;
例2:查询选修了课程的学生人数
SELECT COUNT(*)
FROM Student;
例3:计算选修1号课程的学生平均成绩
SELECT AVG(Grade)
FROM SC
WHERE Cno='1';
例4:查询选修1号课程的学生的最高分
SELECT MAX(Grade)
FROM SC
WHERE Cno='1';
例如:求各个课程号及相应的选课人数
SELECT Cno,COUNT(Sno)
FROM SC
GROUP BY Cno;
//修改数据的一般格式为:
UPDATE<表名>
SET <l列名>=<表达式> [,<列名>=<表达式>]...
例如:在学生表中,将学生张三的id改为231119002
UPDATE students
SET id='231119002'
WHERE name='张三';
另外,SET后面除了带文本之外,还可以是数学表达式
例如:将学生id为231119002的学生对应的年龄加2
UPDATE students
SET age=age+2
WHERE id='231119019'
//删除语句的一般格式为
DELETE
FROM<表名>
[WHERE <条件>];
例如:删除students表中名字为张三的信息
DELETE FROM students
WHERE name='张三';
create database db_1
show database;
show crete database db_1;
use db_1;
drop database db_1
SQL 的数据定义语句
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>;
如果没有指定 <模式名>,那么 <模式名> 隐含为 <用户名>。
例如:为用户zhang 创建一个模式 test,并且在其中定义一个表tab1
CREATE SCHEMA test AUTHORIZATION zhang
CREATE TABLE tab1(
COL1 SMALLINT,
COL2 INT,
COL3 CHAR(20)
);
DROP SCHEMA <模式名><CASCADE|RESTRICT>;
其中 CASCADE和RESTRICT两者必选其一。
CREATE TABLE <表名> (
<列名><数据类型>[列级完整性约束条件]
[,<列名><数据类型>[列级完整性约束条件]]
...
[,<表级完整性约束条件>]
);
例如:建立一个”学生”表Student
CREATE TABLE Student(
Sno CHAR(9) PRIMARY KEY, /*列级完整性约束条件,Sno是主码*/
Sname CHAR(20) UNIQUE, /*Sname取唯一值*/
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
数据类型 | 含义 |
CHAR(n),CHARACTER(n) | 长度为 n 的定长字符串 |
VARCHAR(n),CHARACTERVARYING(n) | 最大长度为 n 的边长字符串 |
CLOB | 字符串大对象 |
BLOB | 二进制大对象 |
INT,INTEGER | 长整型(4 字节) |
SMALLINT | 短整型(2 字节) |
BIGINT | 大整数(8 字节) |
ALTER TABLE<表明>
//ADD子句用于增加新列,新的列级完整性约束条件和新的表级完整性约束条件
[ADD[COLUMN]<新列名><数据类型>[完整性约束]
[ADD<表级完整性约束>]
//DROP COLUMN 子句用于删除表中的列
[DROP[COLUMN]<列名>[CASCADE|RESTRICT]]
//DROP CONSTRAINT 子句用于删除指定的完整性约束条件
[DROP CONSTRAINT <完整性约束名>[RESTRICT|CASCADE]]
//ALTER COLUMN子句用于修改原有的列定义,包括修改列名和数据类型
[ALTER COLUMN<列名><数据类型>];
CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名>(<列名>[<次序>] [,<列名>[<次序>]]...)
ALTER INDEX <旧索引名> RENAME TO <新索引名>
DROP INDEX <索引名>
视图式从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。 视图一经定义,就可以和基本表一样被查询,被删除。也可以在一个视图之上再定义新的视图,但对视图的更新(增,删,改)操作则有一定的限制。
//SQL语言用CREATE VIEW 命令建立视图,其一般格式为:
CREATE VIEW <视图名> [(<列名>[,<列名>]...)]
AS <子查询>
[WITH CHECK OPTION];
例如:建立信息系学生的视图
CREATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS';
//删除视图的一般格式为:
DROP VIEW <视图名> [CASCADE];
// 如果该视图上还导了其他视图,则使用CASCADE级联删除语句把该视图和由它导出的所有视图一起删除
查询和更新视图的语句与查询和更新基本表的语句相同