SQL_sql的简单查询

***********************************************声明*********************************************************************** 

原创作品,出自 “深蓝的blog” 博客,欢迎转载,转载时请务必注明出处,否则追究版权法律责任。

深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/39907707

****************************************************************************************************************************

过于简单的sql,此处就不再列举了,以下列举的已经为比较简单的基础查询操作:
在查询语句中选择指定的列就是关系数据库中所称的投影(project)。

由于字符集的不同使日期型显示往往出现问题,可以通过下面来设置:
SQL> alter session set NLS_DATE_LANGUAGE='AMERICAN';

【补充】字符集查询:

[oracle@master1 db_home]$ export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK  

--设置环境变量,格式:语言_地域(文化)_字符集
SQL> col name for a30
SQL> col value$ for a30
SQL> set linesize 200
SQL> set pagesize 200
SQL> select name,value$ from props$ where name like '%NLS%';
win下查看是这个:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
NAME                           VALUE$
------------------------------ ------------------------------
NLS_LANGUAGE                   AMERICAN       --语言
NLS_TERRITORY                  AMERICA        --地域
NLS_CURRENCY                   $
NLS_ISO_CURRENCY               AMERICA
NLS_NUMERIC_CHARACTERS         .,
NLS_CHARACTERSET               ZHS16GBK
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD-MON-RR
NLS_DATE_LANGUAGE              AMERICAN
NLS_SORT                       BINARY
NLS_TIME_FORMAT                HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY              $
NLS_COMP                       BINARY
NLS_LENGTH_SEMANTICS           BYTE
NLS_NCHAR_CONV_EXCP            FALSE
NLS_NCHAR_CHARACTERSET         AL16UTF16
NLS_RDBMS_VERSION              10.2.0.1.0

注意:解决问题的原则,客户端的字符集和oracle 数据库的字符集保持一致

补充完毕。

在sql查询中遵循以下规律:

字符和日期型数据位左对齐;
数字型数据为右对齐;

SQL查询中的算术表达式:超级简单!

例1:算术表达式
SQL> select empno,ename,sal,500+sal from emp;
EMPNO ENAME            SAL    500+SAL
----- ---------- --------- ----------
 7369 SMITH         800.00       1300
 7499 ALLEN        1600.00       2100
 7521 WARD         1250.00       1750
 7566 JONES        2975.00       3475
 7654 MARTIN       1250.00       1750
 7698 BLAKE        2850.00       3350
 7782 CLARK        2450.00       2950
 7788 SCOTT        3000.00       3500
 7839 KING         5000.00       5500
 7844 TURNER       1500.00       2000
 7876 ADAMS        1100.00       1600
 7900 JAMES         950.00       1450
 7902 FORD         3000.00       3500
 7934 MILLER       1300.00       1800
14 rows selected

例2:算术表达式:优先级判断
SQL> select empno,ename,500+sal*12 from emp;
EMPNO ENAME      500+SAL*12
----- ---------- ----------
 7369 SMITH           10100
 7499 ALLEN           19700
 7521 WARD            15500
 7566 JONES           36200
 7654 MARTIN          15500
 7698 BLAKE           34700
 7782 CLARK           29900
 7788 SCOTT           36500
 7839 KING            60500
 7844 TURNER          18500
 7876 ADAMS           13700
 7900 JAMES           11900
 7902 FORD            36500
 7934 MILLER          16100
14 rows selected

由例1、例2简单总结出优先级的规律为:
1、先乘除、后加减
2、优先级次序为自左向右
3、括号中优先
4、多重括号,内层括号运算最为优先

别名的设置

例3:
SQL> select empno as "employee number", ename name,(500+sal)*12 "annual salary" from emp;
employee number NAME       annual salary
--------------- ---------- -------------
           7369 SMITH              15600
           7499 ALLEN              25200
           7521 WARD               21000
           7566 JONES              41700
           7654 MARTIN             21000
           7698 BLAKE              40200
           7782 CLARK              35400
           7788 SCOTT              42000
           7839 KING               66000
           7844 TURNER             24000
           7876 ADAMS              19200
           7900 JAMES              17400
           7902 FORD               42000
           7934 MILLER             21600
14 rows selected
别名:
对于列名需要添加关键字“as”
对于表达式,直接在其后添加即可,非常简单

连接运算符让显示更易读

例4:使用分隔符
SQL> select ename || ' annual salary ' || (500+sal)*12 "employee's salary" from emp;
employee's salary
SMITH annual salary 15600
ALLEN annual salary 25200
WARD annual salary 21000
JONES annual salary 41700
MARTIN annual salary 21000
BLAKE annual salary 40200
CLARK annual salary 35400
SCOTT annual salary 42000
KING annual salary 66000
TURNER annual salary 24000
ADAMS annual salary 19200
JAMES annual salary 17400
FORD annual salary 42000
MILLER annual salary 21600

例5:如果觉得还不够直观的话,让我们变成中文,看看效果如下:
SQL> select ename || ' 年薪金额为: ' || (500+sal)*12 "员工2014年年薪" from emp;
员工2014年年薪
SMITH 年薪金额为: 15600
ALLEN 年薪金额为: 25200
WARD 年薪金额为: 21000
JONES 年薪金额为: 41700
MARTIN 年薪金额为: 21000
BLAKE 年薪金额为: 40200
CLARK 年薪金额为: 35400
SCOTT 年薪金额为: 42000
KING 年薪金额为: 66000
TURNER 年薪金额为: 24000
ADAMS 年薪金额为: 19200
JAMES 年薪金额为: 17400
FORD 年薪金额为: 42000
MILLER 年薪金额为: 21600

小结:
    在让显示结果更易读时,常常使用连接运算符“||”以达到预期的效果。字符串与连接运算符的搭配使用在工作中很常见,这会使数据更易读。

去重的考虑:DISTINCT运算符

格式:select *|{[distinct] 列表,...} from 表名;
列表的格式为:列名|表达式[别名]

select * from 表名:从表名所指定的表中选择所有的列
select distinct 列表 ... from 表名:为从表名所指定的表中选择列表所规定的列,但不显示重复的数据行(或记录)。


例6:在emp表内查询部门号时,会出现全部的信息,数据量小还可以,如果数据量变得巨大以后,那将变得很难筛选出有用的信息来。
SQL> select deptno from emp;
DEPTNO
------
    20
    30
    30
    20
    30
    30
    10
    20
    10
    30
    20
    30
    20
    10
14 rows selected
以下使用distinct命令,如下所示:
SQL> select distinct deptno from emp;
DEPTNO
------
    30
    20
    10
但这个方法,我们并不建议使用,因为这个distinct完成的是两个步骤,会先排序,然后从中筛选重复值。可以预见,如果在一张大表里的话,效率将会是非常低的。如果想要去重的话,我们可以使用group分组,来完成去重的目的。

为了实现去重的目的,我们可以这样执行语句,如下所示:
SQL> select deptno from emp group by deptno;
DEPTNO
------
    30
    20
    10

***********************************************声明*********************************************************************** 

原创作品,出自 “深蓝的blog” 博客,欢迎转载,转载时请务必注明出处,否则追究版权法律责任。

深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/39907707

**************************************************************************************************************************** 

 

你可能感兴趣的:(oracle,sql)