SQL 1. 简单数据检索+检索所需的列+列别名+按条件过滤
2011-01-19 13:25
363 查看
1)简单的数据检索
只要执行
SELECT * FROM 表名即可,比如我们执行下面的SQL语句:
SELECT * FROM T_Employee
+----------+-------+------+---------+
| FNumber | FName | FAge | FSalary |
+----------+-------+------+---------+
| DEV001 | Tom | 25 | 8300.00 |
| DEV002 | Jerry | 28 | 2300.00 |
| HR001 | Jane | 23 | 4300.00 |
| HR002 | Tina | 25 | 3300.00 |
| IT001 | Smith | 28 | 5500.00 |
| SALES001 | Timmy | 25 | 5300.00 |
| SALES002 | Stone | 35 | 8300.00 |
+----------+-------+------+---------+
2)检索出需要的列
上面的SQL语句的结果中包含了表中每一列的数据,有的时候并不需要所有列的数据。
比如我们只需要检索所有员工的工号,那么执行SELECT * FROM T_Employee, 数据库系统会将所有的列的数据从数据库中取出来,然后通过网络发送给我们,这部均会占用不必要的CPU资源和内存资源,而且会占用一定的网络带宽。虽然在中测试模式下不会有影响,但是在真实的生产环境中就会大大降低系统的吞吐量,因此最好只检索需要的列。那么如何只检索出需要的列呢?
检索出所有列的SQL语句为“SELECT * FROM T_Employee” 其中的星号“*”就意味着“所有列”,那么我们只要将星号“*”替换成要检索的列名就可以了。比如我们执行下面的SQL语句:
SELECT FNumber FROM T_Employee
+----------+
| FNumber |
+----------+
| DEV001 |
| DEV002 |
| HR001 |
| HR002 |
| IT001 |
| SALES001 |
| SALES002 |
+----------+
上面的SQL语句列出了FNumber列中的数据,那么如果想列出不知一个列中的数据呢?
非常简单,只要在SELECT 语句后列出各个列的列名就可以了,需要注意的就是各个列之间要用半角逗号“,”分隔开。比如我们执行
下面的SQL语句。
SELECT FNumber, FAge FROM T_Employee
+----------+------+
| FNumber | FAge |
+----------+------+
| DEV001 | 25 |
| DEV002 | 28 |
| HR001 | 23 |
| HR002 | 25 |
| IT001 | 28 |
| SALES001 | 25 |
| SALES002 | 35 |
+----------+------+
如果要用这种显式指定数据列的方式取出所有列,我们就可以编写下面的SQL
SELECT FNumber, FName, FAge, FSalary FROM T_Employee
+----------+-------+------+---------+
| FNumber | FName | FAge | FSalary |
+----------+-------+------+---------+
| DEV001 | Tom | 25 | 8300.00 |
| DEV002 | Jerry | 28 | 2300.00 |
| HR001 | Jane | 23 | 4300.00 |
| HR002 | Tina | 25 | 3300.00 |
| IT001 | Smith | 28 | 5500.00 |
| SALES001 | Timmy | 25 | 5300.00 |
| SALES002 | Stone | 35 | 8300.00 |
+----------+-------+------+---------+
3) 列别名
由于编码命名规范、编程框架要求等的限制,数据表的列名有的时候意思比赛非常移动,比如T_Employee的名字字段名称为FName,而如果我们能用Name甚至“姓名”来代表这个字段就更清晰易懂了。可是字段名已经不能更改了,那么难道就不能用别的名字来使用已有字段来吗?
当然不是!就像可以为每个人取一个外号一样,我们也可以为字段去一个别名,这样就可以用这个别名来引用这个列了。别名的定义格式为“列名 AS 别名”,比如我们要为FNumber字段去别名为Number1,FName字段去别名为Name, Fage字段别名为Age,FSalary字段去别名为Salary,那么编写下面的SQL即可:
SELECT FNumber AS Number1, FName AS Name, FAge AS Age, FSalary AS Salary FROM T_Employee
+----------+-------+------+---------+
| Number | Name | Age | Salary |
+----------+-------+------+---------+
| DEV001 | Tom | 25 | 8300.00 |
| DEV002 | Jerry | 28 | 2300.00 |
| HR001 | Jane | 23 | 4300.00 |
| HR002 | Tina | 25 | 3300.00 |
| IT001 | Smith | 28 | 5500.00 |
| SALES001 | Timmy | 25 | 5300.00 |
| SALES002 | Stone | 35 | 8300.00 |
+----------+-------+------+---------+
这里的执行结果和“SELECT FNumber, FName, FAge, FSalary FROM T_Employee”执行结果一样,唯一不同的地方就是表头的列名就是我们为割裂设定的别名。
定义别名的时候 “AS
” 不是必须的,而是可以省略的,比如下面的SQL也是正确的:
SELECT FNumber Number1, FName Name, FAge Age, FSalary Salary FROM T_Employee
如果数据库系统支持中文列名,那么还可以用中文来为列设定别名,这样可读性就更强烈,比如在MS SQL Server中文版中下面的SQL:
SELECT FNumber 工号, FName 姓名, FAge 年龄, FSalary 工资 FROM T_Employee
4)按条件过滤
前面演示的例子都是检索出表中所有的数据,不过在很多情况下我们需要一定的过滤条件来检索表中的部分数据,这个时候可以先检索出表中所有的数据然后再检查每一行是否符合指定的过滤条件。比如我们要检索出所有工资少于5000元的员工的姓名,那么可以编写下面的代码来处理。
这种处理方式非常清晰、简单,处理小数据量及简单过滤条件时没有什么不妥的地方,但是如果数据表中有大量的数据(数亿万计甚至百万、千万) 或者过滤条件非常复杂时就会带来很多问题,如下所示:
由于表中所有的数据都从数据库中检索出来,所以会有非常大的内存消耗及网络资源消耗。
需要逐条检索每条数据是否符合过滤条件,所以检索速度非常慢,当数据量大的时候这种速度是让人无法忍受的。
无法实现复杂的过滤条件。如果要实现“检索工资小于5000或者年龄介于23岁~28之间的员工姓名”这样的逻辑,
就要编写复杂的判断语句,而如果关联其他表进行查询的话,则会更加复杂。
数据检索是虎踞哭系统的一个非常重要的任务,他内置了对按条件过滤数据的支持,只要为SELECT 语句指定WHERE 语句即可,其语法与上一章中奖的数据更新、数据删除的WHERE语句非常相似。比如完成"检索出所有工资少于5000元的与员工的姓名"这样的功能可以用下面的SQL语句:
SELECT FName FROM T_Employee WHERE FSalary < 5000
执行结果:
+-------+
| FName |
+-------+
| Jerry |
| Jane |
| Tina |
+-------+
WHERE字句还支持复杂的过滤条件,下面的SQL语句用来检索出所有工资少于5000元或者年龄大于25岁的与员工的所有信息:
SELECT * FROM T_Employee WHERE FSalary < 5000 OR FAge < 25
执行结果:
+----------+-------+------+---------+
| FNumber | FName | FAge | FSalary |
+----------+-------+------+---------+
| DEV002 | Jerry | 28 | 2300.00 |
| HR001 | Jane | 23 | 4300.00 |
| HR002 | Tina | 25 | 3300.00 |
| IT001 | Smith | 28 | 5500.00 |
| SALES002 | Stone | 35 | 8300.00 |
+----------+-------+------+---------+
只要执行
SELECT * FROM 表名即可,比如我们执行下面的SQL语句:
SELECT * FROM T_Employee
+----------+-------+------+---------+
| FNumber | FName | FAge | FSalary |
+----------+-------+------+---------+
| DEV001 | Tom | 25 | 8300.00 |
| DEV002 | Jerry | 28 | 2300.00 |
| HR001 | Jane | 23 | 4300.00 |
| HR002 | Tina | 25 | 3300.00 |
| IT001 | Smith | 28 | 5500.00 |
| SALES001 | Timmy | 25 | 5300.00 |
| SALES002 | Stone | 35 | 8300.00 |
+----------+-------+------+---------+
2)检索出需要的列
上面的SQL语句的结果中包含了表中每一列的数据,有的时候并不需要所有列的数据。
比如我们只需要检索所有员工的工号,那么执行SELECT * FROM T_Employee, 数据库系统会将所有的列的数据从数据库中取出来,然后通过网络发送给我们,这部均会占用不必要的CPU资源和内存资源,而且会占用一定的网络带宽。虽然在中测试模式下不会有影响,但是在真实的生产环境中就会大大降低系统的吞吐量,因此最好只检索需要的列。那么如何只检索出需要的列呢?
检索出所有列的SQL语句为“SELECT * FROM T_Employee” 其中的星号“*”就意味着“所有列”,那么我们只要将星号“*”替换成要检索的列名就可以了。比如我们执行下面的SQL语句:
SELECT FNumber FROM T_Employee
+----------+
| FNumber |
+----------+
| DEV001 |
| DEV002 |
| HR001 |
| HR002 |
| IT001 |
| SALES001 |
| SALES002 |
+----------+
上面的SQL语句列出了FNumber列中的数据,那么如果想列出不知一个列中的数据呢?
非常简单,只要在SELECT 语句后列出各个列的列名就可以了,需要注意的就是各个列之间要用半角逗号“,”分隔开。比如我们执行
下面的SQL语句。
SELECT FNumber, FAge FROM T_Employee
+----------+------+
| FNumber | FAge |
+----------+------+
| DEV001 | 25 |
| DEV002 | 28 |
| HR001 | 23 |
| HR002 | 25 |
| IT001 | 28 |
| SALES001 | 25 |
| SALES002 | 35 |
+----------+------+
如果要用这种显式指定数据列的方式取出所有列,我们就可以编写下面的SQL
SELECT FNumber, FName, FAge, FSalary FROM T_Employee
+----------+-------+------+---------+
| FNumber | FName | FAge | FSalary |
+----------+-------+------+---------+
| DEV001 | Tom | 25 | 8300.00 |
| DEV002 | Jerry | 28 | 2300.00 |
| HR001 | Jane | 23 | 4300.00 |
| HR002 | Tina | 25 | 3300.00 |
| IT001 | Smith | 28 | 5500.00 |
| SALES001 | Timmy | 25 | 5300.00 |
| SALES002 | Stone | 35 | 8300.00 |
+----------+-------+------+---------+
3) 列别名
由于编码命名规范、编程框架要求等的限制,数据表的列名有的时候意思比赛非常移动,比如T_Employee的名字字段名称为FName,而如果我们能用Name甚至“姓名”来代表这个字段就更清晰易懂了。可是字段名已经不能更改了,那么难道就不能用别的名字来使用已有字段来吗?
当然不是!就像可以为每个人取一个外号一样,我们也可以为字段去一个别名,这样就可以用这个别名来引用这个列了。别名的定义格式为“列名 AS 别名”,比如我们要为FNumber字段去别名为Number1,FName字段去别名为Name, Fage字段别名为Age,FSalary字段去别名为Salary,那么编写下面的SQL即可:
SELECT FNumber AS Number1, FName AS Name, FAge AS Age, FSalary AS Salary FROM T_Employee
+----------+-------+------+---------+
| Number | Name | Age | Salary |
+----------+-------+------+---------+
| DEV001 | Tom | 25 | 8300.00 |
| DEV002 | Jerry | 28 | 2300.00 |
| HR001 | Jane | 23 | 4300.00 |
| HR002 | Tina | 25 | 3300.00 |
| IT001 | Smith | 28 | 5500.00 |
| SALES001 | Timmy | 25 | 5300.00 |
| SALES002 | Stone | 35 | 8300.00 |
+----------+-------+------+---------+
这里的执行结果和“SELECT FNumber, FName, FAge, FSalary FROM T_Employee”执行结果一样,唯一不同的地方就是表头的列名就是我们为割裂设定的别名。
定义别名的时候 “AS
” 不是必须的,而是可以省略的,比如下面的SQL也是正确的:
SELECT FNumber Number1, FName Name, FAge Age, FSalary Salary FROM T_Employee
如果数据库系统支持中文列名,那么还可以用中文来为列设定别名,这样可读性就更强烈,比如在MS SQL Server中文版中下面的SQL:
SELECT FNumber 工号, FName 姓名, FAge 年龄, FSalary 工资 FROM T_Employee
4)按条件过滤
前面演示的例子都是检索出表中所有的数据,不过在很多情况下我们需要一定的过滤条件来检索表中的部分数据,这个时候可以先检索出表中所有的数据然后再检查每一行是否符合指定的过滤条件。比如我们要检索出所有工资少于5000元的员工的姓名,那么可以编写下面的代码来处理。
result = executeQuery("SELECT FName, FSalary FROM T_Employee"); for(i=0;i<result.count;i++){ salary = result[i].get("FSalary"); if(salary < 5000){ name = result[i].get("FName"); print(name + "的工资授予 5000元,为: " + salary); } } |
由于表中所有的数据都从数据库中检索出来,所以会有非常大的内存消耗及网络资源消耗。
需要逐条检索每条数据是否符合过滤条件,所以检索速度非常慢,当数据量大的时候这种速度是让人无法忍受的。
无法实现复杂的过滤条件。如果要实现“检索工资小于5000或者年龄介于23岁~28之间的员工姓名”这样的逻辑,
就要编写复杂的判断语句,而如果关联其他表进行查询的话,则会更加复杂。
数据检索是虎踞哭系统的一个非常重要的任务,他内置了对按条件过滤数据的支持,只要为SELECT 语句指定WHERE 语句即可,其语法与上一章中奖的数据更新、数据删除的WHERE语句非常相似。比如完成"检索出所有工资少于5000元的与员工的姓名"这样的功能可以用下面的SQL语句:
SELECT FName FROM T_Employee WHERE FSalary < 5000
执行结果:
+-------+
| FName |
+-------+
| Jerry |
| Jane |
| Tina |
+-------+
WHERE字句还支持复杂的过滤条件,下面的SQL语句用来检索出所有工资少于5000元或者年龄大于25岁的与员工的所有信息:
SELECT * FROM T_Employee WHERE FSalary < 5000 OR FAge < 25
执行结果:
+----------+-------+------+---------+
| FNumber | FName | FAge | FSalary |
+----------+-------+------+---------+
| DEV002 | Jerry | 28 | 2300.00 |
| HR001 | Jane | 23 | 4300.00 |
| HR002 | Tina | 25 | 3300.00 |
| IT001 | Smith | 28 | 5500.00 |
| SALES002 | Stone | 35 | 8300.00 |
+----------+-------+------+---------+
相关文章推荐
- Hive&SqlServerql:inner join on条件中如果两边都是空值的情况下,关联结果中会把数据给过滤掉。
- 【SQL】检索满足条件的最大值的数据集合
- 优化原则测试1:先执行过滤掉大部份数据的SQL语句,通过过滤条件搭配减少结果集;
- SQL-Server中数据检索(简单查询)
- 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma
- 第3天-sql基本检索与数据过滤
- 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma
- SQL2005数据类型简单整理
- 数据列过滤条件常用处理
- mysql 数据条件过滤查询练习
- InfoPath进阶之一:前言及简单读取SQL或列表的数据(转)
- Oracle SQL获取简单的数据表目录信息,列信息
- MariaDB SQL 过滤数据
- 简单数据访问类,生成简单SQL,自动转换成java对象
- ASP.NET中DropDownList控件的简单使用--DDL绑定数据库表中值,选择DDL中值直接检索数据
- ADO.NET使用数据集检索数据简单实例
- ScottGu之博客翻译-第6部分-用存储过程检索数据-LINQ to SQL (Part 6 - Retrieving Data Using Stored Procedures)
- 解析TCP数据包,针对符合端口条件的数据关键字过滤
- 数据库笔记6:检索,排序检索,过滤数据
- 常用SQL语句实例大全(含过滤及删除重复数据、导入导出数据等)