一、一般SELECT语句的格式如下:
1.查询指定表的所有列
select * from 表名 [where 条件] [group by分组列名] [having 聚合函数] [order by排序列名 ASC| DESC]
在表名地方,可以写多个表
2.查询指定表的部分列:
select {[distinct]列名,列名,…}from表名 [where 条件] [group by分组列名] [having 聚合函数] [order by排序列名 ASC| DESC]
其中关键字distinct表示去除部分列中重复数据,
只是在查询的时候去除,而该表内部数据纹丝不动
二、查询指定的列
如果想查询某一个或是多个指定列,可以编写类似于下面的SQL语句。
例1:查询学生表部分列,如学号、姓名
select sno,snamefrom student
其中sno,sname分别为学生表的列名,student为学生表的表名,如下图:
例2:查询学生表所有信息,如下图:
三、在SQL语句中可以使用算术表达式:
+、-、*、/。
如:selectempno,ename,sal+500 from emp;
所以sal列可以做运算,然后在查询结果中显示
【注意】select后如果加*,那么*之后不能再加别的东西,比如
select *, sname from A是错误的。
例3:如查询学生表部分列,且age列各项数据加20,如下图:
【注意】虽然查询结果中将age列所有数据加20,但是实际表中的数据没有发生改变。
四、查询语句中别名的使用
在查询语句中,我们可以为表或者列加上别名
1.在列上加别名:
(1)第一种写法
select empno as “员工编号”,ename as “员工名称” from emp
(2)第二种写法
select empno 员工编号,ename 员工名称 from emp
(3)第三种写法
select empno “员工编号”,ename “员工名称” from emp
例4:为学生表中的sno和sname添加别名,如下图:
2.为表加别名
select empno, ename from empa
即将原表名emp改成别名a
例5:根据现有的student表和sc表,查询s001学号的学生成绩。
解:先查询student表和sc表信息,如下图:
再两表联查,这个后续会学到:
对于命令:
SQL>selecta.sno,sname,score from student a, sc b
2 where a.sno = ‘s001’ and a.sno = b.sno;
其中a和b分别为student表和sc表别名。
所以为表定义别名的用处是简化代码书写,原来的student.sno现在简化成a.sno。
五、连接运算符
在SQL查询语句中可以将两列查询的结果连接在一起,通过“||”实现。
SQL>select empno || ename from emp;
例6:将student表中的sno和sname两列合并。
为了美观,可以为列加上别名:
拓展:可以为每列中的数据合并新的数据。比如把student表中sname和sno列合并且合并新数据。
【注意】查询语句select再怎么操作都不会改变表中的数据。
六、DISTINCT使用
如果查询的结果中有重复的值,可以使用DISTINCT对重复值进行过滤。
语法结构:SQL>select distinct列名from 表名;
例7:查询sc表中信息,去重复
解:首先查询sc表中全部数据
然后查询sc表的cno列数据
利用distinct去重复
七、WHERE子句使用
在SELECT语句中使用WHERE子句来过滤查询出来的结果。
语法格式:
(1)where列名比较操作符数值;
(2)where列名比较操作符表达式;
(3)where列名比较操作符列名;
Oracle提供了如下常用的比较操作符:
(1)>
(2)<
(3)=
(4)<=
(5)>=
(6)<>或 != (这俩都表示不等于)
(7)between … and …
(8)in
(9)like
例8:利用where子句过滤出student表中姓名为3个字的学生信息。
解:查询student表所有数据
利用where过滤出姓名为3个字的学生信息
其实如下图中SQL语句也是where子句,两表联查后续会详解。
例9:查询工资大于1500元的员工编号和姓名
select empno,ename from emp where sal > 1500;
例10:查询职位不是“CLERK”的员工编号和姓名
select empno,ename from emp where job <> ‘CLERK’
例11:查询工资从1500到2900的员工信息
select empno,ename from emp where sal between 1500 and 2900
例12:查询工资是1500,3000,2000的员工信息
select empno,ename from emp where sal in (1500,3000,2000);
八、AND、OR、NOT使用
AND、OR、NOT是作为Oracle中的3个逻辑运算符(操作符)。它们可以把搜索条件中的各个部分组合起来。
比如:查询工资大于1500且职位为“SALESMAN”的员工信息
SQL>selectempno, ename from emp
2 where sal > 1500 and job =’SALESMAN’;
比如:查询“comm”这列非空的员工信息
SQL>selectempno, ename, comm from emp
2 where comm is notnull’;
例13:查询player表中game_id列的非空数据和空数据
解:首先查询player表所有数据
然后查询player表game_id列中非空数据
查询player表game_id列中空数据