结构(语法):
SELECT COLUMN1,COLUMN2... FROM TABLE_NAME ;
说明:数据是以表的方式存储的,一行描述一个整体的信息
每一列都有属于自己的定义,所以每一列都有一个属于自己的列名
说明:SELECT指明所要查询的东西
FROM指明从哪里查询,FROM后面跟的也叫数据源
应用:
SELECT ENAME,EMPNO,JOB FROM EMP;
说明:
必须以英文分号结尾
sql中逗号不区别中英文,但是尽量使用英文逗号
逗号前后的含义是一样的,他们属于同一属性
说明:
EMP、 DEPT 、SALGRADE 表是PL/SQL Developer中用于教学的几个表,在未来的几天学习中需熟知
DUAL表是任何用户都可读取,只有一条数据”X”,常用于没有明确指出目标表(用作运算、验算)的语句中使用
*:通配符:全部的
↓
比如
SELECT * FROM EMP;
思考:
为什么运行
SELECT 123 FROM EMP;
有14条数据?
因为表中一共就14行
查询常量就会返回 值为本身、列名为本身(如上图)
SELECT ABC FROM EMP;
——报错——
因为ABC标识符无效
需加单引号来声明其为字符串
SELECT 'ABC' FROM EMP;
特别地,因为ENAME作为列名已在表中定义,定义之后就不需要加单引号
所以我们可以直接
SELECT ENAME FROM EMP;
-+*/
TRUNC()截位
ROUND()四舍五入
·
·
·
SELECT 10+5 FROM DUAL;
SELECT SAL,SAL+100 FROM EMP;
——显示每个人的工资和加100之后的每个人的工资
SELECT ENAME,ENAME+100 FROM EMP;
——报错,无效数字,为什么呢?因为ENAME列的数据类型是字符串,不能加减数字
SELECT ENAME,ENAME+JOB FROM EMP;
——报错,无效数字,为什么呢?因为他们同属于字符串,不能互相加减
语法:
SELECT VALUE1||VALUE2||VALUE3 FROM TABLE_NAME;
用途:将不同的字符拼接到一起
1.常量+常量
SELECT 123||’ABC’ FROM DUAL;
→123ABC
SELECT ‘SMITH’||‘的名字第一个字母为’||‘A’ FROM DUAL;
→SMITH的名字第一个字母为A
SELECT ‘SMITH的名字第一个字母为A’ FROM DUAL;
→SMITH的名字第一个字母为A
2.常量+字段名
将EMP表中的数据显示为:’XXX的工资为XXX,部门编号为XXX’
←
SELECT ENAME||‘的工资为’||SAL||‘,部门编号为’||DEPTNO FROM EMP;
3.字段名+列名
4.字符串在这里视为常量,字符串的标志用’标记
语法:
SELECT COLUMN_1 AS 别名,COLUMN_2 AS 别名 FROM TABLE_NAME;
或者
SELECT COLUMN_1 别名,COLUMN_2 别名 FROM TABLE_NAME;
应用:
给EMPNO赋值1001
←
SECELT 1001 AS EMPNO FROM DUAL;
注意:
1.能不能以关键字作为别名?
有时能,有时不能
SELECT EMPNO,EMPNO AS NAME FROM EMP;
——可以的
SELECT EMPNO,EMPNO AS NUMBER FROM EMP;
——不可以,报错
SELECT EMPNO,EMPNO AS “NUMBER” FROM EMP;
——可以的
2.能不能包含数字或者特殊符号?
有时能,为了减少出错,我们每次都加双引号
SELECT EMPNO AS 1 FROM EMP;
——不可以
SELECT EMPNO AS E1A FROM EMP;
——可以
SELECT EMPNO AS E_A FROM EMP;
——可以
SELECT EMPNO AS 1EA FROM EMP;
——不可以
SELECT EMPNO AS _EA FROM EMP;
——不可以
SELECT EMPNO AS “1EA” FROM EMP;
——可以
SELECT EMPNO AS “_EA” FROM EMP;
——可以
SELECT EMPNO,EMPNO E*A FROM EMP;
——不可以
SELECT EMPNO,EMPNO “E*A” FROM EMP;
——可以的
3.能不能以汉字起别名?
能。
SELECT EMPNO,EMPNO AS 员工编号 FROM EMP;
SELECT ENAME AS 员工姓名 FROM EMP;
4.别名只在当前查询语句中起效
5.双引号只用于起别名
语法:
SELECT T.COLUMN_NAME FROM TABLE_NAME T;
最规范:
SELECT TABLE_NAME.COLUMN_NAME FROM TABLE_NAME T;
思考:
我们已经学习过了SELECT * FROM DEPT;这种语句
思考一下如果执行
SELECT * FROM EMP,DEPT;
会出现什么?
→
列数:两者相加
行数:两者各自行数相乘
那么如果执行以下语句,会出现什么?
SELECT EMPNO,ENAME,JOB,DEPTNO FROM EMP,DEPT;
——报错
为什么?
因为DEPTNO这一列在EMP和DEPT表中均存在,所以我们需要指明是哪一个表中的DEPTNO这一列
也即
SELECT EMPNO,ENAME,JOB,EMP.DEPTNO FROM EMP,DEPT;
表别名就是用在这个地方,因为有时候表名会很长,且需要在语句中多次声明,所以我们会用表别名去代替表名,来达到减少工作量的目的
也即
SELECT EMPNO,ENAME,JOB,E.DEPTNO FROM EMP E,DEPTNO;
注意:
1.表别名的中间不需要用AS隔开,否则报错
2.便于书写,减少SQL语句的长度