您的位置:首页 > 数据库

SQL基本语法

2016-07-25 22:22 260 查看

SQL基本语法主要由4个操作子句组成:

SELECT:对数据列进行筛选,控制行。

FROM:可以确定数据的来源,日后的多表查询在此处扩充。

WHERE:对数据进行筛选,控制行。

ORDER BY:数据排序。

基本语法:

SELECT [DISTINCT] *| 列[别名], 列[别名],....
FORM 表名称[别名]
[WHERE 条件(s)]
[ORDER BY 字段 [ASC|DESC], 字段[ASC|DESC], ......];


SCOTT用户的数据表

1、部门表:DEPT



2、雇员表:EMP



3、工资等级表:SALGRADE



4、工资表:BONUS



简单查询:

SELECT * FROM emp;

SELECT empno,ename,job FROM emp;

// DISTINCT 去重复

SELECT DISTINCT job FROM emp;

SELECT empno,ename,sal*12 icome FROM emp;

SELECT empno,ename,(sal + 200 + 100) * 12 + sal * 3 income from emp;

SELECT ‘hello’,1,empno FROM emp;

SELECT ‘姓名:’ || ename || ‘, 职位:’ || job || ‘, 工资:’ || sal FROM emp;

总结特点:简单查询就是将一张数据表之中的全部数据进行查询,可以利用SELECT子句来控制要显示的数据列,并且在SELECT子句中可以使用四则运算,同时如果多行记录出现重复利用DISTINCT消除重复显示.

限定查询:

在使用 WHERE 子句的时候可以发现,可以同时设置多个条件,那么这多个条件之间可以使用逻辑运算进行链接,逻辑运算一共分为三种:

·与(AND):多个条件同时满足;

·或(OR):多个条件满足一个即可;

·非(NOT):将TRUE变为FALSE,FALSE变为TRUE。

SELECT * FROM emp

WHERE sal > 1500;

SELECT *

FROM emp

WHERE deptno = 10 AND sal >= 3000;

虽然在SQL命令之中,所有的执行命令部分大小写,但是对于所有保存的数据依然是区分大小写的。

而且可以发现,所有的关系运算符可以在数字运算上使用,也可以在字符串上使用。

SELECT *

FROM emp

WHERE ename=’SMITH’;

SELECT *

FROM emp

WHERE job = ‘SALESMAN’ OR job = ‘CLERK’;

// 范围运算 BETWEEN … AND …

// 但是范围运算并不一定只在数字上使用,也可以在日期或者字符串上使用。

SELECT *

FROM emp

WHERE sal BETWEEN 1500 AND 3000;

SELECT *

FROM emp

WHERE NOT hiredate BETWEEN ‘01-1月-1981’ AND ‘31-12月-1981’;

SELECT *

FROM emp

WHERE ename BETWEEN ‘BLAKE’ AND ‘KING’;

// 当然在自出需要说明一点,如果需要对计算求反,可以用NOT完成。

3、IS NULL 和 IS NOT NULL

判断某一个数据是否是NULL,指的是暂时不确定的内容

SELECT *

FROM emp

WHERE comm IS NOT NULL;

SELECT *

FROM emp

WHERE comm IS NULL;

4、 范围判断: IN | NOT IN

· 语法:字段 IN | IS NOT IN(值,值,….)

SELECT *

FROM emp

WHERE empno IN (7369,7839,7566,9999);

SELECT *

FROM emp

WHERE empno NOT IN (7369,7839,7566,9999);

注意:

在使用 IN 操作的时候,如果范围之中出现了NULL,不会有任何影响;

但是如果使用的是NOT IN 操作,如果查询范围之中存在NULL,则不会有任何数据显示。

SELECT *

FROM emp

WHERE empno IN (7369,7839,7566,9999, NULL);

SELECT *

FROM emp

WHERE empno NOT IN (7369,7839,7566,9999, NULL);

// 之所以此处没有数据显示,主要是考虑到程序的操作性能,为了解决程序bug存在。

5、 模糊查询: LIKE

如果现在想要判断某一数值之中是否有指定的内容,则可以通过LIKE完成,

例如:关键字查询,如果要使用LIKE,则应该清楚两个通配符:

· _ : 匹配任意一位字符;

· % :匹配任意多位字符(0位,1位, 多位)。

// 首字母为A

SELECT *

FROM emp

WHERE ename LIKE ‘A%’;

// 第二个字母为A

SELECT *

FROM emp

WHERE ename LIKE ‘_A%’;

// 只要有A

SELECT *

FROM emp

WHERE ename LIKE ‘%A%’;

// 只要有A去反

SELECT *

FROM emp

WHERE ename NOT LIKE ‘%A%’;

1、LIKE 不光可以用于字符串数据的判断,也可以在日期或数据上使用。

2、在使用LIKE查询的时候,如果没有设置任何查询关键字,则表示查询全部。

3.5、排序

如果现在希望显示的最终结果可以按照某一列的指定顺序排序,那么可以采用 ORDER BY 子句完成,

一定要记住,在所有的SQL语法中, ORDER BY 子句是写在所有语法的最后一行的,并且是最后一步执行的。

所以在所有的查询子句之中,只有 ORDER BY 可以使用 SELECT 子句中定义的别名。

· ASC: 升序(默认)。

· DESC: 降序

// 查询所有雇员信息,要求按工资由高到低排序.

SELECT *

FROM emp

ORDER BY sal DESC;

// 查询出所有20部门雇员的信息(雇员编号,姓名,年薪,部门编号),要求按年薪排序。使用年薪 icome 别名.

SELECT empno,ename,(sal*12) income, deptno dno

FROM emp

WHERE deptno = 20

ORDER BY income;

// 要求显示所有雇员信息,显示的结果按照工资由高到低排序,如果工资相同,则按照雇佣日期由早到晚排序。

SELECT *

FROM emp

ORDER BY sal DESC, hiredate ASC;

练习:

1、选择部门30中的所有员工。

SELECT *
FROM emp
WHERE deptno=30;


2、列出所有办事员(CLERK)的姓名,编号和部门编号。

SELECT ename,empno,deptno
FROM emp
WHERE job='CLERK';


3、找出佣金高于薪金60%的员工。

SELECT *
FROM emp
WHERE  comm > 0.6 * sal ;


4、找出部门10中所有的经理(MANAGER)和部门20中所有的办事员(CLEARK)的详细资料。

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


5、找出部门10中所有经理(MANAGER),部门20中所有的办事员(CLERK),既不是经理又不是办事员但是其薪金大于或等于2000的所有员工的详细资料。

SELECT *
FROM emp
WHERE (deptno=10 AND job='MANAGER') OR (deptno=20 AND job='CLERK')
OR (job NOT IN ('MANAGER','CLERK') AND sal >= 2000);


6、找出收取佣金的员工的不同工作

SELECT DISTINCT job
FROM emp
WHERE comm IS NOT NULL;


7、找出不收取佣金或佣金低于100的员工。

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


8、显示不带有”R”的员工姓名

SELECT ename
FROM emp
WHERE ename NOT LIKE '%R%';


9、显示姓名字段的任何位置包含’A’的所有员工的姓名,显示的结果按照基本工资由高到底排序,如果基本工资相同则按雇佣年限从早到晚排序,如果雇佣日期相同,则按职位排序。

SELECT ename
FROM emp
WHERE ename LIKE '%A%'
ORDER BY sal DESC, hiredate ASC, job;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: