1.導(dǎo)入sql文件
第一步: 從MySQL示例數(shù)據(jù)庫文章中下載示例數(shù)據(jù)庫(yiibaidb)法竞,有關(guān)示例數(shù)據(jù)庫的結(jié)構(gòu)草戈,請參考: http://www.yiibai.com/mysql/sample-database.html
第二步: 將下載的文件解壓縮到臨時文件夾中叁鉴。為了簡單起見即寡,我們將把它解壓縮到D:\worksp
第三步: 連接到MySQL服務(wù)器并創(chuàng)建數(shù)據(jù)庫
- 創(chuàng)建數(shù)據(jù)庫:
mysql> CREATE DATABASE IF NOT EXISTS yiibaidb DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
mysql> use yiibaidb;
- 導(dǎo)入數(shù)據(jù) :
mysql> use yiibaidb;
mysql> source D:/worksp/yiibaidb.sql;
- 第四步: 測試導(dǎo)入結(jié)果
2.SQL是什么撞蚕?MySQL是什么随闽?
SQL是結(jié)構(gòu)化查詢語言(Structured Query Language)。
MYSQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng)威彰。
兩者的關(guān)系:MYSQL是一種關(guān)系數(shù)據(jù)庫出牧,SQL則是操作這種關(guān)系數(shù)據(jù)庫的的編程語言。
3.查詢語句 SELECT FROM
- 語句解釋:SELECT 語句用于從表中選取數(shù)據(jù)歇盼。結(jié)果被存儲在一個結(jié)果表中(稱為結(jié)果集)
- 去重語句:關(guān)鍵詞 DISTINCT 用于返回唯一不同的值舔痕。語法為: SELECT DISTINCT 列名稱 FROM 表名稱
- 前N個語句:不同平臺有不同對語法,具體可參考排序鏈接豹缀。以mysql為例: limit 5,從0開始取前5條數(shù)據(jù)伯复。取前N個某字段最大/小的5條數(shù)據(jù),此時可以先order by asc(升序)/desc(降序)邢笙,默認為升序啸如。
- CASE...END判斷語句:CASE語句在存儲的程序中構(gòu)造復(fù)雜的條件語句判斷鏈接
4.篩選語句 WHERE
- 語句解釋:WHERE子句允許根據(jù)指定的過濾表達式或條件來指定要選擇的行。
- 運算符/通配符/操作符:相關(guān)案例可以參考通配符鏈接
5.分組語句 GROUP BY
- 聚集函數(shù):count() 計數(shù)氮惯,sum() 求和叮雳,avg() 平均數(shù)想暗,max() 最大值,min() 最小值等
- 語句解釋:GROUP表示分組帘不,BY后面寫字段名说莫,就表示根據(jù)哪個字段進行分組,GROUP BY必須得配合聚合函數(shù)來用寞焙,分組之后你可以計數(shù)(COUNT)储狭,求和(SUM),求平均數(shù)(AVG)等棺弊。
- HAVING子句:提到GROUP BY 我們就不得不提到HAVING晶密,HAVING相當(dāng)于條件篩選,但它與WHERE篩選不同模她,HAVING是對于GROUP BY對象進行篩選稻艰。
6.排序語句 ORDER BY
- 語句解釋: SELECT prod_name FROM Products ORDER BY prod_name(對prod_name列以字母順序排序數(shù)據(jù))
- 正序、逆序:DESC降序侈净,默認升序(ASC)
7.函數(shù)
- 時間函數(shù):
adddate(),curdate(),current_date(),date(),dateiff(d1,d2),date_add(d,interval expr type).......
- 數(shù)值函數(shù):
COUNT(expression)尊勿,F(xiàn)LOOR(x),LEAST(expr1, expr2, expr3, ...)畜侦,MAX(expression)元扔,MIN(expression),MOD(x,y)......
- 字符串函數(shù):
locate(s1,s),lcase(s),left(s,n),lower(s),repeat(s,n),substring(s,start,length),trim(s)......
8.SQL注釋
- SQL語句中的單行注釋使用 --
- SQL語句中的多行注釋采用 /…/
9.SQL代碼規(guī)范
- SQL編程格式的優(yōu)化建議
- [SQL Style Guide] (https://www.sqlstyle.guide/)
作業(yè)
項目一:查找重復(fù)的電子郵箱(難度:簡單)
創(chuàng)建 email表旋膳,并插入如下三行數(shù)據(jù)
+----+---------+
| Id | c |
+----+---------+
| 1 | a@b.com |
| 2 | c@d.com |
| 3 | a@b.com |
+----+---------+
編寫一個 SQL 查詢澎语,查找 Email 表中所有重復(fù)的電子郵箱。
根據(jù)以上輸入验懊,你的查詢應(yīng)返回以下結(jié)果:
+---------+
| Email |
+---------+
| a@b.com |
+---------+
說明:所有電子郵箱都是小寫字母擅羞。
- 解答:
創(chuàng)建表:
CREATE TABLE email (
ID INT NOT NULL PRIMARY KEY,
Email VARCHAR(255)
);
INSERT INTO email VALUES('1','a@b.com');
INSERT INTO email VALUES('2','c@d.com');
INSERT INTO email VALUES('3','a@b.com');
截圖:
- 查詢語句:
select Email from email group by Email having count(Email)>1
截圖:
項目二:查找大國(難度:簡單)
創(chuàng)建如下 World 表
+-----------------+------------+------------+--------------+---------------+
| name | continent | area | population | gdp |
+-----------------+------------+------------+--------------+---------------+
| Afghanistan | Asia | 652230 | 25500100 | 20343000 |
| Albania | Europe | 28748 | 2831741 | 12960000 |
| Algeria | Africa | 2381741 | 37100000 | 188681000 |
| Andorra | Europe | 468 | 78115 | 3712000 |
| Angola | Africa | 1246700 | 20609294 | 100990000 |
+-----------------+------------+------------+--------------+---------------+
如果一個國家的面積超過300萬平方公里,或者(人口超過2500萬并且gdp超過2000萬)义图,那么這
編寫一個SQL查詢减俏,輸出表中所有大國家的名稱、人口和面積碱工。
例如娃承,根據(jù)上表,我們應(yīng)該輸出:
+--------------+-------------+--------------+
| name | population | area |
+--------------+-------------+--------------+
| Afghanistan | 25500100 | 652230 |
| Algeria | 37100000 | 2381741 |
+--------------+-------------+--------------+
- 解答:
創(chuàng)建表:
CREATE TABLE World (
name VARCHAR(50) NOT NULL,
continent VARCHAR(50) NOT NULL,
area INT NOT NULL,
population INT NOT NULL,
gdp INT NOT NULL
);
INSERT INTO World
VALUES('Afghanistan','Asia',652230,25500100,20343000);
INSERT INTO World
VALUES('Albania','Europe',28748,2831741,12960000);
INSERT INTO World
VALUES('Algeria','Africa',2381741,37100000,188681000);
INSERT INTO World
VALUES('Andorra','Europe',468,78115,3712000);
INSERT INTO World
VALUES('Angola','Africa',1246700,20609294,100990000);
查詢語句:
select name,population,area from World where area>3000000 or (population>25000000 and gdp > 20000000)
截圖: