【Oracle】第1天 简单查询

简单查询

结构(语法):

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;


在这里插入图片描述

sql中的数学运算

-+*/
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 AS1EA” 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.别名只在当前查询语句中起效

起别名——表别名

语法:

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语句的长度

备注:emp和dept的建表语句(MYSQL)

1.建表
CREATE TABLE DEPT (
DEPTNO INT (2) NOT NULL,
DNAME VARCHAR (14),
LOC VARCHAR (13)
);

ALTER TABLE DEPT ADD CONSTRAINT PK_DEPT PRIMARY KEY (DEPTNO);

CREATE TABLE EMP (
EMPNO INT (4) NOT NULL,
ENAME VARCHAR (10),
JOB VARCHAR (9),
MGR INT (4),
HIREDATE date,
SAL INT (7),
COMM INT (7),
DEPTNO INT (2)
);

ALTER TABLE EMP ADD CONSTRAINT PK_EMP PRIMARY KEY (EMPNO);

ALTER TABLE EMP ADD CONSTRAINT FK_DEPTNO FOREIGN KEY (DEPTNO) REFERENCES DEPT (DEPTNO);

2.插入数据

INSERT INTO DEPT (DEPTNO, DNAME, LOC) VALUES (10, ‘ACCOUNTING’, ‘NEW YORK’);

INSERT INTO DEPT (DEPTNO, DNAME, LOC) VALUES (20, ‘RESEARCH’, ‘DALLAS’);

INSERT INTO DEPT (DEPTNO, DNAME, LOC) VALUES (30, ‘SALES’, ‘CHICAGO’);

INSERT INTO DEPT (DEPTNO, DNAME, LOC) VALUES (40, ‘OPERATIONS’, ‘BOSTON’);

COMMIT;

INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO ) VALUES ( 7369, ‘SMITH’, ‘CLERK’, 7902, str_to_date(‘17-12-1980’, ‘%d-%m-%Y’), 800, NULL, 20 );

INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO ) VALUES ( 7499, ‘ALLEN’, ‘SALESMAN’, 7698, str_to_date(‘20-02-1981’, ‘%d-%m-%Y’), 1600, 300, 30 );

INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO ) VALUES ( 7521, ‘WARD’, ‘SALESMAN’, 7698, str_to_date(‘22-02-1981’, ‘%d-%m-%Y’), 1250, 500, 30 );

INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO ) VALUES ( 7566, ‘JONES’, ‘MANAGER’, 7839, str_to_date(‘02-04-1981’, ‘%d-%m-%Y’), 2975, NULL, 20 );

INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO ) VALUES ( 7654, ‘MARTIN’, ‘SALESMAN’, 7698, str_to_date(‘28-09-1981’, ‘%d-%m-%Y’), 1250, 1400, 30 );

INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO ) VALUES ( 7698, ‘BLAKE’, ‘MANAGER’, 7839, str_to_date(‘01-05-1981’, ‘%d-%m-%Y’), 2850, NULL, 30 );

INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO ) VALUES ( 7782, ‘CLARK’, ‘MANAGER’, 7839, str_to_date(‘09-06-1981’, ‘%d-%m-%Y’), 2450, NULL, 10 );

INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO ) VALUES ( 7788, ‘SCOTT’, ‘ANALYST’, 7566, str_to_date(‘19-04-1987’, ‘%d-%m-%Y’), 3000, NULL, 20 );

INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO ) VALUES ( 7839, ‘KING’, ‘PRESIDENT’, NULL, str_to_date(‘17-11-1981’, ‘%d-%m-%Y’), 5000, NULL, 10 );

INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO ) VALUES ( 7844, ‘TURNER’, ‘SALESMAN’, 7698, str_to_date(‘08-09-1981’, ‘%d-%m-%Y’), 1500, 0, 30 );

INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO ) VALUES ( 7876, ‘ADAMS’, ‘CLERK’, 7788, str_to_date(‘23-05-1987’, ‘%d-%m-%Y’), 1100, NULL, 20 );

INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO ) VALUES ( 7900, ‘JAMES’, ‘CLERK’, 7698, str_to_date(‘03-12-1981’, ‘%d-%m-%Y’), 950, NULL, 30 );

INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO ) VALUES ( 7902, ‘FORD’, ‘ANALYST’, 7566, str_to_date(‘03-12-1981’, ‘%d-%m-%Y’), 3000, NULL, 20 );

INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO ) VALUES ( 7934, ‘MILLER’, ‘CLERK’, 7782, str_to_date(‘23-01-1982’, ‘%d-%m-%Y’), 1300, NULL, 10 );

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值