SQL语句的语法
1.查询语句:
关键字:select
select 列名,列名, from 表名;
例:select * from emp;
单行注释:--
多行注释:以/* 开始,以*/结尾
别名语法:
关键字:as
对象名 as 别名
对象名 别名
如:
select empno as 员工编号,ename 姓名,job 工作,mgr 上级编号,
hiredate 入职日期,sal 工资,comm 佣金,deptno 部门编号 from emp;
注意:给表、视图取别名时不能加as
select e.* from emp e; --select * from emp;
select e.empno,e.ename,e.job,e.sal from emp e;
select emp.empno,emp.ename,emp.job,emp.sal from emp;
2.条件查询
关键字 where
条件表达式:>,<,>=,<=,!=,=
--查询工资大于1500的员工信息
select * from emp where sal>1500;
--查询名字叫SMITH的员工的信息
select * from emp where ename='SMITH';
条件连接符:
and 表示并且,and连接的两个条件必须都成立总条件才能成立,只有一个条件成立时总条件不能成立。
or 表示或者,or连接的两个条件只要有一个条件成立时总条件就能成立,只有都不成立时总条件才不能成立
between 表示在两者之间,常用语数字类型和日期
--查询10号部门,工资大于1000的员工信息
select * from emp where deptno=10 and sal>1000;
--查询10号部门,或者工资小于2000的员工信息
select * from emp where deptno=10 or sal<2000;
--查询工资在1000到3000之间的员工信息
select * from emp where sal>=1000 and sal<=3000;
select * from emp where sal between 1000 and 3000;
--查询工资大于1000并且小于3000的员工信息
select * from emp where sal>1000 and sal<3000;
select * from emp where sal between 1000 and 3000 and sal!=1000 and sal!=3000;
点位符:_ 占用一个字符;% 占用0个或多个字符
like:模糊匹配;not like:与like相反
3.模糊查询
--查询员工姓名以S结尾的员工信息
select * from emp where ename like '%S';
--查询emp表中员工姓名的第二个字符是L的员工信息
select * from emp where ename like '_L%';
--查询emp表中员工姓名第三个字符是A的员工信息
select * from emp where ename like '__A%';
转义字符:\ 转义字符需要手动定义 escape '\'
转义字符会将紧跟在后面的一个字符当做一个普通的字符去处理
select * from emp where ename like '%\_%' escape '\';
/*此时“\”后面的“_”没有站位符的意义,处理时只会被当做普通字符对待,
查询时会查询出所有包含“_”的数据*/
select * from emp where ename like '___\_%' escape '\';
/*同理,此时“\”后面的“_”同样没有站位符的意义,但是前面的两个“_”仍然具有站位符的意义
处理过程中会查询出第三位是“_”的数据*/
select * from emp where ename like '%a%%' escape 'a';
/*只要经过“escape ' '”处理过后的任意字符均会被当做转义符对待,在这条查询语句中
“a”不会被查询,相同只有紧跟在“a”后面的“%”会具有普通字符的意义被查询*/
all、any:后面都跟一个集合或者子查询
>all:表示大于集合中最大的元素 >all(1,2,3,4,5) 等价于 >5
<all:表示小于集合中最小的元素 <all(1,2,3,4,5) 等价于 <1
>any:表示大于集合中最小的元素 >any(1,2,3,4,5) 等价于 >1
<any:表示小于集合中最大的元素 <any(1,2,3,4,5) 等价于 <5
--查询员工信息,要求员工的工资比以下的值都低 1600,2000,3000
select * from emp where sal <all(1600,2000,3000);
--查询比下任意一个(1600,2000,3000)工资高的员工信息
select * from emp where sal>any(1000,2000,3000);
--查询工资比所有人(1600,2000,3000)都高的员工信息
select * from emp where sal > all(1600,2000,3000);
简记:任意用any,所有用all
is null:为空
is not null:不为空
注意:空格不是null