查询是对已有表中的数据按照某种条件进行筛选,将满足条件的数据筛选出来形成一个新的记录集进行显示,也称为查询结果记录集,
这个记录集的结构与表的结构类似,由行和列组成,但它并不是真正存放在数据库中的表, 而是一种存放在计算机内存中的虚拟表。
若省略查询条件,则返回数据源中的所有记录行。
查询是查找和筛选功能的扩充,它不但能实现数据检索,而且可以在查询过程中进行计算、合并不同数据源的数据,甚至可以添加、更改或删除基本表中的数据。
查询的数据源(也称为“记录源”,RecordSource)是存放在数据库中的基本表或已经创建好的视图,可以有一个或多个数据源。
若是多个数据源,则需指定这些数据源之间的关联关系,以保证查询结果的正确性
查询的结果只有在运行查询时才会产生,因此也称为动态结果记录集,这个结果集的显示可以通过前面我们所学过的视图来实现。
数据查询是数据库的核心操作。SELECT语句是SQL语言中功能最强大的语句。
SELECT子句:指定要显示的属性列
FROM子句:指定查询对象(基本表或视图)
WHERE子句:指定查询条件
GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用聚集函数。
HAVING短语:只有满足指定条件的组才予以输出
ORDER BY子句: 对查询结果表按指定列值的升序
查询仅涉及一个表,是一种最简单的查询操作
1.选择表中的若干列(列查询)
2.选择表中的若干元组(行查询)
3.对查询结果排序
4.使用聚集函数
列查询
1.查询指定列
例:查询全体学生的学号和姓名
select sno,sname from student
2.查询全部列
例:查询全体学生的详细记录
select sno,sname,sgender,sage,sdept from student select * from student
3.查询经过计算的值
SELECT子句的<目标列表达式>为表达式(算术表达式、字符串常量、函数、列别名)
例:查询全体学生的姓名、出生年份和所在系,要求用小写字母表示所有系名,并使用列别名改变查询结果的列标题
select sname as ‘name‘,year(getdate())-year(cssj) as ‘年龄‘,‘Year of Birth:‘ as ‘Birth:‘,year(getdate())-sage as ‘BirthDay‘,lower(sdept) ‘department‘ from student
选择表中的若干元组
1.取消取值重复的行
在SELECT子句中使用DISTINCT短语
select /*(默认 ALL)*/ sno from sc select distinct sno,cgrade from sc
注意DISTINCT短语的作用范围是所有目标列
2.查询满足条件的元组
查询条件 | 谓词 |
比较 | =、>、<、>=、<=、!=、<>、!>、!<、NOT+其他比较运算符 |
确定范围 | BETWEEN...AND...、NOT BETWEEN...AND... |
确定集合 | IN、NOT IN |
字符匹配 | LIKE、NOT LIKE |
空值 | IS NULL、NOT IS NULL |
多重条件 | AND、OR |
(1)比较大小
(2)确定范围
(3)确定集合
例:查询系别为IS、MA、CS的学生信息
select * from student where sdept IN(‘IS‘,‘MA‘,‘CS‘)
(4)字符串匹配
匹配模板为固定字符串
例:查询学号为95001的学生的详细情况
select * from student where sno like ‘95001‘/*等价于where sno = ‘95001‘*/
匹配模板为含通配符的字符串
例:查询名字中第2个字为‘阳’字的学生的详细信息
select * from student where sname like ‘_阳%‘
使用换码字符将通配符转义为普通字符
例:查询以“DB_”开头,且倒数第三个字符为‘i‘的课程的详细情况
select * from course where cname like ‘DB\_%i__‘ escape ‘\‘
(5)涉及空表的查询
使用谓词IS NULL或IS NOT NULL ( “IS NULL”不能用“= NULL”代替 )
(6)多重条件查询
用逻辑运算符AND和OR来联结多个查询条件 ( AND的优先级高于OR,但可以用括号改变优先级 )
连接查询是同时涉及多个表的查询
同时涉及多个表的查询称为连接查询
用来连接两个表的条件称为连接条件或连接谓词
连接谓词中的列名称为连接字段
注意:连接条件中的各字段类型必须是可比的,但字段名不必是相同的
首先在表1中找到第一个元组,然后从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。
表2全部查找完后,再找表1中第二个元组,然后再从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第二个元组与该元组拼接起来,形成结果表中一个元组。
重复上述操作,直到表1中的全部元组都处理完毕。
连接操作说明
SQL的连接操作是通过关联表间的行的匹配而产生的结果。
参与连接的表可以有多个,但连接操作在两个表之间进行,即两两连接。
SQL中连接查询的主要类型
广义笛卡尔积
等值连接查询
非等值连接查询
原文:https://www.cnblogs.com/jiamian/p/11875123.html