SQL之数据查询
文章为个人读书总结笔记 发现错误以及如果有什么建议可以及时通知我哟!
SQL语言使用SELECT
语句进行查询数据
格式
SELECT [ALL|DISTINCT] <目标表达式> [,<目标表达式>] ... FROM <表名或者视图名> [,<表名或者视图名>...] | (<SELECT语句>)[AS]<别名> [WHERE <条件表达式> ] [GROUP BY <列名1> [HAVING <条件表达式>]] [ORDER BY <列名2> [ASC|DESC]];
- 含义
- 根据
WHERE
子句的条件表达式 从FROM
子句指定的基本表或者视图找出满足条件元组 - 再按
SELECT
子句罗列出的表达式选出元组中的属性值形成结果表 - 如果有
GROUP BY
子句,将结果表按<列名1>
值进行划分组,值相同为一组 - 如果
GROUP BY
子句带有HAVING
条件短语,则以组为单位,选出满足条件的组 - 如果有
ORDERBY
子句,将结果表按照<列名2>
的值进行升序或者降序处理
ASC
: 升序DESC
: 降序
- 根据
- 含义
假如我想:单表查询
实现:选择表中的若干列(SELECT
我能:查询指定列
例子:查询表S的所有Sno, Sname
SELECT Sno,Sname FROM S;
- 执行过程
- 从S表中取出一个元组
- 选择元组的Sno, Sname的属性值形成一个新的元组作为输出
- 对S表中的其他元组做同样的处理
- 形成最终结果关系输出
- 执行过程
例子:查询S表中的所有Sname,Sno,Sdept
SELECT Sname,Sno,Sdept FROM S;
- 注意:目标表达式中各个列的顺序可以与查询表中的顺序不同( 由用户自定义结果表
我能:查询全部列
例子:查询全部S表的所有属性
- 方法一 : 列出完整目标表达式
SELECT Sno,Sname,Sdept,Sage FROM S;
- 方法二 : 使用 * 代替整个目标表达式
SELECT * FROM S;
我能:查询经过计算后得到的值
补充:目标表达式
不仅可以是表中的属性列
例子参照上面罗列出来的
还可以是表达式 ( 例如针对整数的减法运算
例子:查询S表的Sname,以及出生年份( 2018 - Sage
SELECT Sname,2018-Sage FROM S;
还可以是字符串常量
例子:查询S表的Sname,添加字符串 “Year of Birth:’ 属性列,以及出生年份
SELECT Sname,'Year of Birth:',2018-Sage FROM S;
还可以是函数
例子:查询S表中的Sdept,要求数据为小写
SELECT LOWER(Sdept) FROM S;
补充:为目标表达式指定别名
例子:查询表S,结果表为表达式 2018-Sage 指定别名为BIRTHDAY
影响:结果表中的属性列标题由
2018-Sage
变成了BIRTHDAY
SELECT 2018-Sage BIRTHDAY, Sname FROM S;
实现:选择表中的若干元组(WHERE
我能:消除取值重复的行(DISTANCT
使用:
DISTINCT
例子:查询SC表中的Sno,消除重复的行
SELECT DISTANCT Sno FROM SC;
我能:查询满足条件的元组(WHERE
- 常用的查询条件 ( 条件表达式
查询条件 | 谓词 |
---|---|
比较 | [NOT] =,>,<,>=,<=,!=,<>,!>,!< |
确定范围 | [NOT] BETWEEN AND |
确定集合 | [NOT] IN |
字符匹配 |