查询表
精确查找
举例
去除重复行
假设您有一个名为 students
的表,其中包含 name
和 age
两列,您想要查询所有不重复的年龄,可以使用以下查询:
详细匹配
查询emp表中在部门10工作、工资高于1000或岗位是CLERK的所有雇员的姓名、工资、岗位信息
SELECT ename,job,sal FROM emp
WHERE deptno='10' AND (sal>1000 OR job='CLERK');
之间判断
用between...and...来确定一个连续的变量
举例:查询emp表中工资为2500~3000,1981年聘用的所有雇员的姓名、工资、聘用日期信息。
SELECT ename,sal,hiredate FROM emp
WHERE sal BETWEEN 2500 AND 3000
AND hiredate BETWEEN '1981-01-01' AND '1981-12-31';
字符串的模糊匹配
LIKE ‘匹配字符串’
在匹配字符串中使用通配符“%”和“_”。
“%”用于表示0个或任意多个字符,“_”表示任意一个字符
举例:查询emp表中所有姓名以K开头或姓名的第2个字母为C的员工的姓名、部门号及工资信息。
SELECT ename,deptno,sal FROM emp
WHERE ename LIKE 'K%' OR ename LIKE '_C%';
空值判断
举例:查询emp表中1981年聘用没有补助的员工的姓名和职位信息。
SELECT ename,job FROM emp
WHERE hiredate>='1981-01-01' AND hiredate<='1981-12-31'
AND comm IS NULL;
之内判断
可以使用IN实现数值之内的判断,例如sal IN(2000,3000),它相当于sal=2000 OR sal =3000的表达式。
举例:查询emp表中部门20和30中的岗位是CLERK的所有雇员的部门号、姓名、工资信息。
SELECT deptno,ename,sal FROM emp
WHERE deptno IN(20,30) AND job='CLERK';
使用ORDER BY字句对查询结果排序
注意!ORDER BY子句必须是最后一个子句
举例:以部门号的降序、姓名的升序查询emp表中工资为2000~3000元的员工的部门号、姓名、工资和补助信息。
deptno DESC (部门号的降序) ename(姓名的升序)
SELECT deptno,ename,sal,comm FROM emp
WHERE sal BETWEEN 2000 AND 3000,
ORDER BY deptno DESC,ename;
数据分组group by
通常与聚合函数诸如 SUM()、COUNT()、AVG() 等一起使用,以便对每个组单独执行计算。
aggregate_function 是用于对 column2 中的分组数据执行计算的函数。
例如,如果你有一个名为 sales
的表,其中包含 product
和 sales_amount
列,并且你想要找出每个产品的总销售额,你可以像这样使用 GROUP BY:
用一个例子来解释所有情况:
SELECT AVG(sal) AS 平均工资,SUM(COMM) AS 总补助款,
COUNT(*) AS 总人数,COUNT(comm) AS 补助人群,
MAX(sal) AS 最高工资
FROM emp WHERE deptno = 30;
group by可以按单列分组,也可以按多列分组