學習內容:
- 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]