数据库的基本语句
各种关于数据库基本语句的汇总。
简单查询
对列进行查询。
一、 基础查询
例子:
SELECT * FROM emp;
在整个简单查询之中,主要有两个子句完成:
SELECT子句:在这个子句里面可以发现存在有如下的内容:
- *:表示查询所有的数据列;
- 列名称:表示要显示指定列,列也可以设置别名;
- DISTINCT:表示去除重复数据的显示;
FROM子句:定义要使用的数据表,就可以理解为数据来源
关于执行顺序问题,这两个子句的执行顺序:
- 第一步执行FROM子句:表示确定数据来源;
- 第二部执行SELECT子句:确定要显示的数据列。
范例:
SELECT empno,ename FROM emp;
二、 DISTINCT
例子:
SELECT DISTINCT job FROM emp;
虽然使用DISTINCT可以消除全部的重复内容,但是只局限于所有列的内容全部相同的情况。
三、 四则运算
例子:
1 | SELECT empno,ename,sal*12,sal/30 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 | SELECT * 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 | SELECT * FROM emp WHERE ename LIKE 'S%'; |
在之前的所有查询中都是针对字符数据进行的操作,而对于LIKE而言,也可以在数字或者日期类型上使用。注:
S之后可以是任意的一个数据,可能是0位、1位、多位,因此使用%
只是第二个字母为M,so,第一个字母可以是任意值,因此用”_”表示
F可能是在开头、中间、结尾,因此就必须考虑前后都有的问题,so,使用%
例子:
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 | SELECT * FROM emp |
数据排序
一、 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;