1.MySQL表數(shù)據(jù)類型
- MySQL支持多種類型,大致可以分為三類:數(shù)值、日期/時(shí)間和字符串(字符)類型。
具體的數(shù)據(jù)類型可見(jiàn):數(shù)據(jù)類型
2.用SQL語(yǔ)句創(chuàng)建表
- 語(yǔ)句解釋:CREATE TABLE table_name (column_name column_type);
- 設(shè)定列類型 、大小、約束:常見(jiàn)的列類型有int、char、varchar、varchar(10)這個(gè)字符串類型長(zhǎng)度就是10個(gè)字符,不帶n的:字符或者數(shù)字占一個(gè)字節(jié),漢字為兩個(gè)字節(jié),帶n的:雙字節(jié)存儲(chǔ),字母或者數(shù)字、漢字兩個(gè)字節(jié)。
- 設(shè)定主鍵:PRIMARY KEY關(guān)鍵字用于定義列為主鍵。 您可以使用多列來(lái)定義主鍵,列間以逗號(hào)分隔。如: PRIMARY KEY (
runoob_id)。
3.用SQL語(yǔ)句向表中添加數(shù)據(jù)
- 語(yǔ)句解釋:MySQL 表中使用 INSERT INTO SQL語(yǔ)句來(lái)插入數(shù)據(jù)。
- 多種添加方式(指定列名;不指定列名):
指定列名:
mysql> INSERT INTO runoob_tbl
-> (runoob_title, runoob_author, submission_date)
-> VALUES
-> ("學(xué)習(xí) PHP", "菜鳥(niǎo)教程", NOW());
不指定列名:
mysql> INSERT INTO runoob_tbl
-> VALUES
-> (0, "JAVA 教程", "RUNOOB.COM", '2016-05-06');
4.用SQL語(yǔ)句刪除表
- 語(yǔ)句解釋:刪除表用 drop,就是啥都沒(méi)了;
- DELETE:刪除表內(nèi)數(shù)據(jù),用 delete。格式為:delete from 表名 where 刪除條件;
- DROP:刪除表用 drop,就是啥都沒(méi)了;格式為:drop table 表名;
- TRUNCATE:清除表內(nèi)數(shù)據(jù),保存表結(jié)構(gòu),用 truncate。格式為:truncate table 表名;
- 不同方式的區(qū)別:
1、當(dāng)你不再需要該表時(shí), 用 drop;
2、當(dāng)你仍要保留該表,但要?jiǎng)h除所有記錄時(shí), 用 truncate;
3、當(dāng)你要?jiǎng)h除部分記錄時(shí), 用 delete。
5.用SQL語(yǔ)句修改表
- 修改列名: ALTER TABLE testalter_tbl CHANGE 老列名 新列名;
- 修改表中數(shù)據(jù):update 表名 set 字段名=‘新內(nèi)容’ + where條件;
- 刪除行:DELETE FROM table_name WHERE condition;
- 刪除列:alter table 表名 drop column 列名;
- 新建列:alter table TABLE_NAME add column NEW_COLUMN_NAME varchar(20) not null;
- 新建行:INSERT INTO table_name ( field1, field2,...fieldN ) VALUES
( value1, value2,...valueN );
作業(yè)#
項(xiàng)目三:超過(guò)5名學(xué)生的課(難度:簡(jiǎn)單)
創(chuàng)建如下所示的courses 表 ,有: student (學(xué)生) 和 class (課程)。
例如,表:
+---------+------------+
| student | class |
+---------+------------+
| A | Math |
| B | English |
| C | Math |
| D | Biology |
| E | Math |
| F | Computer |
| G | Math |
| H | Math |
| I | Math |
| A | Math |
+---------+------------+
編寫(xiě)一個(gè) SQL 查詢,列出所有超過(guò)或等于5名學(xué)生的課。
應(yīng)該輸出:
+---------+
| class |
+---------+
| Math |
+---------+
Note:
學(xué)生在每個(gè)課中不應(yīng)被重復(fù)計(jì)算。
select class from courses group by class having count(distinct student)>=5

項(xiàng)目四:交換工資(難度:簡(jiǎn)單)
創(chuàng)建一個(gè) 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,反之亦然)。要求使用一個(gè)更新查詢,并且沒(méi)有中間臨時(shí)表。
運(yùn)行你所編寫(xiě)的查詢語(yǔ)句之后,將會(huì)得到以下表:
| id | name | sex | salary |
|---|---|---|---|
| 1 | A | f | 2500 |
| 2 | B | m | 1500 |
| 3 | C | f | 5500 |
| 4 | D | m | 500 |
update salary set sex=if(sex='f','m','f')

2.2 MySQL 基礎(chǔ) (三)- 表聯(lián)結(jié)
學(xué)習(xí)內(nèi)容#
- MySQL別名:MySQL支持兩種別名,稱為列別名和表別名。
- INNER JOIN:(等值連接) 只返回兩個(gè)表中聯(lián)結(jié)字段相等的行。
- LEFT JOIN:(左聯(lián)接) 返回包括左表中的所有記錄和右表中聯(lián)結(jié)字段相等的記錄 。
- CROSS JOIN:返回被連接的兩個(gè)表的笛卡爾積,返回結(jié)果的行數(shù)等于兩個(gè)表行數(shù)的乘積。
- 自連接:自連接可以將自身表的一個(gè)鏡像當(dāng)作另一個(gè)表來(lái)對(duì)待。
- UNION:合并兩個(gè)或多個(gè) SELECT 語(yǔ)句的結(jié)果集。
以上幾種方式的區(qū)別和聯(lián)系
作業(yè)#
項(xiàng)目五:組合兩張表 (難度:簡(jiǎn)單)
在數(shù)據(jù)庫(kù)中創(chuàng)建表1和表2,并各插入三行數(shù)據(jù)(自己造)
表1: Person
+-------------+---------+
| 列名 | 類型 |
+-------------+---------+
| PersonId | int |
| FirstName | varchar |
| LastName | varchar |
+-------------+---------+
PersonId 是上表主鍵
表2: Address
+-------------+---------+
| 列名 | 類型 |
+-------------+---------+
| AddressId | int |
| PersonId | int |
| City | varchar |
| State | varchar |
+-------------+---------+
AddressId 是上表主鍵
編寫(xiě)一個(gè) SQL 查詢,滿足條件:無(wú)論 person 是否有地址信息,都需要基于上述兩表提供 person 的以下信息:FirstName, LastName, City, State
select FirstName,LastName,City,State from Person a right join Address b on a.PersonId = b.PersonId

項(xiàng)目六:刪除重復(fù)的郵箱(難度:簡(jiǎn)單)
編寫(xiě)一個(gè) SQL 查詢,來(lái)刪除 email 表中所有重復(fù)的電子郵箱,重復(fù)的郵箱里只保留 Id 最小 的那個(gè)。
+----+---------+
| Id | Email |
+----+---------+
| 1 | a@b.com |
| 2 | c@d.com |
| 3 | a@b.com |
+----+---------+
Id 是這個(gè)表的主鍵。
例如,在運(yùn)行你的查詢語(yǔ)句之后,上面的 Person表應(yīng)返回以下幾行:
+----+------------------+
| Id | Email |
+----+------------------+
| 1 | a@b.com |
| 2 | c@d.com |
+----+------------------+
delete p1 from email p1,email p2 where p1.Email = p2.Email and p1.ID > p2.ID
