学习内容:
- MySQL表数据类型
- 用SQL语句创建表
语句解释
设定列类型 、大小、约束
设定主键 - 用SQL语句向表中添加数据
语句解释
多种添加方式(指定列名;不指定列名) - 用SQL语句删除表
语句解释
DELETE
DROP
TRUNCATE
不同方式的区别 - 用SQL语句修改表
修改列名
修改表中数据
删除行
删除列
新建列
新建行
案例1
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;
表连接
- MySQL别名
- INNER JOIN
- LEFT JOIN
- CROSS JOIN
- 自连接
- UNION
1.表连接:总览如下:
2.项目:
项目五:组合两张表 (难度:简单)
在数据库中创建表1和表2,并各插入三行数据(自己造)
表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]