数据库实验三

数据库实验三

一、基本查询
1.查询员工的姓名及其工资。

SELECT
	employee_name,
	salary
FROM
	employee AS e,
	works AS w
WHERE
	e.employee_ID = w.employee_ID

2.显示雇员工资上浮20%的结果。

SELECT
	salary * 1.2
FROM
	works

3.显示WORKS表的雇员名称以及工资的两倍。

SELECT
	employee_name,
	salary * 2
FROM
	works AS w,
	employee AS e
WHERE
	e.employee_ID = w.employee_ID

4.显示员工的employee_name和salary,其中employee_name属性列显示为“姓名”,salary属性列显示为‘工资’。

SELECT
	employee_name 姓名,
	salary 工资
FROM
	works AS w,
	employee AS e
WHERE
	w.employee_ID = e.employee_ID

5.显示MANAGES表中不同的经理名称。注意:去掉重复的名称。

SELECT DISTINCT
	employee_name
FROM
	manages AS m,
	employee AS e
WHERE
	e.employee_ID=m.employee_ID

6.查询雇员姓名和工资,并按工资从小到大排序。

SELECT
	employee_name,
	salary
FROM
	works AS w,
	employee AS e
WHERE
	e.employee_ID = w.employee_ID
ORDER BY
	salary DESC;

7.查询雇员信息,先按公司名从小到大排序,再按工资从小到大排序。

SELECT
	employee_name,
	company_name,
	salary
FROM
	works as w,employee as e
WHERE
	w.employee_ID=e.employee_ID
ORDER BY
	company_name ASC,
	salary ASC

二、简单条件查询

  1. 显示公司名称为“Alibaba”的雇员的姓名和工资。
SELECT
	employee_name,
	salary
FROM
	works,
	employee
WHERE
	company_name = 'Alibaba'
AND works.employee_ID = employee.employee_ID
  1. 显示工资大于等于10000的雇员姓名和工资。
SELECT
	employee_name,
	salary
FROM
	works,
	employee
WHERE
	salary>=10000
AND works.employee_ID = employee.employee_ID
  1. 显示在公司Tensent和Huawei的员工的姓名和工资。
SELECT
	employee_name,
	salary
FROM
	works,
	employee
WHERE
	(
		company_name = 'Tensent'
		OR company_name = 'Huawei'
	)
AND works.employee_ID = employee.employee_ID
  1. 显示不在公司Tensent和Huawei的员工的姓名和工资。
SELECT
	employee_name,
	salary
FROM
	works,
	employee
WHERE
	not(
		company_name = 'Tensent'
		OR company_name = 'Huawei'
	)
AND works.employee_ID = employee.employee_ID
  1. 显示工资在10000和15000之间的员工的姓名。注意:可以使用BETWEEN…AND…
SELECT
	employee_name
FROM
	works,
	employee
WHERE
	(salary BETWEEN 10000 AND 15000)
AND works.employee_ID = employee.employee_ID
  1. 显示公司’Alibaba’和公司’Baidu’中工资大于15000的雇员。
SELECT
	employee_name
FROM
	works,
	employee
WHERE
	(
		company_name = 'Alibaba'
		OR company_name = 'Baidu'
	)
AND salary >= 15000
AND works.employee_ID = employee.employee_ID
  1. 显示所有以‘G’字母开头的员工的姓名。
SELECT
	employee_name
FROM
	employee
WHERE
	employee_name LIKE 'G%'
  1. 在employee中,查询所有以‘n’字母结尾的员工姓名,且‘n’前面只有4个字母。
SELECT
	employee_name
FROM
	employee
WHERE
	employee_name LIKE '____n'
  1. 在manages中,查询manager_name为空的记录。
SELECT
	*
FROM
	manages
WHERE
	manager_ID = NULL

三、分组查询
10. 根据company_name对works表中的数据进行分组。

SELECT
	company_name
FROM
	works
GROUP BY
	company_nameD
  1. 根据company_name对works表中的数据进行分组,并显示员工个数大于3的分组信息.
SELECT
	company_name
FROM
	works
GROUP BY
	company_name
HAVING
	COUNT(employee_ID) > 3
  1. 显示每个公司中所有员工的总工资大于50000的公司名称及其所有员工的总工资数。
SELECT
	company_name,
	sum(salary)
FROM
	works
GROUP BY
	company_name
HAVING
	SUM(salary) > 50000

思考题:
(1)分组查询中的WHERE和HAVING有什么区别?请举例说明。

where的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
having的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。
例如:一个表中有name、company_name,salary,如果我要找出这所有salary>10000的就要使用where。这个时候是没有分公司的,是直接寻找salary大于10000的。如果我要找出每所公司中的salary大于10000的则使用having。这个时侯是已经分好公司再找。

(2)不在GROUP BY子句中出现的属性,是否可以出现在select子句中?请举例说明。

这里是引用答:不可以出现再select子句。
例:一个表中有name、company_name,salary,对company_name进行分组,这个时候表中只有company_name的数据,如果select的是name字段,在分好组的company_name中是找不到的。

(3)在GROUP BY子句中出现的属性,是否可以不出现在SELECT子句中?请举例说明。

答:可以不出现在select子句。
例:一个表中有name、company_name,salary,对company_name,salary进行分组,这个时候表中有company_name和salary组合好的数据,如果只select字段salary,在组好的数据中也有salary字段,那么就可以查询的到。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值