MySQL 学习
项目三
创建如下所示的courses 表 ,有: student (学生) 和 class (课程)。
student | class |
---|---|
A | Math |
B | English |
C | Math |
D | Biology |
E | Math |
F | Computer |
G | Math |
H | Math |
I | Math |
A | Math |
编写一个 SQL 查询,列出所有超过或等于5名学生的课。
Note:
学生在每个课中不应被重复计算。
SELECT class
FROM courses
HAVING COUNT(DISTINCT student >= 5);
结果显示如下:
项目四:交换工资
创建一个 salary表,如下所示,有m=男性 和 f=女性的值 。
id | name | sex | salary |
---|---|---|---|
1 | A | m | 2500 |
2 | B | f | 1500 |
3 | C | m | 5500 |
4 | D | f | 500 |
交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)。要求使用一个更新查询,并且没有中间临时表。
CREATE TABLE salary(
id int,
name VARCHAR(225),
sex VARCHAR(225),
salary int
);
INSERT INTO salary (id, name, sex, salary)
VALUES ('1', 'A', 'm', '2500'),
('2', 'B', 'f', '1500'),
('3', 'C', 'm', '5500'),
('4', 'D', 'f', '500');
SELECT * FROM salary;
结果显示如下
UPDATE salary
SET sex = IF(sex='f','m','f')
SELECT * FROM salary;
交换后结果显示如下
项目五:组合两张表
在数据库中创建表1和表2,并各插入三行数据(自己造),编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:FirstName, LastName, City, State
列名 | 类型 |
---|---|
PersonId | int |
FirstName | varchar |
LastName | varchar |
表1: Person,PersonId 是上表主键。
列名 | 类型 |
---|---|
AddressId | int |
PersonId | int |
City | varchar |
State | varchar |
表2: Address,AddressId 是上表主键。
CREATE TABLE Person(
Personld INT PRIMARY KEY,
FirstName VARCHAR(225),
LastName VARCHAR(225)
);
INSERT INTO Person(Personld, Firstname, Lastname)
VALUES ('1', 'Tom', 'A'),
('2', 'Mary', 'B'),
('3', 'Tony', 'C');
CREATE TABLE Address(
Addressld INT PRIMARY KEY,
Personld INT,
City VARCHAR(225),
State VARCHAR(225)
);
INSERT INTO Address(Addressld, Personld, City, State)
VALUES ('11', '1', 'chengdu', 'sichaun'),
('12', '2', 'kunming', 'yunnan'),
('13', '3', 'hangzhou', 'zhejiang');
两个表为下面显示
SELECT
FirstName,
LastName,
City,
State
FROM
Person t1
INNER JOIN
Address t2 ON t1.Personld = t2.Personld;
运行可以得到如下信息:
项目六:删除重复的邮箱
删除重复的邮箱
编写一个 SQL 查询,来删除 email 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。
Id | |
---|---|
1 | a@b.com |
2 | c@d.com |
3 | a@b.com |
Id 是这个表的主键。
CREATE TABLE email(
id INT PRIMARY KEY,
Email VARCHAR(225)
);
INSERT INTO email(id, email)
VALUES
('1', 'a@b.com'),
('2', 'c@d.com'),
('3', 'a@b.com');
DELETE e2
FROM email e1
INNER JOIN
email e2 ON e2.Email = e1.Email
WHERE e1.id < e2.id;
SELECT * FROM email;
结果显示如下: