目录
一.查询加强:
1.日期类型的比较:
SELECT * FROM emp
WHERE hiredate > '1992-01-01'
2.like操作符的使用:
%表示0-多个任意字符,_表示单个任意字符。
--查询名字以S开头的员工
SELECT ename,sal FROM emp
WHERE ename LIKE 'S%'
--查询名字第三个字母是o的员工
SELECT ename,sal FROM emp
WHERE ename LIKE '--o%'
3.查询表的结构:
DESC emp
4.分页查询:
基本语法:select ... limit start,rows—表示从start+1行开始取,取出rows行,start从0开始计算。
SELECT * FROM emp
ORDER BY empno
LIMIT 每页显示的记录数 * (第几页-1),每页显示的记录数
5.分组查询group by:
--显示每种岗位的雇员总数、平均工资
SELECT COUNT(*),AVG(sal),job FROM emp
GROUP BY job;
--显示雇员总数以及获得补助的雇员数
--count(列)如果该列的值为空,不会统计进去
SELECT COUNT(*),COUNT(comm) FROM emp
count(列)如果该列的值为空,不会统计进去
表名.*表示将该表所有列都显示出来
二.多表查询:
1.笛卡尔积:
(1)多表查询的条件不能少于表的个数-1,否则会出现笛卡尔积。
(2)当我们需要指定某个表的列是,需要表.列表。
SELECT ename,sal,dname,emp.deptno
FROM emp,dept;
WHERE emp.deptno = dept.deptno
SELECT * FROM emp,salgrade
WHERE sal BETWEEN losal AND hisal;
2.自连接:
自连接是指在同一张表的连接查询【将同一张表看做两张表】。
--emp表中含有指向上级编号的列,显示员工名和上级的名字
SELECT worker.ename AS '职员名',boss.ename AS '上级名'
FROM emp worker,emp boss;--给表取别名
WHERE worker.mgr = boss.empno;
3.多子列查询:
(1)单行子查询:
--查询和Smith相同部门编号的人
SELECT * FROM emp
WHERE deptno = (--括号内代码返回的是一行
SELECT deptno
FROM emp
WHERE ename = 'SMITH'
)
(2)多行子查询:
--查询和部门10的工作相同的雇员的名字、岗位、工资、部门号,但是不含部门10自己的
SELECT ename,job,sal,deptno
FROM emp
WHERE job IN(
SELECT job FROM emp
WHERE deptno = 10
)AND deptno != 10
(3)子查询临时表:
SELECT goods_id,temp.cat_id,goods_name,shop_price
FROM (
SELECT cat_id ,MAX(shop_price) AS max_price
FROM ecs_goods
GROUP BY cat_id
)temp,ecs_goods--temp为临时表的名字,ecs_goods为表的名字
WHERE temp.cat_id = esc_goods.cat_id
AND temp.max_price = ecs_goods.shop_price
(4)all和any的使用:
--工资大于30号部门的所有人的员工的名字:
1.SELECT ename FROM emp
WHERE sal> (
SELECT MAX(sal)
FROM emp
WHERE deptno = 30;
)
2.SELECT ename FROM emp
WHERE sal> ALL(
SELECT sal
FROM emp
WHERE deptno = 30;
)
--显示工资比部门30其中一个员工的工资高的员工的姓名、工资和部门号
SELECT ename FROM emp
WHERE sal> ANY(
SELECT sal
FROM emp
WHERE deptno = 30;
)
(5)多列子查询:
基本语法:(字段1,字段2......)= (SELECT 字段1,字段2 FROM......)
--查询与SMITH的部门和岗位完全相同的所有雇员(并且不含SMITH本人)
SELECT * FROM emp
WHERE (deptno,job) = (
SELECT deptno ,job
FROM emp
WHERE ename = 'SMITH'
)AND ename != 'SMITH'