阅读 192

关系数据库标准语言SQL(关系数据库标准语言SQL总结)

3、关系数据库标准语言SQL

SQL 基本语法

数据查询(DQL):SELECT
数据定义(DDL):CREATE,DROP,ALTER
数据操纵(DML):INSERT,UPDATE,DELETE
数据控制(DCL):GRANT,REVOKE

3.1数据查询

单表查询

3.1.1 查询列:

  • 查询指定列:

# 例:查询全体学生的学号与姓名SELECT Sno,SnameFROM Student;
  • 查询所有列:(将<目标列表达式>指定为 *)

# 例:查询全体学生的详细记录。SELECT *FROM Student as Stu;  	# as 取别名,可省略
  • 查询结果计算的值:

# 例:查全体学生的姓名及其出生年份SELECT Sname,2012-Sage /*假定当年的年份为 2012 年,减去年龄即得出生年份*/FROM Student;

3.1.2 查询行(元组)

  • 取消取值重复的行:(指定 DISTINCT 关键词,去掉表中重复的行)

#  例:查询选修了课程的学生号码SELECT DISTINCT Sno     #(使用 DISTINCT 关键词取消了重复学号的行)FROM SC;
  • 查询满足条件的行:(WHERE 语句)
    在这里插入图片描述

 # 例:查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。*(确定集合)*
 SELECT Sname,Ssex
 FROM Student
 WHERE Sdept IN ( 'IS','MA','CS' );
# 例:查询学号为 200215121 的学生的详细情况。*(字符匹配)*SELECT *  
 FROM Student 
 WHERE Sno LIKE '200215121'; 	# % 可以代替多个字符, 但是_只能替换⼀个字符
# 例:某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。*(空值)*SELECT Sno,Cno
 FROM SC
 WHERE Grade IS NULL    /*不能用'='代替 IS*/

3.1.3 GROUP BY子句

# GROUP BY分组 ,如果要进⾏筛选,请使⽤Having

3.1.4 ORDER BY子句

 #例:查询选修了 3 号课程的学生的学号及其成绩,查询结果按分数降序排列。
 SELECT Sno,Grade
 FROM SC
 WHERE Cno= ' 3 '
 ORDER BY Grade DESC	# 可以按一个或多个属性列排序。升序:ASC;降序:DESC;缺省值为升序

3.1.4 聚集函数

函数说明
AVG()返回某列的平均值
COUNT()返回某列的行数
MAX()返回某列的最大值
MIN()返回某列的最小值
SUM()返回某列之和
# 例:计算 1 号课程的学生平均成绩。SELECT AVG(Grade)FROM SC
WHERE Cno= ' 1 ';

多表查询.

3.1.5等值查询

# 例:查询每个学生及其选修课程的情况SELECT Student.*,SC.*FROM Student,SC
WHERE Student.Sno = SC.Sno;

3.1.6 嵌套查询

IN 谓词的子查询:

# 例:查询与“刘晨”在同一个系学习的学生SELECT Sno,Sname,SdeptFROM StudentWHERE Sdept IN	(SELECT Sdept
	FROM Student
	WHERE Sname='刘晨' );

比较运算符的子查询:(当内查询的结果是一个值时,可以用=代替 IN)

#例:查询与“刘晨”在同一个系学习的学生SELECT Sno,Sname,SdeptFROM StudentWHERE Sdept =
 	(SELECT Sdept
 	FROM Student
	WHERE Sname='刘晨');

有 ANY 或 ALL 谓词的子查询

在这里插入图片描述

#例:查询其他系中比计算机科学某一学生年龄小的学生姓名和年龄SELECT Sname,SageFROM StudentWHERE Sage < ANY (SELECT Sage
 			FROM Student
 			WHERE Sdept= ' CS ')
 	 AND Sdept <> 'CS ' ; /*这句是父查询块中的条件 */

 EXISTS 谓词的子查询:

相当于存在量词∃,有 EXISTS 谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。

# 例:查询所有选修了 1 号课程的学生姓名。SELECT SnameFROM StudentWHERE EXISTS	# exists 如果后⾯的⼦查询有值,返回1 否则为0;not exists 相反
	(SELECT *
 	FROM SC
 	WHERE Sno=Student.Sno AND Cno= ' 1 ');

3.1.7集合查询

集合操作的种类:并操作 UNION,交操作 INTERSECT,差操作 EXCEPT

#例:查询计算机科学系的学生及年龄不大于 19 岁的学生。(并)SELECT *
 FROM Student
 WHERE Sdept= 'CS'
 UNION	# 并操作
 SELECT *
 FROM Student
 WHERE Sage<=19;

3.2 数据定义

