1.创建如下所示的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
2.示例代码
#创建courses
-- CREATE TABLE courses ( student VARCHAR ( 10 ) NOT NULL, class VARCHAR ( 10 ) NOT NULL );
INSERT INTO courses
VALUES
( "A", "Math" ),
( "B", "English" ),
( "C", "Math" ),
( "D", "Biology" ),
( "E", "Math" ),
( "F", "Computer" ),
( "G", "Math" ),
( "H", "Math" ),
( "I", "Math" ),
( "A", "Math" );
结果:
编写一个 SQL 查询,列出所有超过或等于5名学生的课
SELECT class FROM courses GROUP BY(class) HAVING COUNT(student)>=5;
(HAVING
对由sum或其它集合函数运算结果的输出进行限制).
2.交换工资(难度:简单)
创建一个 salary表,如下所示,有m=男性 和 f=女性的值
id name sex salary
1 A m 2500
2 B f 1500
3 C m 5500
4 D f 500
示例代码:
创建薪资表:
CREATE TABLE salary (
id INT PRIMARY KEY NOT NULL,
NAME VARCHAR ( 10 ) NOT NULL,
sex VARCHAR ( 10 ) NOT NULL,
salary INT NOT NULL
);
INSERT INTO salary
VALUES
( 1, "A", "m", 2500 ),
( 2, "B", "f", 1500 ),
( 3, "C", "m", 5500 ),
( 4, "D", "f", 500 );
UPDATE salary
SET sex =
CASE
sex
WHEN 'm' THEN
'f' ELSE 'm' END;
表1: Person
列名 类型
PersonId int
FirstName varchar
LastName varchar
PersonId 是上表主键
表2: Address
列名 类型
±------------±--------+t
| AddressId | int |
| PersonId | int |
| City | varchar |
AddressId 是上表主键
编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:FirstName, LastName, City, State
示例代码:
建表插入数据:
#person
CREATE TABLE person(PersonId INT,
FirstName VARCHAR(10),
LastName VARCHAR(10));
#address
CREATE TABLE address(AddressId INT,
PersionId INT,
City VARCHAR(10),
State VARCHAR(10));
#数据
INSERT INTO person VALUES (1,'kobe','bryant'),
(2,'lebron','james'),
(3,'chris','paul');
#插入数据
INSERT INTO address VALUES(001,1,'Los Angeles','california'),
(002,2,'Cleveland Cavaliers','Ohio'),
(003,2,'Houston','Texas');
全部连接:
SELECT
FirstName,
LastName,
City,
State
FROM
person
LEFT JOIN address ON person.PersonId = address.PersionId;
UNION
SELECT
FirstName,
LastName,
City,
State
FROM
person
RIGHT JOIN address ON person.PersonId = address.PersionId;
左右连接查询:
#左连接查询
SELECT FirstName, LastName, City, State FROM
person LEFT JOIN address ON person.PersonId=address.PersionId;
#右连接
SELECT FirstName, LastName, City, State FROM
person RIGHT JOIN address ON person.PersonId=address.PersionId;
删除重复的邮箱(难度:简单) 编写一个 SQL 查询,来删除 email 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。
Id Email
1 [email protected]
2 [email protected]
3 [email protected]
Id 是这个表的主键。
CREATE TABLE email ( id INT PRIMARY KEY, Email VARCHAR ( 20 ) );
INSERT INTO email ( id, Email )
VALUES
( 1, '[email protected]' ),
( 2, '[email protected]' ),
( 3, '[email protected]' );
DELETE
FROM
email
WHERE
id NOT IN ( SELECT t.tid FROM ( SELECT MIN( id ) AS tid FROM email GROUP BY Email ) t );
Id Email
1 [email protected]
2 [email protected]