MySQL基礎(二)

學習內容:

  1. MySQL表數據類型
  2. 用SQL語句創建表
    語句解釋
    設定列類型 、大小、約束
    設定主鍵
  3. 用SQL語句向表中添加數據
    語句解釋
    多種添加方式(指定列名;不指定列名)
  4. 用SQL語句刪除表
    語句解釋
    DELETE
    DROP
    TRUNCATE
    不同方式的區別
  5. 用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 );

示例
courses表
插入數據:

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]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章