操作方式创建删除修改
模式CREATE SCHEMADROP SCHEMA
CREATE TABLEDROP TABLEALTER TABLE
视图CREATE VIEWDROP VIEW
索引CREATE INDEXDROP INDEXALTER INDEX

3.2.1模式

CREATE SCHEMA <模式名> AUTHORIZATION <用户名>;DROP SCHEMA<模式名>< CASCADE| RESTRICT>;	

删除模式, 其中 CASCADE 和RESTRICT 必须⼆选⼀,
CASCADE是(级联) 删除模式的同时也把该模式的所有数据库对象删除.
RESTRICT(限制) 如果该模式下有下属对象,⽐如表视图 就拒绝这个删除语句的执⾏

3.2.2 表

约束

常用完整性约束
主码约束PRIMARY KEY
用户定义CHECK
默认值DEFAULT
唯一性约束UNIQUE
非空值约束NOT NULL
参照完整性约束FOREIGN KEY

1定义

# 创建表 create table 表名( 字段名 类型 字段约束(列级完整性约束条件), 
                  字段名 类型 字段约束, 
                  字段名 类型 字段约束,
                 <表级完整性约束条件>)# 例: CREATE TABLE  SC       	(Sno  CHAR(9),
       	Cno  CHAR(4),  
       	Grade  SMALLINT check(Grade>=0 and Grade<=100),,
       	PRIMARY KEY (Sno,Cno),     -- 主码由两个属性构成,必须作为表级完整性进行定义
       	FOREIGN KEY (Sno) REFERENCES Student(Sno), -- 表级完整性约束条件,Sno是外码,被参照表是Student 
       	FOREIGN KEY (Cno) REFERENCES Course(Cno) -- 表级完整性约束条件, Cno是外码,被参照表是Course
		); 
		CREATE TABLE Ss(Sno INT PRIMARY KEY AUTO_INCREMENT,	#  AUTO_INCREMENT实现自动编号Sname CHAR(20) UNIQUE);

删除

DROP TABLE<表名> [RESTRICT| CASCADE];# 例: DROP TABLE Student CASCADE

CASCADE呢 是如果表有外键,视图 触发器的话,也会强⾏删除, RESTRICT恰恰相反哦

修改

ALTER TABLE<表名>[ADD [COLUMN] <新列名><数据类型>[完整性约束] #增[MODIFY [COLUMN] <列名> <数据类型> [完整性约束] #改[DROP [COLUMN] <列名>] #删# 例: ALTER TABLE Student ADD COLUMN Etime date;ALTER TABLE Student MODIFY COLUMN Etime int default 0;  # default将属性的默认值改为0ALTER TABLE Student DROP COLUMN Etime;

修改表名

ALTER TABLE <旧表名> RENAME [TO] <新表名>;

3.2.3 视图

建立

视图(VIEW)也被称作虚表,即虚拟的表,是⼀组数据的逻辑表示,其本质是对应于⼀条SELECT语句
结果集被赋予⼀个名字,即视图名字。
视图本身并不包含任何数据,它只包含映射到基表的⼀个查询语句,当基表数据发⽣变化,视图数据也会发生变化

CREATE VIEW<视图名>[(<列名>[,<列名>]…)]AS<子查询>[WITH CHECK OPTION]    # 加了WITH CHECK OPTION 可以防⽌⽤户对 不属于试图范围的操作 进⾏拒绝

删除

DROP VIEW <视图名> [CASCADE]

查询

  select * from view <视图名>

更新

视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,在对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。

UPDATE IS_Student #<视图名>SET Sname='刘辰'WHERE Sno='201215122';# 转换后的更新语句为UPDATE Student #<表名>SET Sname='刘辰'WHERE Sno='201215122' AND Sdept='IS';

3.2.4索引

创建索引,可以在查询的过程中,提高系统的性能,索引可以建⽴在⼀列或者多列上

建立

CREATE[ UNIQUE] INDEX<索引名>	# UNIQUE 唯⼀索引ON<表名(<列名>[<次序>][,<列名>[<次序>]]…)# 例: CREATE UNIQUE INDEX Stusno ON Student(Sno)

修改

ALTER INDEX<旧索引名> RENAME TO<新索引名>;

删除

DROP INDEX<索引名> on <表名>;

3.3 数据操纵

3.3.1 插入

insert into 表名 [( 字段列表 )] values( 值列表 ...);

3.3.2 修改

update 表名 set 字段 1= 值 1, 字段 2= 值 2, 字段 n= 值 n... where 条件

3.3.3 删除

 delete from 表名 [where 条件 ]

标签:语言,Sno,视图,查询,关系数据库,Student,SQL,WHERE,SELECT
来源: https://blog.csdn.net/am136633/article/details/121433081


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