mysql查詢語句

基本查詢數據庫

去除重複記錄 >SELECT DISTINCT vend_id FROM products;函數

分頁 >SELECT * FROM products LIMIT 5;性能

>SELECT * FROM products LIMIT 0,5;ui

>SELECT * FROM products LIMIT 5,5;spa

 

排序(降序) >SELECT * FROM products ORDER BY prod_price DESC;排序

排序(升序) >SELECT * FROM products ORDER BY prod_price [ASC];事務

多列排序 >SELECT * FROM products ORDER BY prod_price ASC,prod_name ASC;內存

 

過濾查詢 查詢產品價格在2到10之間的產品字符串

>SELECT * FROM products WHERE prod_price >= 2 AND prod_price <= 10;產品

>SELECT * FROM products WHERE prod_price BETWEEN 2 AND 10;

查詢產品價格不等於2.5的全部產品

>SELECT * FROM products WHERE prod_price <> 2.5; >SELECT * FROM products WHERE prod_price != 2.5;

查詢沒有電子郵件信息的客戶

>SELECT * FROM customers WHERE cust_email IS NULL;

查詢有電子郵件信息的客戶

>SELECT * FROM customers WHERE cust_email IS NOT NULL;

 

過濾查詢

查詢由供應商1001和1003製造而且價格在10元以上的產品

>SELECT * FROM products WHERE vend_id = '1001' OR vend_id = '1003' AND prod_price > 10;

>SELECT * FROM products WHERE (vend_id = '1001' OR vend_id = '1003') AND prod_price > 10;

>SELECT * FROM products WHERE vend_id IN('1001','1003') AND prod_price > 10;

查詢不是由供應商1001和1003製造的產品

> SELECT * FROM products WHERE vend_id NOT IN(‘1001’,‘1003’) ;

模糊查詢

「_」通配符表明一個字符 「%」通配符表明0個或一個或任意多個字符 查詢產品名稱中以jet開頭的產品

> SELECT * FROM products WHERE prod_name LIKE 'jet%';

查詢_ ton anvil產品

> SELECT * FROM products WHERE prod_name LIKE '_ ton anvil'

• 不要過分使用LIKE通配符,若是其餘操做符能夠完成就使用其餘操做符

• 通配符搜索使用的時間比其餘搜索的時間長

• 若是確實須要使用通配符,除非絕對有必要,不然不要把通配符放到WHERE子句的開始處,把通配 符放到搜索模式的開始處,搜索起來是最慢的 

 

更多基本查詢

列的別名

> SELECT vend_id AS '供應商編號' FROM products;

算數運算

>SELECT quantity,item_price,quantity * item_price AS '總價' FROM orderitems;

 

文本處理函數

left()返回左邊指定長度的字符

> SELECT prod_name,LEFT(prod_name,2) FROM products;

right()返回右邊指定長度的字符

>SELECT prod_name,RIGHT(prod_name,5) FROM products;

length()返回字符串的長度

> SELECT prod_name,LENGTH(prod_name) FROM products;

lower()將字符串轉換爲小寫

> SELECT prod_name,LOWER(prod_name) FROM products;

upper()將字符串轉換爲大寫

> SELECT prod_name,UPPER(prod_name) FROM products;

 

文本處理函數

ltrim()去掉字符串左邊的空格

> SELECT prod_name,LTRIM(prod_name) FROM products;

rtrim()去掉串右邊的空格

>SELECT prod_name,RTRIM(prod_name) FROM products;

trim()去掉左右兩邊的空格

>SELECT prod_name,TRIM(prod_name) FROM products;

字符串鏈接

>SELECT CONCAT('I love ',cust_name) AS 'Message' FROM customers;

日期時間函數

函數 用途 函數 用途
curDate() 返回當前日期 curTime() 返回當前時間
now() 返回當前日期和時間 date() 返回日期時間的的日期部分
time() 返回日期時間的時間部分 day() 返回日期的天數部分
dayofweek() 返回一個日期對應星期數 hour() 返回時間的小時部分
minute() 返回時間的分鐘部分   month() 返回日期的月份部分
second() 返回時間的秒部分 year() 返回日期的年份部分
datediff() 計算兩個日期之差 addDate() 添加一個日期(天數)

 

 

 

 

 

 

 

 

 

日期和時間函數

獲取2005-9-1日的訂單

>SELECT * FROM orders WHERE order_date = '2005-09-01';

>SELECT * FROM orders WHERE DATE(order_date) = '2005-09-01';

獲取2005年9月的訂單

>SELECT * FROM orders WHERE order_date >= '2005-09-01' AND order_date <= '2005-09-30';

>SELECT * FROM orders WHERE YEAR(order_date) = '2005' AND MONTH(order_date) = '9';

聚合函數 • min() • max() • count() • sum() • avg() 聚合函數經常使用於統計數據使用 聚合函數統計時忽略值爲NULL的記錄

 

聚合函數

查詢商品價格最高的產品

> SELECT MAX(prod_price) FROM products;

查詢商品價格最低的產品

> SELECT MIN(prod_price) FROM products;

查詢商品價格總和

> SELECT SUM(prod_price) FROM products;

查詢商品平均價格

> SELECT AVG(prod_price) FROM products;

查詢客戶數量

>SELECT COUNT(*) FROM customers;

>SELECT COUNT(cust_email) FROM customers;

 

分組統計

獲取每一個供應商提供的產品數量

> SELECT vend_id,COUNT(*) FROM products GROUP BY vend_id;

獲取提供產品數量大於2的供應商

> SELECT vend_id,COUNT(*) FROM products GROUP BY vend_id HAVING COUNT(*) > 2;

HAVING語句用於GROUP BY的過濾 WHERE用於分組前過濾

 

獲取產品提供產品數量大於等於2併產品價格大於10的供應商

> SELECT vend_id,COUNT(*) FROM products WHERE prod_price > 10 GROUP BY vend_id HAVING COUNT(*) >= 2;

 

查詢語句順序 1. SELECT 2. FROM 3. WHERE 4. GROUP BY 5. HAVING 6. ORDER BY 7. LIMIT

 

子查詢

子查詢指的是嵌套在查詢中的查詢

獲取訂購商品編號爲TNT2的客戶名

1.從訂單詳情表中獲取訂單編號:

> SELECT order_num FROM orderitems WHERE prod_id = "TNT2";

2.根據訂單編號獲取下訂單的客戶ID:

> SELECT cust_id FROM orders WHERE order_num IN ('20005','20007');

3.根據客戶ID獲取客戶的姓名:

> SELECT cust_name FROM customers WHERE cust_id IN ('10001','10004');

 

子查詢

SELECT cust_name FROM customers WHERE cust_id IN (SELECT cust_id FROM orders WHERE order_num IN(SELECT order_num FROM orderitems WHERE prod_id = "TNT2") );

子查詢

獲取每一個客戶下的訂單數量

> SELECT cust_id,cust_name, (SELECT COUNT(*) FROM orders WHERE orders.cust_id = customers.cust_id) FROM customers;

 

等值查詢 > SELECT ts.id AS 'stuid',stu_name,tc.id AS 'class_id',class_name FROM t_student AS ts,t_class AS tc WHERE ts.class_id = tc.id 內聯接查詢 > SELECT ts.id AS 'stuid',stu_name,tc.id AS 'class_id',class_name FROM t_student AS ts INNER JOIN t_class AS tc ON ts.class_id = tc.id

 

左(外)聯接查詢

> SELECT ts.id AS 'stuid',stu_name,tc.id AS 'class_id',class_name FROM t_student AS ts LEFT JOIN t_class AS tc ON ts.class_id = tc.id

 

右(外)聯接查詢

>SELECT ts.id AS 'stuid',stu_name,tc.id AS 'class_id',class_name FROM t_student AS ts RIGHT JOIN t_class AS tc ON ts.class_id = tc.id

 

組合查詢

查詢全部的用戶和公司,並在一個結果集中顯示

> SELECT id,name,createtime FROM t_user UNION SELECT id,name,createtime FROM t_company;

組合查詢

查詢全部的用戶和公司,並在一個結果集中按照建立時間(createtime)降序顯示

> select id,name,createtime from t_user union select id,name,createtime from t_company order by createtime desc;

 

組合查詢

• union必須由兩條或兩條以上的select語句組成,語句之間使用union分割

• union的每一個查詢必須包含相同的列,表達式或聚合函數

• 列的數據類型必須兼容:類型沒必要徹底相同,可是必須是相互能夠轉換的

• union查詢會自動去除重複的行,若是不須要此特性,可使用union all

• 對union結果進行排序,order by語句必須在最後一條select語句以後

>SELECT vend_id FROM vendors UNION ALL SELECT vend_id FROM products;

 

數據庫引擎: • InnoDB:可靠的事務處理引擎,不支持全文搜索 • MyISAM:是一個性能極高的引擎,支持全文搜索,但不支持事務處理 • MEMORY:功能等同於MyISAM引擎,但因爲數據存儲在內存中,因此速度快 > create table xxx ( … )engine=innodb;

 

根據查詢記錄添加到表: >insert into t_tableb(val) select val from t_tablea;

相關文章
相關標籤/搜索