SQL基本语法

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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值