SQL语句详解|数据库(适用于期末复习)

本文详述了SQL语言的核心概念和用法,包括数据查询、定义、操纵和控制。重点讲解了SELECT语句的使用,如查询条件、连接查询、嵌套查询和集合操作。同时,介绍了数据定义(CREATE, DROP, ALTER)、数据操纵(INSERT, UPDATE, DELETE)以及数据控制(GRANT, REVOKE)。此外,还讨论了视图的创建、删除和查询,以及嵌入式SQL和动态SQL的基础知识。" 113976596,10622267,Java面试深度解析:注解、反射与关键字,"['Java', '设计模式', '编程语言', '面试', 'Spring']
摘要由CSDN通过智能技术生成

注:本学期数据库赵老师课程知识点总结

SQL

SQL是基于关系代数和关系演算之间的结构化查询语言
⧫功能不仅仅是查询,是通用的功能极强的关系数据库操纵语言。
⧫集数据查询,数据操纵,数据定义,数据控制于一体

特点:
⧫综合统一
⧫数据操纵语言统一
⧫数据结构统一
⧫高度非过程化
⧫无需指明操作路径
⧫只需提出做什么 ,无需指明怎么做
面向集合的操作方式
⧫同一语法两种使用方式
⧫交互方式
⧫嵌入方式

SQL语言的系统结构:
在这里插入图片描述

⧫SQL可以对基表和视图进行操作,都是关系
⧫基表是独立存在的表,一个关系对应一个表
⧫一个或多个基表对应1个存储文件
⧫存储文件构成内模式,对用户透明
⧫视图是1个或多个基表导出的表,不独立储存在数据库中

模式和表
⧫1 表名显式标识模式名
⧫2 创建模式同时创建表
⧫3 设置搜索路径

数据查询:SELECT

❖ 语句格式

SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]FROM <表名或视图名>[,<表名或视图名> ]|(SELECT 语句) 
[AS]<别名>
[ WHERE <条件表达式> ]
[ GROUP BY <列名1> [ HAVING <条件表达式> ] ] 
[ ORDER BY <列名2> [ ASC|DESC ] ];

◼ SELECT子句:指定要显示的属性列
◼ FROM子句:指定查询对象(基本表或视图)
◼ WHERE子句:指定查询条件
◼ GROUP BY子句:对查询结果按指定列的值分组,该属性列值相
等的元组为一个组。通常会在每组中作用聚集函数。
◼ HAVING短语:只有满足指定条件的组才予以输出
◼ ORDER BY子句:对查询结果表按指定列值的升序或降序排序

❖查询指定列
查询全体学生的学号与姓名。

SELECT Sno,Sname FROM Student;

❖查询全部列
◼ 选出所有属性列:

  • 在SELECT关键字后面列出所有列名
  • 将<目标列表达式>指定为 *
    查询全体学生的详细记录
SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student;
SELECT * FROM Student;

❖查询经过计算的值(“虚”列)
⧫ ◼ SELECT子句的<目标列表达式>不仅可以为表中的属性列,也可以是表达式

查全体学生的姓名及其出生年份。

SELECT Sname,2014-Sage 
FROM Student; 
Sname 2014-Sage
李勇 1994
刘晨 1995
王敏 1996
张立 1995

查询全体学生的姓名、出生年份和所在的院系,要求用小写
字母表示系名。

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

输出结果:

Sname 'Year of Birth:' 2014-Sage LOWER(Sdept)
李勇   Year of Birth:  1994        cs
刘晨   Year of Birth:  1995        cs
王敏   Year of Birth:  1996        ma
张立   Year of Birth:  1995        is

❖使用列别名改变查询结果的列标题:

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

输出结果:

NAME BIRTH BIRTHDAY DEPARTMENT
李勇 Year of Birth: 1994 cs
刘晨 Year of Birth: 1995 cs
王敏 Year of Birth: 1996 ma
张立 Year of Birth: 1995 is

❖消除取值重复的行 如果没有指定DISTINCT关键词,则缺省为ALL
查询选修了课程的学生学号。

SELECT Sno FROM SC;

结果为:

Sno
201215121
201215121
201215121
201215122
201215122

❖指定DISTINCT关键词,去掉表中重复的行

SELECT DISTINCT Sno FROM SC;

执行结果:

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

1. 比较大小

//查询计算机科学系全体学生的名单。
SELECT Sname FROM Student 
WHERE Sdept=‘CS’;
//查询所有年龄在20岁以下的学生姓名及其年龄。
SELECT Sname,Sage
FROM Student WHERE Sage < 20;
//查询考试成绩有不及格的学生的学号。
SELECT DISTINCT Sn
FROM SC
WHERE Grade<60;

2. 确定集合
❖谓词:IN <值表>, NOT IN <值表>
[例3.27]查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别。

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

[例3.28]查询既不是计算机科学系、数学系,也不是信息系的学生的姓名和性别。

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

3. 字符匹配
❖ 谓词: [NOT] LIKE
<匹配串>可以是一个完整的字符串,也可以含有通配符%和 _

◼% (百分号) 代表任意长度(长度可以为0)的字符串
例如a%b表示以a开头,以b结尾的任意长度的字符串
◼_ (下横线) 代表任意单个字符。
例如a_b表示以a开头,以b结尾的长度为3的任意字符串

◼ 匹配串为固定字符串
查询学号为201215121的学生的详细情况。

SELECT *
FROM Student
WHERE Sno LIKE201215121';
//等价于: 
SELECT *
FROM Student
WHERE Sno = ' 201215121 ';

◼ 匹配串为含通配符的字符串
查询所有姓刘学生的姓名、学号和性别。

SELECT Sname, Sno, Ssex FROM Student
WHERE Sname LIKE '刘%';

查询姓"欧阳"且全名为三个汉字的学生的姓名。

SELECT Sname FROM Student
WHERE Sname LIKE '欧阳__';

[例3.32] 查询名字中第2个字为"阳"字的学生的姓名和学号。

SELECT Sname,Sno FROM Student
WHERE Sname LIKE ' 阳%';

[例3.33] 查询所有不姓刘的学生姓名、学号和性别。

SELECT Sname, Sno, Ssex FROM Student
WHERE Sname NOT LIKE '刘%';

◼ 使用换码字符将通配符转义为普通字符
查询DB_Design课程的课程号和学分。

SELECT Cno,Ccredit FROM Course
WHERE Cname LIKE 'DB\_Design' ESCAPE '\ ' ;

4. 涉及空值的查询

❖谓词: IS NULL 或 IS NOT NULL
◼ “IS” 不能用 “=” 代替
某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。
查询缺少成绩的学生的学号和相应 的课程号。

SELECT Sno,Cno FROM SC
WHERE Grade IS NULL

查所有有成绩的学生学号和课程号。

SELECT Sno,Cno FROM SC
WHERE Grade IS NOT NULL;

5.多重条件查询

❖逻辑运算符:AND和 OR来连接多个查询条件
◼ AND的优先级高于OR
◼ 可以用括号改变优先级
[例3.38] 查询计算机系年龄在20岁以下的学生姓名。

SELECT Sname FROM Student
WHERE Sdept= 'CS' AND Sage<20;

❖改写
查询计算机科学系(CS)、数学系&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值