一、select语句的基本结构
select 子句 from 子句 [where 子句] [group by 子句] [having 子句] [order by 子句]
select * from emp;
select empno , ename from emp; /*投影,选取某些字段的数据 */
/*选择:查询符合条件的记录*/
查询工资不高于2500的员工工资
SELECT * from emp where sal <= 2500;
给表和字段取别名
select * from emp;SELECT empno as 员工编号 , ename as 姓名 from emp;
SELECT empno 员工编号 , ename 姓名 from emp;
SELECT empno as "员工编号" , ename as "姓名" from emp; //可以双引号
SELECT empno as '员工编号' , ename as '姓名' from emp; //不能单引号SELECT * from emp 员工表; //不能加as
算术运算符
SELECT 10+5 from dual; /*dual 是一个用来显示单行单列的一张系统表 */
SELECT 10-5 from dual;
SELECT 10*5 from dual;
SELECT 10/5 from dual;
SELECT 10%5 from dual; //报错 因为%是一种通配符
SELECT MOD(10,5) from dual; //求余
SELECT 10-5.8 from dual; //4.2 挺精确例:--把所有的员工的工资加1000元
SELECT ename , sal+1000 as 加薪后工资 from emp;
连接运算符
SELECT empno||ename as 员工编号和性名 from emp;
select concat(empno,ename) as 员工编号和性名 from emp;select ename||'的月薪是'||sal as 员工月薪 from emp;
select ename||'的年薪是'||sal*12 员工年薪 from emp;
在日期上使用加法或减法运算符,加减操作的数字表示天数。
例如,在日期上加3天
SELECT TO_DATE('2012-10-12')+3 from dual; //日期格式写你设置的格式
在某日期上减3天
SELECT TO_DATE('2012-10-12')-3 from dual;
今天在过100天是几月几号
SELECT sysdate+100 from dual;
二、比较运算符或者关系运算符
= 等于(赋值也是这个)
<>或!= 不等于
< 小于
> 大于
<= 小于等于
>= 大于等于
ANY 比较值列表中的任何一个值
ALL 比较列表值中的所有值
=运算符
select * from emp;
--查询job为MANAGER的员工信息
SELECT * from emp where job = 'MANAGER'; /*区分大小写*/
update emp set hiredate = '1998-10-25' where empno = 7499;
<>和!=运算符
--查找部门编号DEPTNO不等于20的员工信息
select * from emp where deptno <> 20;
select * from emp where deptno != 20;
ANY运算符
例如:查询emp表,empno值只要大于列表(7369,7521,7499)中的任意一个值即满足条件
select * from emp where empno > ANY(7369,7521,7499);
等同于:
select * from emp where empno > 7369 or empno > 7521 or empno > 7499;
ALL运算符
例如,查询emp表,empno值只要大于列表(7369,7521,7499)中的所有值即满足条件
select * from emp where empno > ALL(7369,7521,7499);
等同于:
select * from emp where empno > 7369 and empno > 7521 and empno > 7499;
三、SQL运算符
SQL运算符可以进行模式匹配,像字符串、列表值、NULL值。
LIKE:匹配字符串
IN:匹配列表值
BETWEEN:匹配范围值
IS NULL:匹配空值
IS NAN:匹配非数字值--同样可以在上述运算符前加NOT取反
如:NOT LIKE,NOT BETWEEN,IS NOT NULL,IS NOT NAN
NULL实现空值查询
--例如:查找comm字段等于null的员工信息
select * from emp where comm is null;
--例如:查找comm字段不等null的员工信息
select * from emp where comm is not null; //null 不能使用 <>或!=
--处理NULL值
NULL值被查询出来的时候没有显示信息,如何告知用户这是空字符串还是NULL,
这可以通过NVL()函数来进行处理。是NULL用0替代。
select empno,ename,NVL(comm,0) FROM emp;
LIKE实现模糊查询
例如:查找名字以S开头的员工资料
select * from emp where ename like 'S%';可以使用普通字符及通配符进行组合,通配符如下:
下划线(_):表示匹配某个位置的字符
百分号(%):表示在某个位置的任意个字符
例如:匹配'_o%',表示第一个字母任意,第二个是o,%表示最后可以是任意个字母如果要查询实际的下划线或百分号就需要使用ESCAPE选项区分通配符
ESCAPE选项告知数据库如何区分通配符和要匹配的字符,可以使用反斜杠(\),
例如:查找员工姓名中带%的员工姓名
select ename from emp where ename LIKE '%\%%' ESCAPE '\';
insert into emp values(7988,'张%风','CLERK',7902,'1998-10-22',1000,200,20);
查找名字第二个是A的员工资料
select * from emp where ename like '_A%';
BETWEEN实现范围查询
例如:查找工资在1500-3000之间的员工资料
select * from emp where sal between 1500 and 3000; //别写颠倒了
等同于:
select * from emp sal >= 1500 and sal <= 3000;
IN筛选某列的值是否在列表中
例如:查询empno在(7369,7521,7499)中的员工
select * from emp where empno in(7369,7521,7499);
例如:查询empno不在(7369,7521,7499)中的员工
select * from emp where empno not in(7369,7521,7499);
EXISTS(存在)运算符
select * from emp where exists(select * from emp);
不关心括号到底是啥值,只关心能不能查出记录,如果能查询出则执行where前的语句
select * from emp where exists(select * from emp where empno = 9999);
逻辑运算符
AND运算符 ---> 与(并且)
OR运算符 ---> 或(或者)
排序(ORDER BY)
可以使用ORDER BY对查询的结果进行排序,可以对一列或多列进行排序,
ORDER By必须在FROM子句后或者WHERE子句后(如果有WHERE子句)。
例如:查询EMP表,并对ename列进行排序
select * from emp order by ename;默认情况下,ORDER BY是按照升序(ASC)排序,也可以使用DESC指定为
降序排序。
例如:查询EMP表,先按empno升序排序,再按ename降序排序
select * from emp order by empno ASC,ename DESC;同样可以是列的位置编号,指定哪列需要需要进行排序
例如:查询emp表,要对查询的第二列ename列进行降序排序
select * from emp order by 2 DESC;
DISTINCT
在SELECT语句中,使用DISTINCT关键字删除重复的行
例如:查询公司有多少个职位类型。(查询emp表中,删除重复的job值)
select distinct job from emp;
SELECT中使用参数
语法:使用&+参数名
例如:查询员工编号为某数值的员工
select * from emp where empno = &arg;