大家好,接下来我们一起学习数据查询的基础部分。 首先,什么是数据查询? 从数据库中检索数据的过程或命令叫做查询。
在 SQL 里,SELECT命令用于声明查询,通用语法如下:
SELECT select_list FROM table_expression [sort specification] ;
其中SELECT关键字后面的 select_list参数是指”选择列表”,表示需要输出的列的集合;最简单的选择列表是 * ,它可以输出后面查询的“表表达式”生成的所有列,常见的还有用逗号分隔的列表,这些值可以是 列名、别名或者值表达式;
From关键字后面的table_expression参数是指 “表表达式”,表示需要检索的范围,可以是一个表名字,或者是一个通过子查询、表连接等操作生成的表;
在最后可以加上排序声明的部分,以便于对筛选结果进行排序和限制。
在接下来的课程中,我们会由浅入深的来学习这些内容。 在这节课里,我们以两个简单的表单来演示后续数据查询的相关操作: 如图所示,一个是员工信息表,包含着20条员工信息;
另一个是部门信息表。
我们给这的两个表单设置了对应的列名称,并将两个表的数据导入数据库,以便于后续的查询操作。
在之前数据操作课程中,我们也提到可以使用 * 作为字段名,来查询数据表中的所有数据,它的写法是:
SELECT * FROM table_name;
那么此时,我们便可以通过 SELECT * FROM employee 和 SELECT * FROM department 这两个语句,来查看两个表单的内容啦。 查询结果如图所示,这个语句没有对列表和查询范围做任何的限制,是最基础的查询方法了。
通过*,我们可以查询到表单的所有字段,我们也可以通过列举字段名,来查看用户关心的字段。 例如,我们需要查询员工的姓名(e_name)和职位(e_position), 即可以通过
SELECT e_name, e_position FROM employee; 这样的语句来查询: 这样,我们可以看到查询结果中只有我们选择的两列数据了。
当我们需要对Select FROM子句查询结果行进行筛选时,可以使用WHERE语句来进行检查。它的语法格式是WHERE search_condition ,如果结果是真,那么该行保留在输出表中,否则就把它抛弃。 例如,我们在刚才那个员工信息查询语句的基础上,增加性别为男的限制,即判断e_gender='男',则可以通过下面语句完成: SELECT e_name,e_gender, e_position FROM employee WHERE e_gender='男'; 如图,我们便查出了公司所有男性员工的姓名和职位。
同理,我们也可以通过>、<等判断符号来判断日期列。 例如,我们需要查询所有2021年12月15日之后入职的员工的部分信息,我们可以在where后面对e_entrydate 字段进行判断。
这里我们写作SELECT e_id,e_name,e_gender,e_entrydate FROM employee WHERE e_entrydate > '2021-12-15' ;
我们便从所有的数据中,晒出了其中4条符合要求的数据。
除了直接对值进行比较,我们也可以对数据的范围进行检查,这里我们可以用BETWEEN … AND …来实现。 例如刚才的例子,我们将判断的入职时间定制一个空间,用BETWEEN … AND …来表示。通过在SELECT FROM后面加上 WHERE e entrydate BETWEEN '2021-12-15' AND '2022-1-6’ 这样的查询语句。
我们便可以查询在这个范围区间入职的员工。
除了进行数值区间的判断,当我们需要对多个字符串进行列举检查时,我们也可以用in关键字来查询。
在where后面,我们通过IN关键字,规定几个检查的字符串。 如我们需要查询开发经理、测试经理、市场经理等职位的人员信息,便可以通过在SELECT FROM后面加上 WHERE e_position IN ('开发经理','测试经理','市场经理');来查询。
如图所示,我们通过这个语句直接获取到了3种角色的所有人员信息。 相反,我们也 可以用 NOT IN 来删除查询结果中该列带有后面列举值的行。
如图所示,查询结果为去掉刚才3条的剩余17条结果。
接下来,我们来考虑一下更大的判断范围,比如我们需要查询一类人群,像是某种工程师、某个部门经理,此时我们很难取枚举所有的职位类型,但是他们的共同特点是包含某些相同的字符,这时候我们就可以用模糊查询来完成了。 模糊查询的关键字是LIKE,并且我们可以通过 下划线 或者百分号来完成单字符或者多字符的匹配,比如我们要查询职位为某某经理的员工,我们便可以判断为 WHERE e_position LIKE '%经理' :
这样我们就查到了开发经理、测试经理、销售经理等等所有职位名以经理结尾的员工。 又或者,我们要查找姓“张”的员工,便可以用WHERE e_name LIKE ‘张%’ 来查询:
如果需要姓“张”,同时又是单名字的员工,则可以用WHERE e_name LIKE ‘张_'来完成查询: