1. 程式人生 > >Mysql 基本語句 + 高級查詢

Mysql 基本語句 + 高級查詢

mysql命令 圓周率 操作系統 pca 默認 word minute 也會 想要

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 基本語句 + 高級查詢