实验SQL语句
SQL>SELECT empno,ename,sal FROM emp ORDER BY sal;
(25)查询员工表中的员工号、员工名和工资,并按工资降序排 序。
SQL>SELECT empno,ename,sal FROM emp ORDER BY sal DESC;
(26)查询员工信息,按员工所在部门号升序、工资降序排序。
SQL>SELECT empno,UPPER(ename) FROM emp;
(6)查询员工表中所有的员工名与工资信息,其中员工名标题 为“employeename”,工资标题为“salary”。
SQL>SELECT ename,employeename,sal salary FROM emp;
(7)查询员工表中所有员工的员工号与员工名,并以“员工号: ××××员工名××××”的形式显示查询结果。
SQL>SELECT * FROM emp ORDER BY deptno,sal DESC;
(27)查询员工表中员工号、员工名及其工资,并按员工年工资排 序。
SQL>SELECT empno,ename,sal FROM emp ORDER BY sal*12;
(28)查询员工表中员工号、员工名及其年工资,并按年工资排 序。
1.3.3 分组查询
(33)查询每个部门的部门号、人数和平均工资,语句为: SQL>SELECT deptno,count(*),avg(sal) FROM emp GROUP BY deptno;
(34)查询各个部门中不同工种的员工人数和平均工资,语句为: SQL>SELECT deptn emp GROUP BY
日期排序。 (16) 查询所有发货日期比订货日期晚7天的订单信息。 (17) 统计各类图书的数量,平均零售价格、平均批发价格。 (18) 统计各个出版社出版图书的数量、最高批发价格、最高零售价格、最低
批发价格和最低零售价格。 (19) 统计每个客户的订单数量。 (20) 统计每个作者编写的图书数量。
(30)统计10号部门员工的人数、平均工资、最高工资、最低工 资。 SQL>SELECT count(*),avg(sal),max(sal),min(sal) FROM emp WHERE
deptno=10; (31)统计所有员工的平均奖金和奖金总额。 SQL>SELECT avg(comm),sum(comm) FROM emp ; (32)从员工表中查询所有的部门个数。 SQL>SELECT count(DISTINCT deptno) FROM emp;
SQL>SELECT empno,sal*12 salary FROM emp ORDER BY salary;
(29)查询员工表中员工号、员工名及其工资,并按第二个输出列 排序。 SQL>SELECT empno,sal*12 salary FROM emp ORDER BY 2;
1.3.2 统计查询
于批发价相同的,再按零售价排序。 (11) 查询图书名以“数据库”开头的图书信息。 (12) 查询所有书名中包含“Oracle”的图书信息。 (13) 查询出版日期在2007年1月至2009年1月的所有图书。 (14) 查询“电子工业出版社”和“清华大学出版社”出版的图书。 (15) 查询所有订单信息,按订单日期排序。对于订单日期相同的,再按发货
1.2预备知识
1.Oracle数据库中查询操作的基本语法为:
SELECT [ALL|DISTINCT]column_name[,expression…] FROM table1_name[,table2_name,view_name,…] [WHERE condition] [GROUP BY column_name1[,column_name2,…] [HAVING group_condition]] [ORDER BY column_name2 [ASC|DESC][,column_name2,…]];
1.3实践步骤
1.3.1 基本查询
1.无条件查询
(1)查询员工表(emp)中所有列的信息。
SQL>SELECT * FROM emp;
(2)查询部门表(dept)中的部门号及部门名信息。
SQL>SELECT deptno,dname FROM dept;
(3)查询员工表中所有员工的员工号,员工的年工资信息。
返回列或表达式的方 差
除了COUNT(*)函数外,其他的统计函数都不考虑返回值或表达式为NULL的情 况。 聚集函数只能出现在目标列表达式、ORDER BY子句、HAVING子句中,不能出 现在WHERE子句和GROUP BY子句中。 默认对所有的返回行进行统计,包括重复的行;如果要统计不重复的行信息,则 可以使用DISTINCT选项。 如果对查询结果进行了分组,则聚集函数的作用范围为各个组,否则聚集函数作 用于整个查询结果。
deptno,job; (35)例如,查询部门平均工资高于1500的部门号、部门人数和部 门平均工资,语句为: SQL>SELECT deptno,count(*),avg(sal) FROM emp
GROUP BY deptno HAVING avg(sal)>1500; (36)例如,统计10号部门中各个工种的员工人数和平均工资,并 返回平均工资高于1000的工种人数和平均工资,语句为: SQL>SELECT job,count(*),avg(sal) FROM emp WHERE deptno=10
SQL>SELECT '员工号:'||empno||'员工名'||ename FROM emp;
(8)查询有员工的部门号(重复结果只显示一次)。 SQL>SELECT DISTINCT deptno FROM emp;
2.有条件查询 (9)查询非10号部门 的员工的员工号、员工名及其工资。 SQL>SELECT empno,ename,sal FROM emp WHERE deptno! = 10; (10)查询工资大于1500的员工的员工号、员工名及其工资。 SQL>SELECT empno,ename,sal FROM emp WHERE sal>1500; (11)查询部门号在10到20之间的所有部门的员工信息。 SQL>SELECT * FROM emp WHERE deptno BETWEEN 10 AND 20; (12)查询工资小于1000,或工资大于2000的员工信息。 SQL>SELECT * FROM emp WHERE sal NOT BETWEEN 1000 AND 2000; (13)查询10号或30号部门的员工号、员工名。 SQL>SELECT empno,ename,sal FROM emp WHERE deptno IN(10,30); (14)查询名字中含有“S”的员工信息。 SQL>SELECT * FROM emp WHERE ename LIKE '%S%'; (15)查询名字的第二个字母为“A”的员工信息。 SQL>SELECT * FROM emp WHERE ename LIKE '_A%'; (16)查询名字中包含“_”字符的员工信息。 SQL>SELECT * FROM emp WHERE ename LIKE '%x_%' ESCAPE 'x'; (17)查询部门号为空的员工信息。 SQL>SELECT * FROM emp WHERE deptno IS NULL; (18)查询奖金(COMM)不为空的员工信息。 SQL>SELECT * FROM emp WHERE comm IS NOT NULL; (19)查询10号部门中工资高于1500的员工信息。 SQL>SELECT * FROM emp WHERE deptno=10 AND sal >1500; (20)查询工资高于1500的10号部门和20号部门的员工信息。
实验六 SQL语句
实践1:SQL语句基础—简单查询与分组查询
1.1实践目的和要求
实践目的: (1) 掌握SQL语句的查询操作的基本方法。 (2) 掌握SQL语句的基本查询方法。 (3) 掌握SQL语句的查询统计和分组查询方法。
实践要求: (1) Scott普通模式下有两个表,分别为员工表(EMP)、部门表(DEPT),操作 时请注意访问方法。 (2) 对员工表(EMP)和部门表(DEPT)进行基本查询,包括无条件查询、有条 件查询、查询排序等。 (3) 对员工表(EMP)和部门表(DEPT)进行查询统计。 (4) 对员工表(EMP)和部门表(DEPT)进行分组查询。
SQL>SELECT * FROM emp WHERE (deptno=10 OR deptno=20) AND sal>1500;
(21)查询工资大于等于1000,并且工资小于等于2000的员工信息 (两种方法实现)。
SQL>SELECT * FROM emp WHERE sal>=1000 AND sal<=2000;
SQL>SELECT * FROM emp WHERE sal BETWEEN 1000 AND 2000;
(22)查询所有工种不是MANAGER和CLERK,且工资大于或等于2000 的员工的详细信息。
SQL>SELECT * FROM EMP WHERE job NOT IN('MANAGER','CLERK') AND sal>=2000;
GROUP BY job HAVING avg(sal)>1000;
1.4练习 基于图书销售系统表(实验四练习部分有表结构),完成下列练习。