1.select-from语句;
查询列的先后顺序可以与表中的顺序不一致。目标列形式可以为列名,* ,算术表达式,聚集函数。
例:从部门表中查询所有部门信息
select * from dept;
(1)定义列的别名
要求:列名和别名之间用空格间隔,或者在 列名和别名之间加入可选关键字AS
注:列的别名可以用于SELECT和ORDER BY子句中,但是不能用在WHERE子句中。
例如:
select ename as name ,sal salary from emp;
如果如果别名包含空格,或特殊关键字符,或区分大小写,可以用双引号解决
select ename as "Name" ,sal "an salary" from emp;
(2)连接操作符||:连接符两边的列将组合成一个列作为结果输出。
select dname||'('||deptno||')' as "depts" from dept;
2.SELECT-FROM -WHERE语句
使用WHERE子句限定返回的数据行
select ename,job,sal,deptno from emp where job='CLERK';
注意:在条件语句中,字符串是区分大小写的。
(1)字符串和日期
字符串和日期型数值都要用单引号引起来,字符型数值是区分大小写,日期型数值是区分日期 表达形式的
日期形式默认的日期形式是DD-MON-YY。
例如:
select ename,job,hiredate from emp where hiredate >='17-12月-80';
(2)比较操作符
(3)其他比较运算符
Between…and…:两个值之间(包含边界)
注意:使用 BETWEEN 运算来显示在一个区间内的值
IN:等于列表中的一个
注意:使用IN运算显示列表中的值。
LIKE 模糊查询
使用LIKE来执行字符串通配符查找。
选择条件可以包含字符或数字:
% 代表零个或多个字符(任意个字符)。
_ 代表一个字符。
注意:还可以使用ESCAPE标识符实现对“%”和 “_”的查找。
ESCAPE:回避特殊符号的:使用转义符。例如:将[%]转为[\%]、[_]转为[\_],然后再加上[ESCAPE ‘\’] 即可。
NULL
注意:is (not) null来判断空值
(4)逻辑运算符
AND要求两个条件都为真结果才为真;
OR 只需要两个条件中的一个为真就能返回真值
NOT运算符:原条件为真,则结果为真,原条件为假,则结果为真
例题:寻找那些工资既不大于3000也不小于1500,也即在1500到3000范围的员工名。
上图查询语句也想当于:
select ename,sal from emp where sal between 1500 and 3000;
优先规则
使用括号可以改变运算符的优先原则
使用前:
使用后:
3.SELECT语句的分组查询
分组查询的语法格式如下:
SELECT select_value_list FROM table_name WHERE where_condition GROUP BY group_value_list HAVING group_condition
其中,
group_value_list,用于指定分组的依据,主要是列名
group_condition,定义分组后数据应当满足的条件
(1) group by子句
使用GROUP BY 子句将查询结果按group by后面的列进行分组,列值相等的为一组。
目的:为了细化集函数的作用对象。
例:在雇员表中,求每个部门的雇员数各有多少。
(2)Having子句
如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则可以使用Having子语指定筛选条件。
作用:去掉不满足条件的组
例:在雇员表中,求部门的雇员数超过5个人的部门号和部门人数
注意点:
Having子句跟在Group By子句的后面,有GROUP BY才有HAVING。
若用到了分组group by,那么投影的列要么为分组依据的列,要么为聚集函数,不能有其他情况。
group by后面的列名可以不在SELECT列表中
group by后面的列名不能用别名。
WHERE子句和HAVING短语的根本区别在于作用对象不同。
WHERE子句作用于表(是分组前的整张表),从中选择满足条件的元组(即记录)。 WHERE 子句不能用于限制分组函数。
HAVING短语作用于组(是分组后的每个小组),从中选择满足条件的组。
例题:查询每个部门中有获得奖金的雇员人数,要求只显示获得奖金人数超过3人(包含3人)的部门号和雇员人数。
(3)ORDER BY子句
使用 ORDER BY 子句对行排序
ASC:升序,默认值
DESC:降序
ORDER BY 子句出现在SELECT语句的最后
升序:select ename,sal from emporder by sal
降序:select ename,sal from emporder by sal desc
多列参与排序
ORDER BY 列表的顺序就是数据排列的顺序可以用没有在SELECT列表中出现的列进行排序