導入sql文件
用Navicat for Mysql導入.sql文件 - 路修遠而求索 - 博客園
如果右鍵刷新失敗,則用F5刷新,就會顯示成功。
常用語句
SQL是一種用於操作數據庫的語言。SQL是用於所有數據庫的基本語言。不同數據庫之間存在較小的語法更改,但基本的SQL語法基本保持不變。SQL是Structured Q uery Language 的簡短縮寫。根據ANSI(美國國家標準協會),SQL是操作關係數據庫管理系統的標準語言。
SQL用於訪問,更新和操作數據庫中的數據。它的設計允許管理RDBMS中的數據,例如MYSQL。SQL語言還用於控制數據訪問以及數據庫模式的創建和修改。MySQL是一個RDBMS tostore,使用SQL檢索,修改和管理數據庫。需要學習SQL語言纔能有效地使用它。它可以通過下載和安裝輕鬆獲得。SQL是一種查詢語言。MySQL是數據庫軟件。
查詢語句 SELECT FROM
SELECT 語句用於從表中選取數據。
結果被存儲在一個結果表中(稱爲結果集)。
SQL SELECT 語法
SELECT 列名稱 FROM 表名稱
以及:
SELECT * FROM 表名稱
註釋:SQL 語句對大小寫不敏感。SELECT 等效於 select。
查詢語句中你可以使用一個或者多個表,表之間使用逗號(,)分割,並使用WHERE語句來設定查詢條件。
SELECT 命令可以讀取一條或者多條記錄。
你可以使用星號(*)來代替其他字段,SELECT語句會返回表的所有字段數據。
你可以使用 WHERE 語句來包含任何條件。
你可以使用 LIMIT 屬性來設定返回的記錄數。
你可以通過OFFSET指定SELECT語句開始查詢的數據偏移量。默認情況下偏移量爲0。
去重語句
sql查詢語句去除重複列(行) - danuo2011的博客 - CSDN博客
1.存在兩條完全相同的紀錄
這是最簡單的一種情況,用關鍵字distinct就可以去掉
example:
select distinct * from table(表名) where (條件)
2.存在部分字段相同的紀錄(有主鍵id即唯一鍵)
如果是這種情況的話用distinct是過濾不了的,這就要用到主鍵id的唯一性特點及group by分組
example:
select * from table where id in (select max(id) from table group by [去除重複的字段名列表,....])
3.沒有唯一鍵ID
這種情況我覺得最複雜,目前我只會一種方法,有那位知道其他方法的可以留言,交流一下:
example:
select identity(int1,1) as id,* into newtable(臨時表) from table
select * from newtable where id in (select max(id) from newtable group by [去除重複的字段名列表,....])
drop table newtable
前N個語句
各個數據庫中,查詢前n條記錄的方法 - 閒看漫隨 - 博客園
1.select top X * from table_name
--查詢前X條記錄,可以改成需要的數字,比如前10條。
2.select top X * from table_name order by colum_name desc
--按colum_name屬性降序排序查詢前X條記錄,“order by” 後緊跟要排序的屬性列名,其中desc表示降序,asc表示升序(默認也是升序方式)。
3.select top n * from (select top m * from table_name order by column_name ) a order by column_name desc
--查詢第N到M條記錄。常用的分頁也是這種方式。
CASE…END判斷語句
CASE WHEN THEN END多條件判斷 - Writing_the_future的博客 - CSDN博客
CASE WHEN THEN END結構有兩種書寫方式
結構:
第一種格式簡單的CASE 函數
CASE
WHEN 條件1 THEN 結果1
WHEN 條件2 THEN 結果2
WHEN 條件3 THEN 結果3
.........
WHEN 條件N THEN 結果N
END
方式:
第二種格式爲CASE搜索函數
CASE SEX
WHEN '1' THEN '男'
WHEN '0' THEN '女'
ELSE '其他' END
篩選語句 WHERE
MySQL WHERE 子句 | 菜鳥教程
從 MySQL 表中使用 SQL SELECT 語句來讀取數據。
如需有條件地從表中選取數據,可將 WHERE 子句添加到 SELECT 語句中。
語法
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
查詢語句中你可以使用一個或者多個表,表之間使用逗號, 分割,並使用WHERE語句來設定查詢條件。 你可以在 WHERE 子句中指定任何條件。
你可以使用 AND 或者 OR 指定一個或多個條件。 WHERE 子句也可以運用於 SQL 的 DELETE 或者 UPDATE 命令。
WHERE 子句類似於程序語言中的 if 條件,根據 MySQL 表中的字段值來讀取指定的數據。
運算符/通配符/操作符
操作符 | 描述 | 實例 |
---|---|---|
= | 等號,檢測兩個值是否相等,如果相等返回true | (A = B) 返回false。 |
<>, != | 不等於,檢測兩個值是否相等,如果不相等返回true | (A != B) 返回 true。 |
> | 大於號,檢測左邊的值是否大於右邊的值, 如果左邊的值大於右邊的值返回true | (A > B) 返回false。 |
< | 小於號,檢測左邊的值是否小於右邊的值, 如果左邊的值小於右邊的值返回true | (A < B) 返回 true。 |
>= | 大於等於號,檢測左邊的值是否大於或等於右邊的值, 如果左邊的值大於或等於右邊的值返回true | (A >= B) 返回false。 |
<= | 小於等於號,檢測左邊的值是否小於於或等於右邊的值, 如果左邊的值小於或等於右邊的值返回true | (A <= B) 返回 true。 |
分組語句 GROUP BY
GROUP BY 語句根據一個或多個列對結果集進行分組。
在分組的列上我們可以使用 COUNT, SUM, AVG,等函數。
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
聚集函數:
[GROUP BY {col_name | position}] [ASC | DESC],…]
HAVING子句
HAVING用法詳解 - 肥宅兜 - 博客園
HAVING 子句對 GROUP BY 子句設置條件的方式與 WHERE 和 SELECT 的交互方式類似。WHERE
搜索條件在進行分組操作之前應用;而 HAVING 搜索條件在進行分組操作之後應用。HAVING 語法與 WHERE 語法類似,但
HAVING 可以包含聚合函數。HAVING 子句可以引用選擇列表中顯示的任意項。
USE AdventureWorks;
GO
SELECT ProductID, AVG(OrderQty) AS AverageQuantity, SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING SUM(LineTotal) > $1000000.00
AND AVG(OrderQty) < 3 ;
GO
排序語句 ORDER BY
以下是 SQL SELECT 語句使用 ORDER BY 子句將查詢數據排序後再返回數據:
SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
你可以使用任何字段來作爲排序的條件,從而返回排序後的查詢結果。 你可以設定多個字段來排序。 你可以使用 ASC 或 DESC
關鍵字來設置查詢結果是按升序或降序排列。 默認情況下,它是按升序排列。 你可以添加 WHERE…LIKE 子句來設置條件。
ASC:升序(默認),DESC:降序,
函數
MySQL 函數 | 菜鳥教程
MySQL函數大全及用法示例 - 雨林少爺 - 博客園
函數較多不一一列出,可參考上述鏈接:
時間函數:
dayofweek(date)
返回日期date是星期幾(1=星期天,2=星期一,……7=星期六,odbc標準)
mysql> select dayofweek(‘1998-02-03’);
-> 3
weekday(date)
返回日期date是星期幾(0=星期一,1=星期二,……6= 星期天)。
mysql> select weekday(‘1997-10-04 22:23:00’);
-> 5
mysql> select weekday(‘1997-11-05’);
-> 2
數值函數
abs(n)
返回n的絕對值
mysql> select abs(2);
-> 2
mysql> select abs(-32);
-> 32
sign(n)
返回參數的符號(爲-1、0或1)
mysql> select sign(-32);
-> -1
mysql> select sign(0);
-> 0
mysql> select sign(234);
-> 1
字符串函數
ascii(str)
返回字符串str的第一個字符的ascii值(str是空串時返回0)
mysql> select ascii(‘2’);
-> 50
mysql> select ascii(2);
-> 50
mysql> select ascii(‘dete’);
-> 100
ord(str)
如果字符串str句首是單字節返回與ascii()函數返回的相同值。
如果是一個多字節字符,以格式返回((first byte ascii code)*256+(second byte ascii code))[*256+third byte asciicode…]
mysql> select ord(‘2’);
-> 50
sql註釋
單行註釋
SQL語句中的單行註釋使用 –
create database database_x --創建數據庫database_x
多行註釋
SQL語句中的多行註釋採用 /…/
create database database_x
/*
創建一個數據庫
名字叫做database_x
*/
兩個項目練習:
項目一:查找重複的電子郵箱(難度:簡單)
創建 email表,並插入如下三行數據
+----+---------+
| Id | Email |
+----+---------+
| 1 | [email protected] |
| 2 | [email protected] |
| 3 | [email protected] |
+----+---------+
編寫一個 SQL 查詢,查找 Person 表中所有重複的電子郵箱。
說明:所有電子郵箱都是小寫字母。
參考代碼:
– 創建表
CREATE TABLE email (
ID INT NOT NULL PRIMARY KEY,
Email VARCHAR(255)
)
– 插入數據
INSERT INTO email VALUES('1','[email protected]');
INSERT INTO email VALUES('2','[email protected]');
INSERT INTO email VALUES('3','[email protected]');
Mysql實現"查找重複的電子郵箱"的兩種方法 - 數據庫其他綜合 - 紅黑聯盟
–查詢數據
1:先按郵箱Email分組,生成臨時表A,表A中有Email和對應出現的次數。然後判斷次數是否大於1
SELECT Email
FROM (SELECT Email, COUNT(*) AS Sum
FROM Email
GROUP BY Email) AS A
WHERE A.Sum>1
2:利用HAVING
WHERE 關鍵字無法與聚合函數一起使用。HAVING 子句可以讓我們篩選分組後的各組數據。
SELECT Email FROM Email
GROUP BY Email
HAVING COUNT(*)>1
項目二:查找大國(難度:簡單)
創建如下 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查詢,輸出表中所有大國家的名稱、人口和麪積。
參考代碼:
- 創建表
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);
–查詢數據
查詢目標:name,population,area
查詢範圍:World表
查詢條件:面積超過300萬平方公里 或 人口超過2500萬
select
name,
population,
area
from
World
where
area > 3000000 or population > 25000000