MySql演習2

MySql演習2

1ここに画像の説明を挿入

  1. 各学生のスコアが最も高い科目をクエリします(フィールドを表示するために必要:学生ID、名前、コース、最高スコア)
  2. 各コースで最高の成績を持つ学生にクエリを実行します(フィールドを表示するために必要です:学生ID、名前、科目、成績)
-- 1. 查询出每个学生最高成绩的科目(要求显示字段: 学号,姓名,课程,最高成绩)
SELECT stud.stu_num,stud.stu_name,stud.subject,stu_score
FROM(SELECT stu_num,MAX(stu_score) AS maxScore
  FROM stud
  GROUP BY stu_num) t2
  JOIN stud
    ON stud.stu_num = t2.stu_num
    AND stud.stu_score = t2.maxScore
-- 2. 查询各门课程成绩最好的学生(要求显示字段: 学号,姓名,科目,成绩) 
SELECT stud.stu_num,stud.stu_name,stud.subject,stu_score
FROM(SELECT SUBJECT,MAX(stu_score) AS maxScore
  FROM stud
  GROUP BY SUBJECT) t2
  JOIN stud
    ON stud.SUBJECT = t2.SUBJECT
    AND stud.stu_score = t2.maxScore

2.2つのテーブルがあります

部門テーブル、
ここに画像の説明を挿入
従業員テーブル、
ここに画像の説明を挿入
クエリに関連する2つのテーブル

  1. すべての従業員情報を照会します。情報の内容には、
    従業員の主キー、従業員名、性別、年齢、給与、および部門名が含まれます。
  2. 給与が最も高い従業員をクエリし、従業員情報を表示して、クエリから最も高い給与をクエリします。
  3. 各部門で最も給与の高い従業員の情報を照会します
  4. すべての男性従業員の総賃金、平均賃金、最大賃金、および最低賃金を照会します
  5. 給与が平均給与よりも高い従業員に関する情報を照会する
  6. Wangという名前のすべての従業員の名前と性別を照会します
  7. 最年長の上位3人の従業員の名前と年齢を照会する
  8. 各部門の給与の合計をカウントし、情報を表示します:部門名、給与の合計、
    最初に従業員テーブルを部門テーブルに関連付けます。部門ごとにグループ化します。
  9. 各部門の総人数を数え、情報を表示します:部門名、部門番号
CREATE TABLE part(
	id INT PRIMARY KEY AUTO_INCREMENT,
	Dept_name VARCHAR(20),
	Dept_Desc VARCHAR(20),
	Dept_date DATE
)
INSERT INTO part(id,Dept_name,Dept_Desc,Dept_date)
	    VALUES(1,'研发部','开发软件','2014-12-14'),
		  (2,'财务部','发工资','2014-10-14'),
		  (3,'市场部','销售软件','2015-11-02')
CREATE TABLE people(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(20),
	sex CHAR(1) CHECK(sex='男' OR sex = '女'),
	age INT,
	money INT,
	Dept_id VARCHAR(20)
)
INSERT INTO people(NAME,sex,age,money,Dept_id)
	    VALUES('王五','男',25,3000,1),
	    ('李明','男',23,2500,1),
	    ('王二小','男',23,2356,2),
	    ('陈发','男',22,3600,2),
	    ('小明','男',21,3100,3),
	    ('苏奇','男',24,2800,3),
	    ('王丽','女',19,1800,1),
	    ('李芳','女',18,1900,3)
-- 1.	查询所有员工信息,信息内容包括员工主键,员工姓名,性别,年龄,工资,所属部门名称
SELECT *
FROM people
-- 2.	查询出工资最高的员工,并显示员工信息  自查询 查询出最高工资
SELECT * 
FROM people p1,(SELECT MAX(money) maxmoney
FROM people) p2
WHERE p1.money = p2.maxmoney

-- 3.	查询出每个部门工资最高的员工信息
SELECT * 
FROM people p1,(SELECT Dept_id, MAX(money) maxmoney
FROM people GROUP BY Dept_id) p2
WHERE p1.money = p2.maxmoney AND p1.Dept_id = p2.Dept_id


-- 4.	查询所有男性员工工资总和,平均工资,最高工资,最低工资
SELECT SUM(money),AVG(money),MAX(money),MIN(money)
FROM people
WHERE id NOT IN (SELECT id
          FROM people
          WHERE sex='女')


-- 5.	查询工资大于平均工资的员工信息
SELECT *
FROM people p1 ,(SELECT AVG(money) avgm
FROM people) p2
WHERE p1.money > p2.avgm

-- 6.	查询所有姓王员工的姓名和性别
SELECT NAME,sex
FROM people
WHERE NAME LIKE '王%'

-- 7.	查询年龄最大的前3个员工的姓名和年龄
SELECT *
FROM people
ORDER BY age DESC
LIMIT 3

-- 8.	统计每个部门的工资总和,显示信息:部门名称,工资总和 
-- 首先用员工表与部门表关联.用部门分组
SELECT Dept_name,工资总和
FROM part t , (SELECT SUM(money) 工资总和,Dept_id FROM people GROUP BY Dept_id) p
WHERE t.id = p.Dept_id

-- 9.统计每个部门的总人数,显示信息:部门名称,部门人数
SELECT Dept_name,人数
FROM part t , (SELECT COUNT(id) 人数,Dept_id FROM people GROUP BY Dept_id) p
WHERE t.id = p.Dept_id

おすすめ

転載: blog.csdn.net/XiaoFanMi/article/details/114256621