各种关于数据库基本语句的汇总。

简单查询

对列进行查询。

一、 基础查询

例子:

SELECT * FROM emp;
  1. 在整个简单查询之中,主要有两个子句完成:

    • SELECT子句:在这个子句里面可以发现存在有如下的内容:

      • *:表示查询所有的数据列;
      • 列名称:表示要显示指定列,列也可以设置别名;
      • DISTINCT:表示去除重复数据的显示;
    • FROM子句:定义要使用的数据表,就可以理解为数据来源

  2. 关于执行顺序问题,这两个子句的执行顺序:

    • 第一步执行FROM子句:表示确定数据来源;
    • 第二部执行SELECT子句:确定要显示的数据列。

范例:

SELECT empno,ename FROM emp;

二、 DISTINCT

例子:

SELECT DISTINCT job FROM emp;

虽然使用DISTINCT可以消除全部的重复内容,但是只局限于所有列的内容全部相同的情况

三、 四则运算

例子:

1
2
3
4
5
SELECT empno,ename,sal*12,sal/30 FROM emp;

SELECT empno,ename,sal*12+5000 FROM emp;

SELECT empno,ename,(sal+200)*12+5000 FROM emp;

四、 AS(别名)

例子:

SELECT empno,ename,(sal+200)*12+5000 AS 年薪 FROM emp;

此处是否加上 AS 对于最终的结果没有任何区别,但是,如果要进行别名的设置,别名在程序之中肯定是没有用的,那么显示中用处也不大,而且,一定不要使用中文

五、 ||(表示进行连接)

例子:

SELECT'编号是:' || empno || '的雇员姓名是:' || ename || ',基本工资是:' FROM emp;

在进行简单查询的时候,可以直接利用“ || ”进行字符串或者列数据的连接操作。

注:

简单查询是将一张表中的全部或者部分进行显示的操作


限定查询

WHERE语句,对行进行操作。

筛选就是限定查询的功能。

例子:

SELECT * FROM emp WHERE sal>1500;

1. 这个语法中,就是比之前的语法多了一个WHERE子句,在WHERE子句中可以设置一系列的过滤条件。这些过滤条件可以设置多个,这些条件之间可以利用逻辑运算进行连接.
2. 语句的执行顺序:
第一步:执行FROM子句,来控制数据的来源;
第二步:执行WHERE子句,使用限定符进行数据的行过滤;
第三步:执行SELECT子句,确定要显示的数据列。

### 一、 关系运算符

例子:

SELECT * FROM emp WHERE job='CLERK';

SELECT * FROM emp WHERE job<>'CLERK';

SELECT * FROM emp WHERE job!='CLERK';

SELECT * FROM emp WHERE job='SALESMAN' AND sal>1200;

SELECT * FROM emp WHERE (deptno=10 AND job='MANAGER') OR (deptno=20 AND job='CLERK');

二、 BETWEEN AND

范围过滤查询

例子:

SELECT * FROM emp WHERE sal BETWEEN 1500 AND 3000;

SELECT * FROM emp WHERE hiredate BETWEEN '01-1月 -81' AND '31-12月 -81';

注:

BETWEEN AND:包含最大最小值,即包含1500和3000

hiredate:跟日期有关的必须用到hiredate,目的是为了实现日期和字符串数据之间的转换操作功能

三、 NULL判断

null不能用等判断

so:

1
2
3
4
5
6
7
SELECT * FROM emp WHERE comm IS NOT NULL

SELECT * FROM emp WHERE comm IS NULL AND sal>2000;

SELECT * FROM emp WHERE comm IS NULL OR comm<100;

SELECT DISTINCT job FROM emp WHERE comm IS NOT NULL;

注:

要找的是职位job,那么很有可能出现重复,重复数据必须使用DISTINCT消除

四、 IN、NOT IN

列表范围查找。

  • 在指定数据范围内:字段 | 值 IN(值,值。。。)
  • 不在指定数据范围内:字段 | 值 NOT IN(值,值。。。)

题目:查询出雇员编号是7369、7788、7566的雇员信息

(1)在面对这样的操作,如果此时不使用IN判断符就可以利用多个条件并且使用OR连接

SELECT * FROM emp WHERE empno=7369 OR empno=7788 OR empno=7566;

(2)下面将代码修改为IN

SELECT * FROM emp WHERE empno IN (7369,7788,7566);

(3)不在范围之内用NOT IN

SELECT * FROM emp WHERE empno NOT IN (7369,7788,7566);

注意

在使用NOT IN操作的时候有一点需要注意。关于null的问题。

使用NOT IN时,范围数据之中不可以包含null数据

五、 LIKE

模糊查询。

例子:

1
2
3
4
5
SELECT * FROM emp WHERE ename LIKE 'S%';

SELECT * FROM emp WHERE ename LIKE '_M%';(名字第二个字母是M)

SELECT * FROM emp WHERE ename LIKE "%F%";(任意位置包含F)

注:

S之后可以是任意的一个数据,可能是0位、1位、多位,因此使用%

只是第二个字母为M,so,第一个字母可以是任意值,因此用”_”表示

F可能是在开头、中间、结尾,因此就必须考虑前后都有的问题,so,使用%

在之前的所有查询中都是针对字符数据进行的操作,而对于LIKE而言,也可以在数字或者日期类型上使用。

例子:

SELECT * FROM emp WHERE sal LIKE '%1%' OR hiredate LIKE '%81%';

注:

如果在设置模糊查询的时候不设置关键字,就表示查询全部

SELECT * FROM emp WHERE sal LIKE '%%' OR hiredate LIKE '%%'

题目:

找出部门10中所有经理,部门20中所有办事员(CLERK),既不是经理又不是办事员但是其薪金大于或等于2000的所有员工的详细资料,并且要求这些雇员的姓名之中包含有字母S或字母K。

答案:

1
2
3
4
5
SELECT * FROM emp 
WHERE ((deptno=10 AND job='MANAGER')
OR (deptno=20 AND job='CLERK')
OR (job NOT IN('MANAGER','CLERK') AND sal>2000))
AND (ename LIKE '%S%' OR ename LIKE '%K%');

数据排序

一、 ORDER BY

在ORDER BY子句之中可以指定要进行排序的字段,而后字段有两种排序模式:

  • 升序:ASC,默认
  • 降序:DESC,需要编写的

在所有的子句之中,一定要记住,ORDER BY子句是放在查询语句的最后一行,是最后一个执行的,他的执行顺序:FROM、WHERE、SELECT、ORDER BY,既然ORDER BY在SELECT之后执行,那么就可以表示ORDER BY子句可以使用SELECT子句中设置的别名。

例子:

(1)按照基本工资从高到低进行排序

SELECT * FROM emp ORDER BY sal DESC;

(2)查询出办事员的详细资料,并且按照基本工资由低到高排序

SELECT * FROM emp WHERE job='CLERK' ORDER BY sal ASC;

(3)按照基本工资从高到低排序,如果工资相同则按照雇用日期进行从早到晚的排序

SELECT * FROM emp ORDER BY sal DESC,hiredate ASC;