Select语句的作用:查询指定的行,查询指定的列,多张表联合查询。
Select语句可以查询指定的行,指定的列,也可以多张表联合查询来获得数据。上面的三
句话,开宗明义的定义了SQL的基本功能。SQL 语句的功能十分强大,学好了在工作中真
是事半功倍!
Select 语法 SELECT * FROM table;
大写的为关键字,小写的为我们自己指定的名称
SELECT 子句指定你所关心的列 。FROM 子句指定你所要查询的表
之所以称为简易语法,因为完全的 SELECT 语法很长,涉及到很多的逻辑关系,我们由浅
入深。虽然不能大成,但小成总会有的。
一般我们将 select 叫做 select 子句,from 叫做 from 子句。
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
实验1:书写一个最简单的sql语句,查询一张表的所有行和所有列
SELECT *|{[DISTINCT] column|expression [alias],…..} FROM table;
【简化】:Select * from emp
【点评】:查询所有的行和列
实验2:查询一张表的所有行,但列的顺序我们自己决定
SQL > Select ename , sal from emp;
【点评】:这里我们指定表中的两个列。其它的列我们不看
实验3:查询表的某些列,在列上使用表达式
SQL > Select ename , sal , sal+300 from emp;
【点评】:其中 sal+300 是表达式,它并不存在于数据库中,是计算出来的结果。也可以使用函数。表达式的运算是有优先级的,和程序中的一样,先乘除后加减,括号强制优先级。
+、-、*、/ 。先乘除,后加减,括号强制优先级。
实验4:关于null值的问题
【点评】:Null 值不等于 0,也不等于空格。Null 和已知的数值进行运算得到是 null.
Null 值是未赋值的值,不入一般的索引。(位图索引中包含 null)
Null 值是双刃剑,使用好了提高性能,你对它不了解,往往是错误的根源,切记!
实验5:在列上起一个别名
SQL > Select sal as salary, hiredate “上班日期”, sal*12 as total_salary from emp;
【【 别名的使用原则 】】
1、区分同名列的名称
2、非法的表达式合法化
3、按照你的意愿显示列的名称
4、特殊的别名要双引
5、直接写列的后面,空格间隔
6、使用 as 增加可读性
【点评】:书写 SQL 语句的原则如下
大小写不敏感,但单引和双引内的大小写是敏感的。切记!
关键字不能缩写。可以分行书写,但关键字不能被跨行书写,单引内也不要跨行书写。
一般每个子句独立占一行。可以排版来增加可读性
字符串用单引。列的别名用双引
我们在开发团队中要进行规范,大家统一大小写的书写规则,因为有个sql语句复用的问题
实验6:在显示的时候去掉重复的行
SQL > Select distinct deptno from emp;
【点评】:如果我们想去掉重复的行,我们需要 distinct 关键字。
Oracle 10g以前的版本需要排序才可以,10g以后的版本则不需要排序
实验7:显示表的部分行和部分列,用where子句过滤出想要的数据
SELECT *|{[DISTINCT] column|expression [alias],…}
FROM table
[WHERE condition(s)]
[order by column|expression| alias ];
【简化】Select deptno, ename from emp where deptno = 10;
【点评】:Where 一定要放在 from 子句的后面。 符合条件的行会被筛选出来。 Order by 放在最后,用来排序显示结果
【关系运算符】:关系运算 = 、< >、=、^= 、>= 、<= 、> 、< 、Between…and…、in
实验8:使用like查询近似的值
SQL > select ename, deptno from emp where ename like 'J%' ;
【点评】:_ 下划线通配一个,仅匹配一个字符。% 百分号通配没有或多个字符。
【补充】:当你想查询【_ , %】特殊字符时,请用 escape.
SQL > Select ename from emp where ename like ‘%s _%’ escape ‘s ’;
并不想查找 s 后必须有一个字符以上的员工,而是要剔除 s,s 出现的目的就是转义,
将_转义了,这里的_不是通配符,而是实际意义的_。
SQL > Select ename from emp where ename like ‘%/_%’escape ‘/’;
一般我们使用/来转义,以免产生歧异。
实验9:And的运算
SQL > Select ename, deptno, sal From emp Where deptno = 30 and sal>1200;
【点评】:两个(或多个)条件的交集,必须同时满足。可以多个and条件同时存在
实验10:or 的运算
SQL > Select ename, deptno, sal From emp Where deptno = 30 or sal>1200;
【点评】:两个(或多个)条件的交集,满足一个就可以。可以多个or条件同时存在
实验11:Not 的运算
SQL > Select ename, deptno, sal From emp Where ename not like 'T%';
【点评】:查询不是 T 打头的员工。
【【 运算的优先级 】】
1、算术运算
2、连接运算
3、关系运算
4、IS [NOT] NULL, LIKE, [NOT] IN
5、Between
6、not
7、and
8、Or
实验12:使用order by子句来进行排序操作
【升序】:默认是升序asc
SQL > Select ename, sal from emp order by sal;
【降序】:降序是desc
SQL > Select ename, sal from emp order by sal desc;
【隐士排序】:显示的结果里没有sal,但是按照sal的顺序显示的
SQL > Select ename from emp order by sal;
【别名排序】
SQL > Select sal*12 salary from emp order by salary;
【表达式排序】
SQL > Select sal*12 salary from emp order by sal*12;
【位置排序】:对集合操作时比较方便。
SQL > Select ename, sal from emp order by 2;
【多列排序】
SQL > Select deptno, job, ename, sal from emp order by deptno, job;