Oracle从入门到精通 关于简单查询的问题

视频课程:李兴华 Oracle从入门到精通视频课程

学习者:阳光罗诺

视频来源:51CTO学院




如果要进行查询,肯定使用的时DML中的查询部分支持,相对于简单查询而言,通俗的理解,就是全部记录都查询,但是可以通过语法控制列的显示与否。
简单查询的SQL语法结构如下所示:

        ②SELECT [DISTINCT] * |列[别名],别[别名],…….①FROM 表名称[别名];

两者在执行的顺序上是先从①开始执行,然后再去执行②

举例:如果再select子句之中使用了“*”表示的是查询一张表中的所有数据列。

范例:查询emp表中的全部记录

        SELECT * FROM emp;

在本程序中,from子句是确定数据来源,来源只要是表结构(行与列的集合),而select子句控制的是所需要的数据列。

范例:进行数据的投影————控制所需要显示的数据列。
    查询每个员工的编号、姓名、基本工资

语法格式:

            SELECT empno,ename,sal,job FROM emp;
 ![](http://i2.51cto.com/images/blog/201807/03/7d3aff027d278824f6971af6d095430e.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

除了进行基本的查询列之外,在简单查询之中也支持四则运算,并且可以直接使用列的内容进行四则运算。

要求查询出每一个雇员的编号、姓名、基本年薪(月工资sal,年薪*12);

语法格式:

            SELECT empno,ename,sal*12  FROM emp;

发现此时部分的列表名称不好看,为了达到美观效果,可以进行别名的设置。
我们可以这样子去写。但是在一般情况下,**都不建议使用中文。**

        SELECT empno 员工编号,ename员工姓名,sal*12 年薪 FROM emp;

实际上在以后定义的数据表名称或者是列名称的时候中文也支持,但是你想让你开发正常点,尽量都去使用英文。
![](http://i2.51cto.com/images/blog/201807/03/2dd48cf236d99667b03a64f51166baf8.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
实际上在进行简单查询的过程之中,还支持数据的连接操作,使用“||”进行连接。

范例:观察连接。

        SELECT empno || ename FROM emp;

结果图如下:
 ![](http://i2.51cto.com/images/blog/201807/03/5cb68e816646d0fe52fd0f801e8b7acb.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
相信这个结果图,很多人看了肯定是这是什么玩意?为了使得这个连接效果变得更好看一点。我们可以在中间使用一些文字描述。
例如:现在希望最终的格式是:“编号:XXX,姓名:XXX”,对于我们的编号和姓名都是通过数据表的查询出来的数据列。针对于一些固定输出的内容就必须进行处理,对于此部分的处理暂时只考虑使用两种类型的数据:

        普通数字:那么直接编写。(SELECT ename || 1 FROM emp;)
 ![](http://i2.51cto.com/images/blog/201807/03/bfbf86d4ede2f505c969fa6766eedbd5.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
        字符串:使用单引号说明。(SELECT empno || ‘hello’ FROM emp;)
 ![](http://i2.51cto.com/images/blog/201807/03/c772c508f582a3ca36af5fca06443813.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
范例:实现格式化输出
语法格式:

            SELECT ‘编号:’ || empno || ‘姓名:’ename FROM emp;
 ![](http://i2.51cto.com/images/blog/201807/03/f62be5d5b627d609023d607cf58a7f4b.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

在简单查询中,有一个DISTINCT关键字,此关键字的主要目的是消除重复内容。

范例:查询所有雇员的职位信息。
 ![](http://i2.51cto.com/images/blog/201807/03/0c3c32fbe18d0dab3f74c70fcf61142a.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
在图中,我们会发现,又很很多人一起办公,那么现在如果不希望在里面出现重复的内容,那么就可以在SELECT子句中使用DISTINCT来消除重复的内容。
语法格式:

        SELECT DISTINCT Job FROM emp;
结果如图: 
![](http://i2.51cto.com/images/blog/201807/03/a0ff2028b3eacb77050ccc13e91f3c5f.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
注意:如果消除重复内容,指的是查询出来的数据所有列的内容都重复查询的结果。

范例:观察如下查询的结果

        SELECT DISTINCT ename,Job FROM emp;

结果如下: 
![](http://i2.51cto.com/images/blog/201807/03/cdb6a7c0e4a41d3525bbb9ddefb57e3e.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
相信你会看到又是出现14行的数据内容。此时
因为姓名和职位没有同时重复的内容,那么将无法删除掉那些重复的内容。

**总结:简单查询的最大特征在于:控制数据列,但是它无法进行数据列的控制。**

猜你喜欢

转载自blog.51cto.com/10479756/2135465