OCP培训课程:SQL之使用SELECT语句检索数据
最新学讯:近期OCP认证正在报名中,因考试人员较多请尽快报名获取最近考试时间,报名费用请联系在线老师,甲骨文官方认证,报名从速!
我要咨询OCP培训课程:SQL之使用SELECT语句检索数据
select语句有三个功能:投影、选择和多表联合,投影指选择表的某些列,选择指选择表的某些行,多表联合指从多张表获取数据。这一章主要讲投影的功能。
1、基本SELECT语句语法
包含select子句和from子句:
select子句列出要选择的列,其中*表示选择表中的所有列,distinct关键字表示去掉重复的列,多列之间使用逗号隔开,也可以使用表达式,可以为列或者表达式指定一个别名
from子句指明这些列来自于哪张表
例子:使用*选择所有表中列
SQL> select * from departments;
例子:使用列名字选择指定的列
SQL> select department_id,location_id from departments;
2、SQL语句的一些书写规范
SQL语句不区分大小写
SQL语句可以写在一行,也可以跨行
关键字不能缩写及跨行
子句一般单独一行
可以使用缩进提高可读性
在SQL*PLUS中使用分号作为语句的结束
3、列的默认显示
在SQL Developer中:
列的对齐方式:居中
列头显示方式:大写
在SQL*PLUS和PL/SQL Developer中:
字符和日期列左对齐
数字列右对齐
列头显示方式:大写
4、算术表达式
使用算术运算符创建表达式。
例子:使用+
SQL> SELECT last_name,salary,salary+300 from employees;
例子:使用*和+
SQL> SELECT last_name,salary,12*salary+100 from employees;
例子:使用括号改变运算优先级
SQL> SELECT last_name,salary,12*(salary+100) from employees;
5、null
null表示一个未知的值,既不是零也不是空格。
例子:查看人员表中的提成,其中有的人的提成为null
SQL> SELECT last_name,job_id,salary,commission_pct from employees;
null具有传染性,也就是说null和任何值进行运算都为null。
例子:使用包含null的提成字段进行算术运算,结果也是null
SQL> select last_name,12*salary*commission_pct from employees;
6、定义列别名
前面的SQL语句一个列的名字为12*SALARY*COMMISSION_PCT,很长,我们可以使用一个有意义的简短别名来替代他,更易读。
可以直接在列名字后面加上别名,也可以使用as关键字。
例子:使用as关键字加列别名以及直接加上列别名
SQL> select last_name as name,commission_pct comm from employees;
NAME COMM
------------------------- ----------
OConnell
别名和列名一样,默认都是以大写显示,如果别名包含空格,特殊字符或者不想使用大写显示,就需要加上双引号。
例子:加上双引号的别名
SQL> select last_name "Name",salary*12 "Annual Salary" from employees;
Name Annual Salary
------------------------- -------------
OConnell 31200
7、连接操作符||
Oracle中的连接操作符使用两个竖杠表示,可以将列或者字符串与其他列连接起来,可以把多个字段连接成一个字段来显示。
例子:2个字段连接成1个字段显示
SQL> select last_name||job_id as "Employees" from employees;
Employees
-----------------------------------
AbelSA_REP
AndeSA_REP
AtkinsonST_CLERK
8、字变量
字变量是select语句中个一个字符,一个数字或者一个日期
日期和字符字变量的值必须使用单引号括起来
输出的每一行都会显示一次字变量字符
例子:使用单引号将字符字变量括起来,每一行都会显示一次这个字变量
SQL> select last_name||' is a '||job_id as "Employee Details" from employees;
Employee Details
-----------------------------------------
Abel is a SA_REP
Ande is a SA_REP
Atkinson is a ST_CLERK
例子:把人员表某些数据转换成insert语句,拷贝到其他数据库去执行,满足临时少量数据迁移的需求
SQL> select 'insert into employee(employee_id,last_name) values(' || employee_id || ',''' || last_name || ''');' as ttt from employees;
TTT
--------------------------------------------------------------------------------
insert into employee(employee_id,last_name) values(174,'Abel');
insert into employee(employee_id,last_name) values(166,'Ande');
这里如果要显示字变量里面的单引号,那就使用两个单引号,也可以使用q操作符,同时还需要加上分割符号,可以是方框,问号,小括号,但是必须要配对。
例子:使用q操作符显示字变量里面的单引号
SQL> select department_name||q'[,it's assigned Manager Id: ]'||manager_id AS "Department and Manager" from departments;
Department and Manager
--------------------------------------------------------------------------------
Administration,it's assigned Manager Id: 200
Marketing,it's assigned Manager Id: 201
这种方式平常用得少一些
9、使用distinct去掉重复的结果
使用select语句查询的结果默认显示所有的行,包括重复的行,可以使用distinct关键字去重。
例子:对比不使用与使用distinct的结果
SQL> select department_id from employees;
DEPARTMENT_ID
-------------
50
不使用distinct,结果有107行
SQL> select distinct department_id from employees;
DEPARTMENT_ID
-------------
100
使用distinct,结果只有12行
例子:distinct后面跟多个字段,表示多个字段联合起来唯一
SQL> select distinct department_id,manager_id from employees;
DEPARTMENT_ID MANAGER_ID
------------- ----------
40 101
10、SQL开发环境
我们平常用得更多的SQL开发环境是PL/SQL Developer,这里介绍了Oracle自己的SQL Developer,我们简单看一下。
首先启动SQL Developer。
[root@Oracletest1 ~]# su - Oracle
[Oracle@Oracletest1 ~]$ export DISPLAY=192.168.230.1:0.0
[Oracle@Oracletest1 ~]$ cd /u01/app/oracle/product/11.2.0/dbhome_1/sqldeveloper/
[Oracle@Oracletest1 sqldeveloper]$ ./sqldeveloper.sh
新建连接。
输入连接名称、用户名、密码、服务器地址、端口及SID,点击“Test”,测试成功,点击“Connect”,进行连接。
就可以看到相关对象了。
这个SQL Developer功能和PL/SQL Developer差不多,平时用得也比较少,就不多讲了。