02_SQL语句基本认识(简单查询、限定查询)

SQL结构查询语言,分以下几组:
DML(Data Manipulation Language,数据操作语言),用于检索或者更新数据(增删改)
1)插入:INSERT 2) 更新:UPDATE 3) 删除:DELETE
DDL(Data Definition Language,数据定义语言),用于定义数据的结构,如创建,修改或者删除数据库对象-表、视图、索引 DDL操作是隐性提交的!不能rollback
DCL(Data Control Language,数据控制语言),定义数据库用户的权限:grant,deny,revoke
DQL查询语言 基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块:
SELECT <字段名表>
FROM <表或视图名>
WHERE <查询条件>
对于查询,我们分为简单查询,限定查询,多表查询,统计查询四类,其中简单查询是初步。数据表的组成是行与列,简单查询的最大特征是在于会将一张数据表之中的全部数据行进行显示,而用户可以通过select控制显示的数据列。

首先来了解学习SCOTT用户之中的主要数据表。在之后我们的SQL语法的学习都是来围绕这个用户下的表来完成的。
查看此用户下的所有表,语法
Select * from tab;
此时显示一共有四张表:dept,emp,salgrade,bonus,下面来观察四张表的表结构。
查看表结构 desc 表名

1,部门表 dept
字段 类型 描述
DEPTNO NUMBER 部门编号
DNAME VARCHAR2 部门名称
LOC VARCHAR2 部门位置

2,雇员表 emp
字段 类型 描述
EMPNO NUMBER 雇员编号
ENAME VARCHAR2 雇员姓名
JOB VARCHAR2 职位
MGR NUMBER 雇佣日期
SAL NUMBER 基本工资
COMM NUMBER 佣金,销售人员才有
DEPTNO NUMBER 雇员所在部门编号

3,工资等级表 salgrade
字段 类型 描述
GRADE VARCHAR2 等级
LOSAL NUMBER 最低工资
HISAL NUMBER 最高工资

4,工资表 bonus
字段 类型 描述
ENAME VARCHAR2 雇员姓名
JOB VARCHAR2 职位
SAL NUMBER 基本工资
COMM NUMBER 佣金,销售人员才有

其中emp,dept,salgrade表都存在有数据,但是只有bonus表没有数据。

简单查询
语法:
select [distinct] * | 字段 【别名】,字段 【别名】 2,控制显示的数据列
from 表名称【表别名】 1,确定数据来源
DISTINCT 表示取出重复行的数据

  • 表示查询所有行的信息, 如果不想查询所有行,可直接编写具体列名称。

    Eg:查询emp表的全部记录
    Select * from emp;

    Eg:查询每个雇员的编号empno,姓名ename和基本工资sal
    Select empno,ename,sal from emp;

#简单查询中,可以使用四则运算符
Eg:查询每一个雇员的姓名,职位和基本年薪,每个月每个人有200的饭补和100的车补夏天有4个月的高温补贴200,年底多发2个月的基本工资
Select ename,job,(sal+nvl(comm,0))12+30012+800+sal*2 from emp;

#重复
Eg:查询每个雇员的职位
Select job from emp;
Eg:查询每个雇员的姓名,职位
Select ename,job from emp;

#使用||连接符
Select ename||job from emp;

限定查询
简单查询可以显示一张数据表中的所有数据,但这也是它的一个大问题。因为在很多时候我们并不需要查询所有的数据,我们只想要知道一些特定数据,那这时候就需要对数据进行过滤,而这样的查询就叫做限定查询。
语法:
select [distinct] * | 字段 [别名][字段 [别名]]
from 表名称 [表别名]
[where 条件(s)]; 过滤想要显示的数据行

条件:
关系运算符:< > <= >= <> !=
范围运算符:BETWEEN…AND IN子句
IS NULL LIKE 子句
逻辑运算符:AND与操作 OR或操作 NOT取反

1、关系运算
Eg:要求查询出基本工资高于1500的所有雇员信息
select * from emp where sal>1500;
Eg:查询出所有职位是办事员的雇员信息
select * from emp where job=‘CLERK’;
注意:区分大小写
Eg:查询所有不是办事员的雇员信息
select * from emp where job<>‘CLERK’;
select * from emp where job!=‘CLERK’;
select * from emp where NOT job=‘CLERK’;

2,逻辑运算
Eg:查询出所有工资高于1200的销售人员信息
Select * from emp where sal>1200 and job=’SALESMAN’;
Eg:查询工资在1500-3000之间的全部雇员信息
select * from emp where sal>=1500 and sal<=3000;
select * from emp where sal between 1500 and 3000;
Eg:查询出10部门的经理数据
select * from emp where DEPTNO=10 and job=‘MANAGER’;
Eg:查询职位是办事员,或者是工资高于3000的全部信息
select * from emp where job=‘CLERK’ or sal>3000;
Eg:查询职位是办事员,或者是销售员的全部信息,并要求这些雇员的工资大于1200
select * from emp where (job=‘CLERK’ or job=‘SALESMAN’) and sal>1200;
Eg:查询所有不是办事员的雇员信息
select * from emp where job!=‘CLERK’;
select * from emp where not job=‘CLERK’;
以下用于特殊情况
select * from emp where job<>‘clerk’;
select * from emp where job>‘CLERK’;
select * from emp where job<‘CLERK’;

3、范围判断
BETWEEN 最小值 AND 最大值
Eg:查询基本工资在1500-3000的雇员信息
select * from emp where sal between 1500 and 3000;
select * from emp where sal>=1500 and sal<=3000;
Eg:查询出所有在1981年雇佣的雇员信息
select * from emp where hiredate between ‘1-JAN-81’ and ‘31-DEC-81’;

4、判断是否为空
IS(NOT) NULL,空值不是数字0或者空字符串
Eg:查询所有不领取奖金的雇员
select * from emp where comm is null;
Eg:查询出所有领取奖金的雇员信息
select * from emp where not comm is null;
select * from emp where comm is not null;

5、基数范围的判断
IN操作符表示指定一个范围
Eg:查询雇员编号是7369,7566,7799的雇员信息
select * from emp where empno=7369 or empno=7566 or empno=7799;
使用IN
select * from emp where empno in(7369,7566,7799);
使用NOT IN表示不在指定范围内
注意:关于NOT IN的问题
对于IN操作是针对基数的判断,如果此时使用not in的基数中有NULL,则没有数据会显示。不满足的原因是数据库自身的保护机制,避免大数据所带来的问题。

6、模糊查询
LIKE子句
_: 匹配单个字符
%: 匹配任意多个字符
Eg:查询雇员姓名中以字母A开头的全部雇员信息
select * from emp where ename like ‘A%’;
Eg:查询雇员姓名中第二个字母是A的全部雇员信息
select * from emp where ename like ‘_A%’;
Eg:查询雇员姓名中有字母是A的全部雇员信息
select * from emp where ename like ‘%A%’;

同理,LIKE 也可以针对各种数据类型,这些不受限制,都是用户直接执行SQL。而有一些实体层的框架上会自动帮用户加上若干验证。在使用LIKE操作如果没有编写任何查询关键字则表示查询全部。
如果现在希望我们查询到的数据可以按照指定的列由大到小或有小到大的排列可以使用ORDER BY。 ORDER BY 写在最后一行永恒在最后,在select之后执行,即ORDER BY 可以使用select子句设定的别名,说明:
该子句在所有的SQL语句最后
可以指定多个排序的字段
默认升序
降序需要手工指定
有需要的时候才进行排序
ASC 升序,默认
DESC 降序,手工设定

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值