Mysql 基本語句 + 高級查詢
MySQL執行SQL腳本文件的命令:
從cmd進入mysql命令行模式:
mysql> -uroot –prootpassword –Ddatabasename
如果是我本地的數據庫,就相應修改為:
Mysql> -uroot –p111111 –Dmy_database < xxx.sql
執行SQL腳本文件:
mysql> source E:\program files\sql\xxxxxx.sql.
如下圖所示:
2. MySQL基礎知識:
2.1 連接MySQL數據庫
主機名(計算機名)——如果連接到本地MySQL服務器,為localhost;
端口——默認端口為3306.
2.2 數據庫操作
假設數據庫的名稱為:myDatabase;
(1)選擇數據庫:
輸入:USE myDatabase;
輸出:Database changed
(2)顯示所有的數據庫:
輸入:SHOW DATABASES;
(3)顯示該數據庫下的所有表:
輸入:SHOW TABLES;
(4)顯示某一個表內的所有列,假設表名為customers:
輸入: SHOW COLUMNS FROM customers; 或者是 DESCRIBE customers;
2.3 檢索數據(SELECT)
輸入:SELECT product_name FROM products;
含義:從products表中檢索出一個名為product_name的列。
註意:檢索出的數據沒有排序,返回的數據可能是數據被添加到表中的順序。
輸入:SELECT product_id, product_name, product_price FROM products;
輸入:SELECT * FROM products;
輸入:SELECT DISTINCT vend_id FROM products;
輸入:SELECT product_name FROM products LIMIT 5; //少於5行.
輸入:SELECT product_name FROM products LIMIT 5,5; //檢索出第6行後的5行.
輸入:SELECT product.product_name FROM products; //
輸入:SELECT products.product_name FROM myDatabase.products; //完全限定數據庫名和表名
2.4 排序檢索數據(ORDER BY)
輸入:SELECT product_name FROM products ORDER BY product_name; //按一列排序.
輸入:SELECT product_id, product_price, product_name FROM products ORDER BY product_price, product_name; //按多個列排序.
指定排序方向(如果不指定排序方向,默認是升序ASC):
輸入:SELECT product_id,product_price,product_name FROM products ORDER BY product_price DESC/ASC; //DESC是降序,ASD是升序.
輸入:SELECT product_id,product_price,product_name FROM products ORDER BY product_price DESC, product_name; //先按照product_price降序排,再對結果按name排序.
輸入:SELECT product_price FROM products ORDER BY product_price DESC LIMIT 1;
註意:關鍵字順序SELECT->FROM>ORDER BY>LIMIT,如果次序不對,結果會報錯。
2.5 過濾數據(WHERE)
過濾條件:=,<>,!=,<,<=,>,>=,BETWEEN
操作符 |
= |
<> |
!= |
< |
<= |
> |
>= |
BETWEEN |
說明 |
等於 |
不等於 |
不等於 |
小於 |
小於等於 |
大於 |
大於等於 |
之間 |
輸入:SELECT product_name,product_price FROM products WHERE product_price=2.50;
輸入:SELECT product_name,product_price FROM products WHERE product_price BETWEEN 5 AND 10;
輸入:SELECT product_name FROM products WHERE product_price IS NULL; // 空值檢查.
2.6 數據過濾(組合WHERE子句,AND/OR/IN/NOT)
輸入:SELECT product_id,product_price,product_name FROM products WHERE vend_id = 1003 AND product_price <=10;
輸入:SELECT product_name,product_price FROM products WHERE vend_id=1002 OR vend_id=1003;
輸入:SELECT product_name,product_price FROM products WHERE (vend_id=1002 OR vend_id=1003) AND product_price >=10;
註意:任何時候使用具有AND和OR操作符的WHERE子句,都應該使用圓括號明確地分組操作符,而不要去過分依賴默認計算次序。
輸入:SELECT product_name,product_price FROM products WHERE vend_id IN (1002,1003) ORDER BY product_name;
輸入:SELECT product_name,product_price FROM products WHERE vend_id=1002 OR vend_id=1003 ORDER BY product_name;
註意:在where子句中應用IN和OR的功能是相同的,但是IN操作符的優點如下:
(1) 使用長的合法選項清單時,IN操作符的語法更清楚且更直觀;
(2) 計算的次序更容易管理;
(3) IN操作符一般比OR操作符清單執行更快;
(4) IN的最大優點是可以包含其他SELECT語句,使得能夠更動態地建立WHERE子句。
輸入:SELECT product_name,product_price FROM products WHERE vend_id NOT IN (1002,1003) ORDER BY product_name;
2.7 用通配符進行過濾(LIKE—%)
通配符(wildcard):用來匹配值的一部分的特殊字符。
LIKE指示MySQL後跟的搜索模式利用通配符匹配,而不是直接相等匹配進行比較。
%:表示任何字符出現任意次數。
1)找到所有以詞jet開頭的產品:
輸入:SELECT product_id,product_name FROM products WHERE product_name LIKE ‘jet%’;
註意:通配符可以在搜索模式中任意位置使用,並且可以使用多個通配符。
輸入:SELECT product_id,product_name FROM products WHERE product_name LIKE ‘%anvil%’;
_:用途與%一樣,但下劃線只匹配單個字符而不是多個字符。
註意:通配符搜索的處理一般要比之前討論的其他搜索花費時間長。使用通配符的技巧:
(1) 不要過度使用通配符,即如果其他操作符能達到相同目的,應該使用其他操作符;
(2) 確實需要使用通配符時,除非絕對有必要,否則不要把它們用在搜索模式的開始處。把通配符置於搜索模式的開始處,搜索起來是最慢的;
(3) 仔細註意通配符的位置。如果放錯地方,可能不會返回想要的數據。
2.8 用正則表達式進行搜索
正則表達式:用來匹配文本中的特殊的串(字符集合)。所有種類的程序設計語言、文本編輯器、操作系統都支持正則表達式。
註意:MySQL僅支持多數正則表達式實現的一個很小的子集。
2.8.1基本字符匹配
輸入:SELECT product_name FROM products WHERE product_name REGEXP ‘1000’ ORDER BY product_name;
含義:它告訴MySQL,REGEXP後所跟的東西作為正則表達式(與文字正文1000匹配的一個正則表達式)處理。
註意:LIKE與REGEXP的區別:
(1) LIKE匹配整個列。如果被匹配的文本在列值中出現,LIKE將不會找到它,相應的行也不會被返回(除非使用通配符);
(2) REGEXP在列值內進行匹配,如果被匹配的文本在列值中出現,REGEXP將會找到它,相應的行也會被返回。
2.8.2 進行OR匹配
輸入:SELECT prod_name FROM products WHERE prod_name REGEXP ‘1000|2000’ ORDER BY prod_name;
輸入:SELECT prod_name FROM products WHERE prod_name REGEXP ‘[123] Ton’ ORDER BY prod_name;
含義:[123]定義一組字符,意思是匹配1或2或3,等同於1|2|3。
2.9創建計算字段
需求:由於存儲在表中的數據不是應用程序所直接需要的。因此需要在檢索的過程中同時進行計算。
2.9.1 拼接字段( concatenate)
輸入:SELECT Concat( vend_name, ‘(’, vend_country, ‘)’) FROM vendors ORDER BY vend_name;
含義:將會形成一個新的拼接後的列名,為Concat(vend_name, ‘(’, vend_country, ‘)’)。
2.9.2 使用別名(alias)
輸入:SELECT Concat(RTrim(vend_name), ‘(’, vend_country, ‘)’) AS vend_title FROM vendors ORDER BY vend_name;
含義:表示拼接後,並創建一個新的計算字段名vend_title用來存儲計算結果。
2.9.3 執行算術計算
輸入:SELECT prod_id, quantity, item_price, quantity*item_price AS expanded_price FROM orderitems WHERE order_num = 2000;
2.10使用數據處理函數
SQL支持以下類型的函數:
(1) 處理字符串函數;
(2) 在數值數據上進行算術操作;
(3) 處理日期和時間值並從這些值中提取特定成分(例如,返回兩個日期之差,檢查日期有效性等)。
2.10.1 文本處理函數
輸入:SELECT vend_name, Upper(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name;
文本函數 |
Left/Right() |
Length() |
Locate() |
Lower/Upper |
LTrim/RTrim |
Substring() |
說明 |
返回串左/右的字符 |
串長度 |
串的子串 |
小寫/大寫 |
去掉左/右邊的空格 |
返回字符的字符 |
2.10.2 日期和時間處理函數
在數據庫中,日期和時間均采用相應的數據類型和特殊的格式存儲,以便能快速和有效地排序或過濾,並且節省物理存儲空間。
常用日期和時間的處理函數表
AddDate/AddTime() |
增加一個日期/時間. |
CurDate/CurTime() |
返回當前日期/時間. |
Date() |
返回日期時間的日期部分. |
DateDiff() |
計算兩個日期之差. |
Date_Add() |
高度靈活的日期運算函數. |
Date_Sub() |
從日期減去指定的時間間隔. |
Date_Format() |
返回一個格式化的日期或時間串. |
Year/Month/Day() |
返回一個日期的年/月/天數部分. |
DayOfWeek() |
對於一個日期,返回對應的星期幾. |
Now() |
返回當前日期和時間. |
Hour/Minute/Second |
返回一個時間的小時/分鐘/秒. |
在MySQL中,無論是插入或更新表值,還是用WHERE子句進行過濾,日期必須為格式yyyy-mm-dd。
輸入:SELECT cust_id, order_num FROM orders WHERE order_date = ‘2005-09-01’;
註意:假如數據庫的order_date字段值存儲的時間除了日期還有時間外,則上述的檢索會失敗。因此,更保險的檢索語句為:
輸入:SELECT cust_id, order_num FROM orders WHERE Date(order_date) = ‘2005-09-01’;
輸入: SELECT cust_id, order_num FROM orders WHERE Date(order_date) BETWEEN ‘2005-09-01’ AND ‘2005-09-30’;
輸入:SELECT cust_id, order_num FROM orders WHERE Year(order_date) = 2005 AND Month(order_date) = 9;
2.10.3 數值處理函數
數值函數 |
Abs() |
Cos() |
Exp () |
Pi() |
Rand() |
Sqrt() |
說明 |
絕對值 |
余弦 |
指數 |
圓周率 |
隨機數 |
平方根 |
Mysql 基本語句 + 高級查詢